f31ae6fdae48d29026bf9167de2558d5900a6323 tdreszer Fri Feb 25 11:56:39 2011 -0800 Another step towards supporting multi-selects in track search and file search diff --git src/hg/hgApi/hgApi.c src/hg/hgApi/hgApi.c index 8672362..a53df8a 100644 --- src/hg/hgApi/hgApi.c +++ src/hg/hgApi/hgApi.c @@ -124,70 +124,66 @@ 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"); - char *onChange="findTracksMdbValChanged(this);"; - #define PLUS_MINUS_BUTTON_BY_JS - #ifndef PLUS_MINUS_BUTTON_BY_JS - onChange="findTracksSearchButtonsEnable(this);"; - #endif///ndef PLUS_MINUS_BUTTON_BY_JS enum mdbCvSearchable searchBy = mdbCvSearchMethod(var); - if (searchBy == cvsSearchBySingleSelect) + if (searchBy == cvsSearchBySingleSelect || searchBy == cvsSearchByMultiSelect) { - dyStringPrintf(output,"<SELECT NAME=\"%s%i\" class='mdbVal single' style='min-width:200px; font-size:.9em;' onchange='%s'>\n", - METADATA_VALUE_PREFIX, ix, onChange); + dyStringPrintf(output,"<SELECT NAME='%s%i' onchange='findTracksMdbValChanged(this); style='min-width:200px; font-size:.9em;",METADATA_VALUE_PREFIX,ix); + if (searchBy == cvsSearchBySingleSelect) + dyStringPrintf(output,"' class='mdbVal'>\n"); + else + dyStringPrintf(output," display:none;' class='mdbVal filterBy' multiple>\n"); // Get options list struct slPair *pairs = mdbValLabelSearch(conn, var, MDB_VAL_STD_TRUNCATION, TRUE, FALSE); // Tables not files - struct slPair *pair; if (pairs == NULL) fail("No selectable values for this metadata variable"); - dyStringPrintf(output, "<OPTION VALUE='Any'>Any</OPTION>\n"); - dyStringPrintf(output, "[\n"); + #define ANYLABEL "Any" + slPairAdd(&pairs, ANYLABEL, ANYLABEL); // Need to add Any to the list + struct slPair *pair; + // All options for (pair = pairs; pair != NULL; pair = pair->next) - { dyStringPrintf(output, "<OPTION VALUE=\"%s\">%s</OPTION>\n", javaScriptLiteralEncode(pair->val), javaScriptLiteralEncode(pair->name)); - } dyStringPrintf(output,"</SELECT>\n"); + slPairFreeList(&pairs); } else if (searchBy == cvsSearchByFreeText) { - dyStringPrintf(output,"<input type='text' name='%s%i' value='' class='mdbVal freeText' onkeyup='%s' style='max-width:310px; width:310px; font-size:.9em;'>", - METADATA_VALUE_PREFIX, ix, onChange); + dyStringPrintf(output,"<input type='text' name='%s%i' value='' class='mdbVal freeText' onchange='findTracksMdbValChanged(this);' style='max-width:310px; width:310px; font-size:.9em;'>", + METADATA_VALUE_PREFIX, ix); } - //else if (searchBy == cvsSearchByMultiSelect) - // { - // // TO BE IMPLEMENTED - // } //else if (searchBy == cvsSearchByDateRange || searchBy == cvsSearchByDateRange) // { // // TO BE IMPLEMENTED // } else fail("Metadata variable not searchable"); + + dyStringPrintf(output,"<span id='helpLink%i'> </span>",ix); } else fail("Assembly does not support metaDb"); } else if(!strcmp(cmd, "tableMetadata")) { // returns an html table with metadata for a given track char *trackName = cgiOptionalString("track"); boolean showLonglabel = (NULL != cgiOptionalString("showLonglabel")); boolean showShortLabel = (NULL != cgiOptionalString("showShortLabel")); if (trackName != NULL) { struct trackDb *tdb = hTrackDbForTrackAndAncestors(database, trackName); // Doesn't get whole track list if (tdb != NULL) { char * html = metadataAsHtmlTable(database,tdb,showLonglabel,showShortLabel,NULL);