9825f518b3bf4d6ffd2d41c1bc9f4cc61d23c650 tdreszer Tue Apr 5 16:11:04 2011 -0700 Renamed lib file searchTracks.c and .h to search.c and .h to avoid conflict with hgTracks file searchTracks.c and to emphasize that this is common code to both track and file seartch. diff --git src/hg/lib/searchTracks.c src/hg/lib/searchTracks.c deleted file mode 100644 index d6154ba..0000000 --- src/hg/lib/searchTracks.c +++ /dev/null @@ -1,253 +0,0 @@ -// Track Search code which is shared between different CGIs - -#include "searchTracks.h" -#include "cheapcgi.h" -#include "hdb.h" -#include "hgConfig.h" -#include "hPrint.h" -#include "trix.h" -#include "mdb.h" -#include "subText.h" -#include "jsHelper.h" - -void getSearchTrixFile(char *database, char *buf, int len) -// Fill-in the name of the track search trix file -{ -char *trixPath = cfgOptionDefault("browser.trixPath", "/gbdb/$db/trackDb.ix"); -struct subText *subList = subTextNew("$db", database); -subTextStatic(subList, trixPath, buf, len); -} - -boolean isSearchTracksSupported(char *database, struct cart *cart) -// Return TRUE if searchTracks is supported for this database and javascript is supported too -{ -if (!advancedJavascriptFeaturesEnabled(cart)) - return FALSE; - -char trixFile[HDB_MAX_PATH_STRING]; -getSearchTrixFile(database, trixFile, sizeof(trixFile)); -return fileExists(trixFile); -} - -struct slPair *fileFormatSearchWhiteList() -// Gets the whitelist of approved file formats that is allowed for search -{ -char *crudeTypes[] = { - "bam", - "bam.bai", - "tagAlign", - "bed.gz", - "bigBed", - "broadPeak", - "narrowPeak", - "fastq", - "bigWig", - "wig" -}; -char *nicerTypes[] = { - "Alignment binary (bam) - binary SAM", - "Alignment binary index (bai) - binary SAM index", - "Alignment tags (tagAlign)", - "bed - browser extensible data", - "bigBed - self index, often remote bed format", - "Peaks Broad (broadPeak) - ENCODE large region peak format", - "Peaks Narrow (narrowPeak) - ENCODE small region peak format", - "Raw Sequence (fastq) - High throughput sequence format", - "Signal (bigWig) - self index, often remote wiggle format", - "Signal (wig) - wiggle format" -}; - -struct slPair *fileTypes = NULL; -int ix = 0, count = sizeof(crudeTypes)/sizeof(char *); -for(ix=0;ix 0) - { - char *dropDownHtml = cgiMakeSingleSelectDropList(name,fileTypes,selected,ANYLABEL,NULL,extraHtml); - slPairFreeList(&fileTypes); - return dropDownHtml; - } -return NULL; -} - -struct slPair *mdbSelectPairs(struct cart *cart,enum searchTab selectedTab, struct slPair *mdbVars) -// Returns the current mdb vars and vals in the table of drop down selects -{ -// figure out how many metadata selects are visible. -int numMetadataSelects = 0; - -struct slPair *mdbSelectPairs = NULL; -if (mdbVars == NULL) - return 0; - -// Get the current number of rows in the table of mdb selects -for(;;) - { - char buf[256]; - safef(buf, sizeof(buf), "%s%d", METADATA_NAME_PREFIX, numMetadataSelects + 1); - char *str = cartOptionalString(cart, buf); - if(isEmpty(str)) - break; - else - numMetadataSelects++; - } - -// Requesting to add or delete any? -int delSearchSelect = cartUsualInt(cart, TRACK_SEARCH_DEL_ROW, 0); // 1-based row to delete -int addSearchSelect = cartUsualInt(cart, TRACK_SEARCH_ADD_ROW, 0); // 1-based row to insert after -if(delSearchSelect) - numMetadataSelects--; -if(addSearchSelect) - numMetadataSelects++; - -if(numMetadataSelects) - { - int ix; - char buf[256]; - for(ix = 0; ix < numMetadataSelects; ix++) - { - int offset; // used to handle additions/deletions - if(addSearchSelect > 0 && ix >= addSearchSelect) - offset = 0; // do nothing to offset (i.e. copy data from previous row) - else if(delSearchSelect > 0 && ix + 1 >= delSearchSelect) - offset = 2; - else - offset = 1; - safef(buf, sizeof(buf), "%s%d", METADATA_NAME_PREFIX, ix + offset); - char *var = cartOptionalString(cart, buf); - char *val = NULL; - - if(selectedTab!=simpleTab) - { - // We need to make sure var is valid in this assembly; if it isn't, reset it to "cell". - if(slPairFindVal(mdbVars,var) == NULL) - var = "cell"; - else - { - safef(buf, sizeof(buf), "%s%d", METADATA_VALUE_PREFIX, ix + offset); - enum cvSearchable searchBy = cvSearchMethod(var); - if (searchBy == cvSearchByMultiSelect) - { - // Multi-selects as comma delimited list of values - struct slName *vals = cartOptionalSlNameList(cart,buf); - if (vals) - { - val = slNameListToString(vals,','); // A comma delimited list of values - slNameFreeList(&vals); - } - } - else if (searchBy == cvSearchBySingleSelect || searchBy == cvSearchByFreeText) - val = cloneString(cartUsualString(cart, buf,ANYLABEL)); - //else if (searchBy == cvSearchByDateRange || searchBy == cvSearchByIntegerRange) - // { - // // TO BE IMPLEMENTED - // } - - if (val != NULL && sameString(val, ANYLABEL)) - val = NULL; - } - } - slPairAdd(&mdbSelectPairs,var,val); // val already cloned - } - if(delSearchSelect > 0) - { - safef(buf, sizeof(buf), "%s%d", METADATA_NAME_PREFIX, numMetadataSelects + 1); - cartRemove(cart, buf); - safef(buf, sizeof(buf), "%s%d", METADATA_VALUE_PREFIX, numMetadataSelects + 1); - cartRemove(cart, buf); - } - } -else - { - // create defaults - slPairAdd(&mdbSelectPairs,"cell", NULL); - slPairAdd(&mdbSelectPairs,"antibody",NULL); - } - -slReverse(&mdbSelectPairs); -return mdbSelectPairs; -} - -char *mdbSelectsHtmlRows(struct sqlConnection *conn,struct slPair *mdbSelects,struct slPair *mdbVars,int cols,boolean fileSearch) -// genereates the html for the table rows containing mdb var and val selects. Assume tableSearch unless fileSearch -{ -struct dyString *output = dyStringNew(1024); - -dyStringPrintf(output,"ENCODE terms\n", cols,COLOR_DARKGREY); - -struct slPair *mdbSelect = mdbSelects; -int row = 0; -for(;mdbSelect != NULL; mdbSelect = mdbSelect->next) - { - char buf[256]; - char *dropDownHtml = NULL; - - #define PLUS_MINUS_BUTTON "" - #define ADD_PM_BUTTON(type,num,value) dyStringPrintf(output,PLUS_MINUS_BUTTON, (type), (num), (value), ((value) == '+' ? "add another row after":"delete"), (num)) - - dyStringAppend(output,"\n"); - row++; - - if(slCount(mdbSelects) > 2 || row > 2) - ADD_PM_BUTTON("minus", row, '-'); - else - dyStringAppend(output," "); - ADD_PM_BUTTON("plus", row, '+'); - - dyStringAppend(output,"and \n"); - safef(buf, sizeof(buf), "%s%i", METADATA_NAME_PREFIX, row); - - // Left side select of vars - dropDownHtml = cgiMakeSingleSelectDropList(buf, mdbVars,mdbSelect->name, NULL,"mdbVar","style='font-size:.9em;' onchange='findTracksMdbVarChanged(this);'"); - if (dropDownHtml) - { - dyStringAppend(output,dropDownHtml); - freeMem(dropDownHtml); - } - - // Right side select of vals - safef(buf, sizeof(buf), "%s%i", METADATA_VALUE_PREFIX, row); - enum cvSearchable searchBy = cvSearchMethod(mdbSelect->name); - if (searchBy == cvSearchBySingleSelect || searchBy == cvSearchByMultiSelect) - { - dyStringPrintf(output,"\nis%s\n\n", - row,(searchBy == cvSearchByMultiSelect?" among":""),buf); - struct slPair *pairs = mdbValLabelSearch(conn, mdbSelect->name, MDB_VAL_STD_TRUNCATION, FALSE, !fileSearch, fileSearch); // not tags, either a file or table search - if (slCount(pairs) > 0) - { - char *dropDownHtml = cgiMakeSelectDropList((searchBy == cvSearchByMultiSelect), - buf, pairs,mdbSelect->val, ANYLABEL,"mdbVal","style='min-width:200px; font-size:.9em;' onchange='findTracksMdbValChanged(this);'"); - if (dropDownHtml) - { - dyStringAppend(output,dropDownHtml); - freeMem(dropDownHtml); - } - slPairFreeList(&pairs); - } - } - else if (searchBy == cvSearchByFreeText) - { - dyStringPrintf(output,"contains\n\n",row,buf); - dyStringPrintf(output,"\n", - buf,(mdbSelect->val ? (char *)mdbSelect->val: "")); - } - //else if (searchBy == cvSearchByDateRange || searchBy == cvSearchByIntegerRange) - // { - // // TO BE IMPLEMENTED - // } - dyStringPrintf(output," \n", row); - dyStringPrintf(output,"\n"); - } - - dyStringPrintf(output," ", cols); - -return dyStringCannibalize(&output); -} -