src/hg/hgTracks/searchTracks.c 1.9

1.9 2010/06/03 05:52:42 larrym
support simple and advanced tabs
Index: src/hg/hgTracks/searchTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/searchTracks.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -b -B -U 4 -r1.8 -r1.9
--- src/hg/hgTracks/searchTracks.c	30 May 2010 22:38:13 -0000	1.8
+++ src/hg/hgTracks/searchTracks.c	3 Jun 2010 05:52:42 -0000	1.9
@@ -138,18 +138,18 @@
 char query[256];
 struct sqlResult *sr = NULL;
 char **row = NULL;
 
-if(strcmp(op, "contains"))
+if(sameString(op, "contains"))
     if(name == NULL)
-        safef(query, sizeof(query), "select distinct obj from metaDb where val = '%s'", val);
+        safef(query, sizeof(query), "select obj from metaDb where val like  '%%%s%%'", val);
     else
-        safef(query, sizeof(query), "select obj from metaDb where var = '%s' and val = '%s'", name, val);
+        safef(query, sizeof(query), "select obj from metaDb where var = '%s' and val like  '%%%s%%'", name, val);
 else
     if(name == NULL)
-        safef(query, sizeof(query), "select obj from metaDb where val like  '%%%s%%'", val);
+        safef(query, sizeof(query), "select distinct obj from metaDb where val = '%s'", val);
     else
-        safef(query, sizeof(query), "select obj from metaDb where var = '%s' and val like  '%%%s%%'", name, val);
+        safef(query, sizeof(query), "select obj from metaDb where var = '%s' and val = '%s'", name, val);
 sr = sqlGetResult(conn, query);
 while ((row = sqlNextRow(sr)) != NULL)
     {
     slNameAddHead(&retval, row[0]);
@@ -190,11 +190,12 @@
 char *labels[128];
 int numGroups = 1;
 groups[0] = ANYLABEL;
 labels[0] = ANYLABEL;
+char *currentTab = cartUsualString(cart, "hgt.currentSearchTab", "simpleTab");
 char *nameSearch = cartOptionalString(cart, "hgt.nameSearch");
 char *nameOp = cartOptionalString(cart, "hgt.nameOp");
-char *descSearch = cartOptionalString(cart, "hgt.descSearch");
+char *descSearch;
 char *groupSearch = cartOptionalString(cart, "hgt.groupSearch");
 boolean doSearch = sameString(cartOptionalString(cart, searchTracks), "Search");
 struct sqlConnection *conn = hAllocConn(database);
 boolean metaDbExists = sqlTableExists(conn, "metaDb");
@@ -203,8 +204,22 @@
 int numMetadataNonEmpty = 0;
 char **metadataName;
 char **metadataValue;
 struct hash *parents = newHash(4);
+boolean simpleSearch;
+
+if(sameString(currentTab, "simpleTab"))
+    {
+    descSearch = cartOptionalString(cart, "hgt.simpleSearch");
+    simpleSearch = TRUE;
+    freez(&nameSearch);
+    freez(&groupSearch);
+    }
+else
+    {
+    descSearch = cartOptionalString(cart, "hgt.descSearch");
+    simpleSearch = FALSE;
+    }
 
 getTrackList(&groupList, -2);
 slSort(&groupList, gCmpGroup);
 for (group = groupList; group != NULL; group = group->next)
@@ -218,23 +233,37 @@
             internalErr();
         }
     }
 
-hPrintf("<form action='%s' name='SearchTracks' method='post'>\n\n", hgTracksName());
+hPrintf("<form action='%s' name='SearchTracks' method='get'>\n\n", hgTracksName());
 
 webStartWrapperDetailedNoArgs(cart, database, "", "Track Search (prototype!)", FALSE, FALSE, FALSE, FALSE);
 
 hPrintf("<input type='hidden' name='db' value='%s'>\n", database);
-hPrintf("<table>\n");
+fprintf(stderr, "currentTab: %s\n",  currentTab);
+hPrintf("<input type='hidden' name='hgt.currentSearchTab' id='hgt.currentSearchTab' value='%s'>\n", currentTab);
 
-hPrintf("<tr><td></td><td><b>Description:</b></td><td>contains</td>\n");
+hPrintf("<div id='tabs'>\n"
+        "<ul>\n"
+        "<li><a href='#simpleTab'><span>Search</span></a></li>\n"
+        "<li><a href='#advancedTab'><span>Advanced Search</span></a></li>\n"
+        "</ul>\n"
+        "<div id='simpleTab'>\n");
+
+hPrintf("<input type='text' name='hgt.simpleSearch' value='%s' size='80'>\n", descSearch == NULL ? "" : descSearch);
+
+hPrintf("</div>\n"
+        "<div id='advancedTab'>\n"
+        "<table>\n");
+
+hPrintf("<tr><td></td><td></td><td><b>Description:</b></td><td>contains</td>\n");
 hPrintf("<td><input type='text' name='hgt.descSearch' value='%s' size='80'></td></tr>\n", descSearch == NULL ? "" : descSearch);
 
-hPrintf("<tr><td>and</td><td><b>Track Name:</b></td><td>\n");
+hPrintf("<tr><td></td><td>and</td><td><b>Track Name:</b></td><td>\n");
 cgiMakeDropListFull("hgt.nameOp", op_labels, ops, ArraySize(ops), nameOp == NULL ? "contains" : nameOp, NULL);
 hPrintf("</td>\n<td><input type='text' name='hgt.nameSearch' value='%s'></td></tr>\n", nameSearch == NULL ? "" : nameSearch);
 
-hPrintf("<tr><td>and</td>\n");
+hPrintf("<tr><td></td><td>and</td>\n");
 hPrintf("<td><b>Group</b></td><td>is</td>\n<td>\n");
 cgiMakeDropListFull("hgt.groupSearch", labels, groups, numGroups, groupSearch, NULL);
 hPrintf("</td></tr>\n");
 
@@ -260,16 +289,19 @@
         {
         char buf[256];
         safef(buf, sizeof(buf), "%s%d", METADATA_NAME_PREFIX, i + 1);
         metadataName[i] = cartOptionalString(cart, buf);
+        if(!simpleSearch)
+            {
         safef(buf, sizeof(buf), "%s%d", METADATA_VALUE_PREFIX, i + 1);
         metadataValue[i] = cartOptionalString(cart, buf);
-        if(!strcmp(metadataValue[i], ANYLABEL))
+            if(sameString(metadataValue[i], ANYLABEL))
             metadataValue[i] = NULL;
         if(!isEmpty(metadataValue[i]))
             numMetadataNonEmpty++;
         }
     }
+    }
 else
     {
     // create defaults
     numMetadataSelects = 2;
@@ -294,9 +326,16 @@
         char **terms;
         char buf[256];
         int len;
 
-        hPrintf("<tr><td>and</td>\n");
+        hPrintf("<tr><td>\n");
+
+        if(i == 0)
+            hPrintf("&nbsp;\n");
+        else
+            hButtonWithOnClick("hgt.ignoreme", "+", "add a select", "alert('add a select is not yet implemented'); return false;");
+
+        hPrintf("</td><td>and</td>\n");
         hPrintf("</td><td>\n");
         safef(buf, sizeof(buf), "%s%i", METADATA_NAME_PREFIX, i + 1);
         cgiMakeDropListClassWithStyleAndJavascript(buf, metaValues, count, metadataName[i], 
                                                    NULL, NULL, "onchange=metadataSelectChanged(this)");
@@ -308,8 +347,11 @@
         }
     }
 
 hPrintf("</table>\n");
+//  hPrintf("<u><a onclick=\"alert('add a select not yet implemented')\" title=\"add a select\">+</a></u>");
+
+hPrintf("</div>\n</div>\n");
 
 hPrintf("<input type='submit' name='%s' value='Search'>\n", searchTracks);
 hPrintf("<input type='submit' name='submit' value='Cancel'>\n");
 hPrintf("</form>\n");
@@ -356,9 +398,9 @@
         }
 
     for (group = groupList; group != NULL; group = group->next)
         {
-        if(groupSearch == NULL || !strcmp(group->name, groupSearch))
+        if(groupSearch == NULL || sameString(group->name, groupSearch))
             {
             if (group->trackList != NULL)
                 {
                 struct trackRef *tr;
@@ -399,22 +441,15 @@
         hPrintf("<form action='%s' name='SearchTracks' method='post'>\n\n", hgTracksName());
         hButton("submit", "save");
         hButtonWithOnClick("hgt.ignoreme", "show all", "show all found tracks", "alert('show all not yet implemented'); return false;");
         hPrintf("<table>\n");
-        hPrintf("<tr bgcolor='#666666'><td><b>Name</b></td><td><b>Description</b></td><td><b>Group</b></td><td><br /></td></tr>\n");
+        hPrintf("<tr bgcolor='#666666'><td><br /></td><td><b>Name</b></td><td><b>Description</b></td><td><b>Group</b></td></tr>\n");
         struct slRef *ptr;
         while((ptr = slPopHead(&tracks)))
             {
             struct track *track = (struct track *) ptr->val;
             // trackDbOutput(track->tdb, stderr, ',', '\n');
             hPrintf("<tr bgcolor='#EEEEEE'>\n");
-            hPrintf("<td>%s</td>\n", track->shortLabel);
-            hPrintf("<td><a target='_top' href='%s'>%s</a></td>\n", trackUrl(track->track, NULL), track->longLabel);
-            // How do we get subtrack's parent?
-            struct track *parent = NULL;
-            if(hashLookup(parents, track->track) != NULL)
-                parent = (struct track *) hashLookup(parents, track->track)->val;
-            hPrintf("<td>%s</td>\n", parent != NULL ? parent->longLabel : track->group != NULL ? track->group->label : "");
             hPrintf("<td>\n");
             if (tdbIsSuper(track->tdb))
                 {
                 superTrackDropDown(cart, track->tdb,
@@ -426,9 +461,17 @@
                                         track->canPack, (track->visibility == tvHide) ? 
                                         "hiddenText" : "normalText", 
                                         trackDbSetting(track->tdb, "onlyVisibility"));
                 }
-            hPrintf("</td></tr>\n");
+            hPrintf("</td>\n");
+            hPrintf("<td>%s</td>\n", track->shortLabel);
+            hPrintf("<td><a target='_top' href='%s'>%s</a></td>\n", trackUrl(track->track, NULL), track->longLabel);
+            // How do we get subtrack's parent?
+            struct track *parent = NULL;
+            if(hashLookup(parents, track->track) != NULL)
+                parent = (struct track *) hashLookup(parents, track->track)->val;
+            hPrintf("<td>%s</td>\n", parent != NULL ? parent->longLabel : track->group != NULL ? track->group->label : "");
+            hPrintf("</tr>\n");
             }
         hPrintf("</table>\n");
         hButton("submit", "save");
         hPrintf("\n</form>\n");