9b13731e6e466aa0f781179da2d504db2f4c15a9 tdreszer Wed Mar 30 11:28:34 2011 -0700 Made slPairListFromString and slPairListToString optionally handle double quotes. Finally made mdbObjReorderByCv so that priority in cv.ra typeOfTerms is used. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 96fd4d8..6b7210f 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -173,66 +173,61 @@ const struct mdbObj *safeObj = metadataForTable(db,tdb,NULL); if (safeObj == NULL || safeObj->vars == NULL) return NULL; //struct dyString *dyTable = dyStringCreate("<table id='mdb_%s'>",tdb->table); struct dyString *dyTable = dyStringCreate("<table style='display:inline-table;'>"); if(showLongLabel) dyStringPrintf(dyTable,"<tr valign='bottom'><td colspan=2 nowrap>%s</td></tr>",tdb->longLabel); if(showShortLabel) dyStringPrintf(dyTable,"<tr valign='bottom'><td align='right' nowrap><i>shortLabel:</i></td><td nowrap>%s</td></tr>",tdb->shortLabel); // Get the hash of mdb and cv term types struct hash *cvTermTypes = (struct hash *)cvTermTypeHash(); struct mdbObj *mdbObj = mdbObjClone(safeObj); // Important if we are going to remove vars! -mdbObjRemoveVars(mdbObj,"composite project objType dccInternalNotes"); // Don't bother showing these (suggest: "composite project dataType view tableName") +mdbObjRemoveVars(mdbObj,MDB_OBJ_TYPE_COMPOSITE " " MDB_VAR_PROJECT " " MDB_OBJ_TYPE); // Don't bother showing these (NOTE: composite,objType should be added to cv.ra typeOfTerms as hidden) mdbObjRemoveHiddenVars(mdbObj); -mdbObjReorderVars(mdbObj,"grant lab dataType cell treatment antibody protocol replicate view setType inputType",FALSE); // Bring to front -mdbObjReorderVars(mdbObj,"subId submittedDataVersion dateSubmitted dateResubmitted dateUnrestricted dataVersion tableName fileName fileIndex",TRUE); // Send to back +mdbObjReorderByCv(mdbObj,FALSE);// Use cv defined order for visible vars struct mdbVar *mdbVar; for (mdbVar=mdbObj->vars;mdbVar!=NULL;mdbVar=mdbVar->next) { - if ((sameString(mdbVar->var,"fileName") || sameString(mdbVar->var,"fileIndex") ) - && trackDbSettingClosestToHome(tdb,"wgEncode") != NULL) + if ((sameString(mdbVar->var,MDB_VAR_FILENAME) || sameString(mdbVar->var,MDB_VAR_FILEINDEX) ) + && trackDbSettingClosestToHome(tdb,MDB_VAL_ENCODE_PROJECT) != NULL) { dyStringPrintf(dyTable,"<tr valign='bottom'><td align='right' nowrap><i>%s:</i></td><td nowrap>",mdbVar->var); dyStringAppend(dyTable,htmlStringForDownloadsLink(db, tdb, mdbVar->val, TRUE, trackHash)); dyStringAppend(dyTable,"</td></tr>"); } else { - // If antibody and metadata contains input={sameValue} then just print input - if(sameString(mdbVar->var,"antibody") && mdbObjContains(mdbObj,"input",mdbVar->val)) - continue; - - if (cvTermTypes && differentString(mdbVar->var,"tableName")) // Don't bother with tableName + if (cvTermTypes && differentString(mdbVar->var,MDB_VAR_TABLENAME)) // Don't bother with tableName { struct hash *cvTerm = hashFindVal(cvTermTypes,mdbVar->var); if (cvTerm != NULL) { - if(SETTING_NOT_ON(hashFindVal(cvTerm,"hidden"))) // NULL is not on + if(SETTING_NOT_ON(hashFindVal(cvTerm,CV_TOT_HIDDEN))) // NULL is not on { - char *label=hashFindVal(cvTerm,"label"); + char *label=hashFindVal(cvTerm,CV_LABEL); if (label == NULL) label = mdbVar->var; - char *linkOfType = controlledVocabLink(NULL,"type",mdbVar->var,label,label,NULL); - char *cvDefined=hashFindVal(cvTerm,"cvDefined"); + char *linkOfType = controlledVocabLink(NULL,CV_TYPE,mdbVar->var,label,label,NULL); + char *cvDefined=hashFindVal(cvTerm,CV_TOT_CV_DEFINED); if (cvDefined != NULL && !SETTING_IS_OFF(cvDefined)) // assume setting is ON { - char *linkOfTerm = controlledVocabLink(NULL,"term",mdbVar->val,mdbVar->val,mdbVar->val,NULL); + char *linkOfTerm = controlledVocabLink(NULL,CV_TERM,mdbVar->val,mdbVar->val,mdbVar->val,NULL); dyStringPrintf(dyTable,"<tr valign='bottom'><td align='right' nowrap><i>%s:</i></td><td nowrap>%s</td></tr>",linkOfType,linkOfTerm); freeMem(linkOfTerm); } else dyStringPrintf(dyTable,"<tr valign='bottom'><td align='right' nowrap><i>%s:</i></td><td nowrap>%s</td></tr>",linkOfType,mdbVar->val); //{ // NOTE: Could just have a tool tip for these. //char *descr=cgiEncode(hashMustFindVal(cvTerm,"description")); //label = cgiEncode(label); //dyStringPrintf(dyTable,"<tr valign='bottom'><td align='right'><i title='%s'>%s:</i></td><td nowrap>%s</td></tr>",descr,label,mdbVar->val); //freeMem(descr); //freeMem(label); //} freeMem(linkOfType); continue; } @@ -4809,31 +4804,31 @@ #ifdef ALL_SCORE_FILTERS_LOGIC static int numericFiltersShowAll(struct cart *cart, struct trackDb *tdb, boolean *opened, boolean boxed, boolean compositeLevel,char *name, char *title) // Shows all *Filter style filters. Note that these are in random order and have no graceful title { int count = 0; struct slName *filterSettings = trackDbSettingsWildMatch(tdb, "*Filter"); if (filterSettings) { puts("<BR>"); struct slName *filter = NULL; struct slPair *extras = NULL; char *extraFields = trackDbSetting(tdb, "extraFields"); // TODo: seems like there should be a cleaner way if (extraFields != NULL) - extras = slPairFromString(extraFields); + extras = slPairListFromString(extraFields,TRUE); // Quoted strings may be okay while ((filter = slPopHead(&filterSettings)) != NULL) { if (differentString(filter->name,"noScoreFilter") && differentString(filter->name,"scoreFilter")) // TODO: scoreFilter could be included { char *field = cloneString(filter->name); int ix = strlen(field) - strlen("Filter"); assert(ix > 0); field[ix] = '\0'; // Could lookup extraFields // TODO: Should we be using extra fields? Could this be sorted by the order in extraFields? if (extras != NULL) { char *foundLabel = slPairFindVal(extras, field); if (foundLabel != NULL) { // Found label so replace field