a857c28d322f6bec282372ca7c1d84d4eccdf6a4 tdreszer Mon Jan 31 13:35:54 2011 -0800 Reworked searchTracks +/- buttons to use javascript and fixed some bugs seen when files search is enabled as a tab in track search. diff --git src/hg/hgTracks/searchTracks.c src/hg/hgTracks/searchTracks.c index 5281d15..9a0187e 100644 --- src/hg/hgTracks/searchTracks.c +++ src/hg/hgTracks/searchTracks.c @@ -417,58 +417,74 @@ mdbVar = needMem(sizeof(char *) * numMetadataSelects); mdbVal = needMem(sizeof(char *) * numMetadataSelects); mdbVar[0] = "cell"; mdbVar[1] = "antibody"; mdbVal[0] = ANYLABEL; mdbVal[1] = ANYLABEL; } hPrintf("<tr><td colspan='%d' align='right' class='lineOnTop' style='height:20px; max-height:20px;'><em style='color:%s; width:200px;'>ENCODE terms</em></td></tr>", cols,COLOR_DARKGREY); for(i = 0; i < numMetadataSelects; i++) { char **terms = NULL, **labels = NULL; char buf[256]; int len; - #define PRINT_BUTTON(name,value,msg,js) printf("<input type='submit' name='%s' value='%s' style='font-size:.7em;' title='%s' onclick='%s'>", (name), (value), (msg), (js)); - hPrintf("<tr><td>\n"); + #define PLUS_MINUS_BUTTON "<input type='button' id='%sButton%d' value='%c' style='font-size:.7em;' title='%s' onclick='findTracksMdbSelectPlusMinus(this,%d)'>" + #define PRINT_PM_BUTTON(type,num,value) printf(PLUS_MINUS_BUTTON, (type), (num), (value), ((value) == '+' ? "add another row after":"delete"), (num)); + #ifndef PLUS_MINUS_BUTTON + #define PRINT_BUTTON(name,value,msg,js) printf("<input type='submit' name='%s' value='%s' style='font-size:.7em;' title='%s this row' onclick='%s'>", (name), (value), (msg), (js)); + #endif//ndef PLUS_MINUS_BUTTON + hPrintf("<tr class='mdbSelect'><td nowrap>\n"); if(numMetadataSelects > 2 || i >= 2) { + #ifdef PLUS_MINUS_BUTTON + PRINT_PM_BUTTON("minus", i + 1, '-'); + #else///ifndef PLUS_MINUS_BUTTON safef(buf, sizeof(buf), "return delSearchSelect(this, %d);", i + 1); PRINT_BUTTON(TRACK_SEARCH, "-", "delete this row", buf); + #endif//ndef PLUS_MINUS_BUTTON } else hPrintf(" "); + #ifdef PLUS_MINUS_BUTTON + PRINT_PM_BUTTON("plus", i + 1, '+'); + #else///ifndef PLUS_MINUS_BUTTON hPrintf("</td><td>\n"); safef(buf, sizeof(buf), "return addSearchSelect(this, %d);", i + 1); PRINT_BUTTON(TRACK_SEARCH, "+", "add another row after this row", buf); + #endif//ndef PLUS_MINUS_BUTTON hPrintf("</td><td>and </td><td colspan=3 nowrap>\n"); safef(buf, sizeof(buf), "%s%i", METADATA_NAME_PREFIX, i + 1); - cgiDropDownWithTextValsAndExtra(buf, mdbVarLabels, mdbVars,count,mdbVar[i],"class='mdbVar' style='font-size:.9em;' onchange='findTracksMdbVarChanged2(this);'"); + cgiDropDownWithTextValsAndExtra(buf, mdbVarLabels, mdbVars,count,mdbVar[i],"class='mdbVar' style='font-size:.9em;' onchange='findTracksMdbVarChanged(this);'"); // TODO: move to lib since hgTracks and hgApi share enum mdbCvSearchable searchBy = mdbCvSearchMethod(mdbVar[i]); if (searchBy == cvsSearchByMultiSelect) { // TO BE IMPLEMENTED } else if (searchBy == cvsSearchBySingleSelect) { safef(buf, sizeof(buf), "%s%i", METADATA_VALUE_PREFIX, i + 1); hPrintf("</td><td align='right' id='isLike%d' style='width:10px;'>is</td><td nowrap id='%s' style='max-width:600px;'>\n",i + 1,buf); len = getTermArray(conn, &labels, &terms, mdbVar[i]); + #ifdef PLUS_MINUS_BUTTON + cgiMakeDropListFull(buf, labels, terms, len, mdbVal[i], "class='mdbVal single' style='min-width:200px; font-size:.9em;' onchange='findTracksMdbValChanged(this);'"); + #else///ifndef PLUS_MINUS_BUTTON cgiMakeDropListFull(buf, labels, terms, len, mdbVal[i], "class='mdbVal single' style='min-width:200px; font-size:.9em;' onchange='findTracksSearchButtonsEnable(true);'"); + #endif//ndef PLUS_MINUS_BUTTON } else if (searchBy == cvsSearchByFreeText) { safef(buf, sizeof(buf), "%s%i", METADATA_VALUE_PREFIX, i + 1); hPrintf("</td><td align='right' id='isLike%d' style='width:10px;'>contains</td><td nowrap id='%s' style='max-width:600px;'>\n",i + 1,buf); hPrintf("<input type='text' name='%s' value='%s' class='mdbVal freeText' onkeyup='findTracksSearchButtonsEnable(true);' style='max-width:310px; width:310px; font-size:.9em;'>", buf,(mdbVal[i] ? mdbVal[i]: "")); } else if (searchBy == cvsSearchByDateRange || searchBy == cvsSearchByIntegerRange) { // TO BE IMPLEMENTED } hPrintf("<span id='helpLink%d'>help</span></td>\n", i + 1); hPrintf("</tr>\n"); } @@ -913,46 +929,46 @@ hPrintf("<input type='hidden' name='%s' id='currentTab' value='%s'>\n", TRACK_SEARCH_CURRENT_TAB, currentTab); hPrintf("<input type='hidden' name='%s' value=''>\n",TRACK_SEARCH_DEL_ROW); hPrintf("<input type='hidden' name='%s' value=''>\n",TRACK_SEARCH_ADD_ROW); hPrintf("<input type='hidden' name='%s' value=''>\n",TRACK_SEARCH_PAGER); hPrintf("<div id='tabs' style='display:none; %s'>\n" "<ul>\n" "<li><a href='#simpleTab'><B style='font-size:.9em;font-family: arial, Geneva, Helvetica, san-serif;'>Search</B></a></li>\n" "<li><a href='#advancedTab'><B style='font-size:.9em;font-family: arial, Geneva, Helvetica, san-serif;'>Advanced</B></a></li>\n" #ifdef FILES_SEARCH "<li><a href='#filesTab'><B style='font-size:.9em;font-family: arial, Geneva, Helvetica, san-serif;'>Files</B></a></li>\n" #endif///def FILES_SEARCH "</ul>\n" "<div id='simpleTab' style='max-width:inherit;'>\n",cgiBrowser()==btIE?"width:1060px;":"max-width:inherit;"); -hPrintf("<table style='width:100%%; font-size:.9em;'><tr><td colspan='2'>"); +hPrintf("<table id='simpleTable' style='width:100%%; font-size:.9em;'><tr><td colspan='2'>"); hPrintf("<input type='text' name='%s' id='simpleSearch' class='submitOnEnter' value='%s' style='max-width:1000px; width:100%%;' onkeyup='findTracksSearchButtonsEnable(true);'>\n", TRACK_SEARCH_SIMPLE,descSearch == NULL ? "" : descSearch); if (selectedTab==simpleTab && descSearch) searchTermsExist = TRUE; hPrintf("</td></tr><td style='max-height:4px;'></td></tr></table>"); //hPrintf("</td></tr></table>"); hPrintf("<input type='submit' name='%s' id='searchSubmit' value='search' style='font-size:.8em;'>\n", TRACK_SEARCH); hPrintf("<input type='button' name='clear' value='clear' class='clear' style='font-size:.8em;' onclick='findTracksClear();'>\n"); hPrintf("<input type='submit' name='submit' value='cancel' class='cancel' style='font-size:.8em;'>\n"); hPrintf("</div>\n"); // Advanced tab hPrintf("<div id='advancedTab' style='width:inherit;'>\n" - "<table cellSpacing=0 style='width:inherit; font-size:.9em;'>\n"); + "<table id='advancedTable' cellSpacing=0 style='width:inherit; font-size:.9em;'>\n"); cols = 8; // Track Name contains hPrintf("<tr><td colspan=3></td>"); hPrintf("<td nowrap><b style='max-width:100px;'>Track Name:</b></td>"); hPrintf("<td align='right'>contains</td>\n"); hPrintf("<td colspan='%d'>", cols - 4); hPrintf("<input type='text' name='%s' id='nameSearch' class='submitOnEnter' value='%s' onkeyup='findTracksSearchButtonsEnable(true);' style='min-width:326px; font-size:.9em;'>", TRACK_SEARCH_ON_NAME, nameSearch == NULL ? "" : nameSearch); hPrintf("</td></tr>\n"); // Description contains hPrintf("<tr><td colspan=2></td><td align='right'>and </td>"); hPrintf("<td><b style='max-width:100px;'>Description:</b></td>"); hPrintf("<td align='right'>contains</td>\n"); @@ -989,31 +1005,31 @@ if(metaDbExists) numMetadataSelects = printMdbSelects(conn, cart, selectedTab, &mdbVar, &mdbVal, &numMetadataNonEmpty, cols); else numMetadataSelects = 0; hPrintf("</table>\n"); hPrintf("<input type='submit' name='%s' id='searchSubmit' value='search' style='font-size:.8em;'>\n", TRACK_SEARCH); hPrintf("<input type='button' name='clear' value='clear' class='clear' style='font-size:.8em;' onclick='findTracksClear();'>\n"); hPrintf("<input type='submit' name='submit' value='cancel' class='cancel' style='font-size:.8em;'>\n"); //hPrintf("<a target='_blank' href='../goldenPath/help/trackSearch.html'>help</a>\n"); hPrintf("</div>\n"); #ifdef FILES_SEARCH // Files tab hPrintf("<div id='filesTab' style='width:inherit;'>\n" - "<table cellSpacing=0 style='width:inherit; font-size:.9em;'>\n"); + "<table id='filesTable' cellSpacing=0 style='width:inherit; font-size:.9em;'>\n"); cols = 8; //// Track Name contains //hPrintf("<tr><td colspan=3></td>"); //hPrintf("<td nowrap><b style='max-width:100px;'>Track Name:</b></td>"); //hPrintf("<td align='right'>contains</td>\n"); //hPrintf("<td colspan='%d'>", cols - 4); //hPrintf("<input type='text' name='%s' id='nameSearch' class='submitOnEnter' value='%s' onkeyup='findTracksSearchButtonsEnable(true);' style='min-width:326px; font-size:.9em;'>", // TRACK_SEARCH_ON_NAME, nameSearch == NULL ? "" : nameSearch); //hPrintf("</td></tr>\n"); // //// Description contains //hPrintf("<tr><td colspan=2></td><td align='right'>and </td>"); //hPrintf("<td><b style='max-width:100px;'>Description:</b></td>"); //hPrintf("<td align='right'>contains</td>\n"); @@ -1101,51 +1117,53 @@ struct slPair *mdbPairs = NULL; for(ix = 0; ix < numMetadataSelects; ix++) { if(!isEmpty(mdbVal[ix])) slAddHead(&mdbPairs,slPairNew(mdbVar[ix],mdbVal[ix])); } slReverse(&mdbPairs); // Now search struct slRef *tracks = NULL; if(selectedTab==simpleTab) tracks = simpleSearchForTracksstruct(trix,descWords,descWordCount); else if(selectedTab==advancedTab) tracks = advancedSearchForTracks(conn,groupList,descWords,descWordCount,nameSearch,typeSearch,descSearch,groupSearch,mdbPairs); #ifdef FILES_SEARCH - else if(selectedTab==filesTab) + else if(selectedTab==filesTab && mdbPairs != NULL) fileSearchResults(database, conn, mdbPairs, fileTypeSearch); #endif///def FILES_SEARCH if (measureTiming) uglyTime("Searched for tracks"); + if (tracks != NULL) + { // Sort and Print results if(selectedTab!=filesTab) { enum sortBy sortBy = cartUsualInt(cart,TRACK_SEARCH_SORT,sbRelevance); tracksFound = slCount(tracks); if(tracksFound > 1) findTracksSort(&tracks,sortBy); displayFoundTracks(cart,tracks,tracksFound,sortBy); if (measureTiming) uglyTime("Displayed found tracks"); } - + } slPairFreeList(&mdbPairs); } hFreeConn(&conn); webNewSection("About Track Search"); if(metaDbExists) hPrintf("<p>Search for terms in track names, descriptions, groups, and ENCODE " "metadata. If multiple terms are entered, only tracks with all terms " "will be part of the results."); else hPrintf("<p>Search for terms in track descriptions, groups, and names. " "If multiple terms are entered, only tracks with all terms " "will be part of the results."); hPrintf("<BR><a target='_blank' href='../goldenPath/help/trackSearch.html'>more help</a></p>\n"); webEndSectionTables();