58a3bf5fbc986db7c8b17589c9720b4bc6708133
tdreszer
Tue Mar 8 16:44:22 2011 -0800
Moved a few functions common to track search and file search into library code. Redesigned a few things to standardize on slPair lists of vals and labels.
diff --git src/hg/hgApi/hgApi.c src/hg/hgApi/hgApi.c
index a53df8a..a220ec6 100644
--- src/hg/hgApi/hgApi.c
+++ src/hg/hgApi/hgApi.c
@@ -1,24 +1,25 @@
/* hgApi - provide a JSON based API to the browser. */
#include "common.h"
#include "hdb.h"
#include "mdb.h"
#include "cheapcgi.h"
#include "hPrint.h"
#include "dystring.h"
#include "hui.h"
+#include "searchTracks.h"
static char const rcsid[] = "$Id: hgApi.c,v 1.3 2010/05/30 21:11:47 larrym Exp $";
static void fail(char *msg)
{
puts("Status: 400\n\n");
puts(msg);
exit(-1);
}
void makeIndent(char *buf, int bufLen, int indent)
{
indent = min(indent, bufLen - 2);
memset(buf, '\t', indent);
buf[indent] = 0;
@@ -94,87 +95,82 @@
boolean metaDbExists = sqlTableExists(conn, "metaDb");
if(metaDbExists)
{
char *var = cgiOptionalString("var");
if(var)
var = sqlEscapeString(var);
else
fail("Missing var parameter");
struct slPair *pairs = mdbValLabelSearch(conn, var, MDB_VAL_STD_TRUNCATION, TRUE, FALSE); // Tables not files
struct slPair *pair;
dyStringPrintf(output, "[\n");
for (pair = pairs; pair != NULL; pair = pair->next)
{
if(pair != pairs)
dyStringPrintf(output, ",\n");
- dyStringPrintf(output, "['%s','%s']", javaScriptLiteralEncode(pair->name), javaScriptLiteralEncode(pair->val));
+ dyStringPrintf(output, "['%s','%s']", javaScriptLiteralEncode(mdbPairLabel(pair)), javaScriptLiteralEncode(mdbPairVal(pair)));
}
dyStringPrintf(output, "\n]\n");
}
else
fail("Assembly does not support metaDb");
}
// TODO: move to lib since hgTracks and hgApi share
#define METADATA_VALUE_PREFIX "hgt_mdbVal"
else if(startsWith(METADATA_VALUE_PREFIX, cmd))
{
// Returns metaDb value control: drop down or free text, with or without help link.
// e.g. http://genome.ucsc.edu/hgApi?db=hg18&cmd=hgt_mdbVal3&var=cell
// TODO: Move guts to lib, so that hgTracks::searchTracks.c and hgApi.c can share
struct sqlConnection *conn = hAllocConn(database);
boolean metaDbExists = sqlTableExists(conn, "metaDb");
if(metaDbExists)
{
char *var = cgiOptionalString("var");
if(var)
var = sqlEscapeString(var);
else
fail("Missing var parameter");
int ix = atoi(cmd+strlen(METADATA_VALUE_PREFIX)); // 1 based index
if(ix == 0) //
fail("Unsupported 'cmd' parameter");
enum mdbCvSearchable searchBy = mdbCvSearchMethod(var);
+ char name[128];
+ safef(name,sizeof name,"%s%i",METADATA_VALUE_PREFIX,ix);
if (searchBy == cvsSearchBySingleSelect || searchBy == cvsSearchByMultiSelect)
{
- dyStringPrintf(output,"\n");
+ if (slCount(pairs) > 0)
+ {
+ char *dropDownHtml = cgiMakeSelectDropList((searchBy == cvsSearchByMultiSelect),
+ name, pairs,NULL, ANYLABEL,"mdbVal", "style='min-width: 200px; font-size: .9em;' onchange='findTracksMdbValChanged(this);'");
+ if (dropDownHtml)
+ {
+ dyStringAppend(output,dropDownHtml);
+ freeMem(dropDownHtml);
+ }
slPairFreeList(&pairs);
}
+ }
else if (searchBy == cvsSearchByFreeText)
{
- dyStringPrintf(output,"",
- METADATA_VALUE_PREFIX, ix);
+ dyStringPrintf(output,"",
+ name);
}
//else if (searchBy == cvsSearchByDateRange || searchBy == cvsSearchByDateRange)
// {
// // TO BE IMPLEMENTED
// }
else
fail("Metadata variable not searchable");
dyStringPrintf(output," ",ix);
}
else
fail("Assembly does not support metaDb");
}
else if(!strcmp(cmd, "tableMetadata"))
{ // returns an html table with metadata for a given track