2365a5a3e7ba877904626426b1a851dc8cce2e18 tdreszer Sat Jan 14 13:20:09 2012 -0800 tagEncoding needed to be extended to the ABC dimensions default checked logic. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 58d9434..e1b9fc4 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -2205,30 +2205,43 @@ /* Sets the fourState Checked in the cart and updates cached state */ { int fourState = ( checked ? FOUR_STATE_CHECKED : FOUR_STATE_UNCHECKED ); if (!enabled) FOUR_STATE_DISABLE(fourState); char objName[SMALLBUF]; char objVal[5]; safef(objName, sizeof(objName), "%s_sel", subtrack->track); safef(objVal, sizeof(objVal), "%d", fourState); cartSetString(cart, objName, objVal); tdbExtrasFourStateSet(subtrack,fourState); } +static char *tagEncode(char *name) +// Turns out css classes cannot begin with a number. So prepend 'A' +// If this were more widely used, could move to cheapcgi.c. +{ +if (!isdigit(*name)) + return name; + +char *newName = needMem(strlen(name)+1); +*newName = 'A'; +strcpy(newName+1,name); +return newName; +} + typedef struct _dimensions { int count; char**names; char**subgroups; char* setting; } dimensions_t; boolean dimensionsExist(struct trackDb *parentTdb) /* Does this parent track contain dimensions? */ { return (trackDbSetting(parentTdb, "dimensions") != NULL); } //static boolean dimensionsSubtrackOf(struct trackDb *childTdb) ///* Does this child belong to a parent with dimensions? */ //{ @@ -2252,62 +2265,49 @@ if(cnt <= 0) { freeMem(dimensions->setting); freeMem(dimensions); return NULL; } dimensions->names = needMem(cnt*sizeof(char*)); dimensions->subgroups = needMem(cnt*sizeof(char*)); char *name,*value; for (ix = 0,dimensions->count=0; ix < cnt; ix++) { if (parseAssignment(words[ix], &name, &value)) { dimensions->names[dimensions->count] = name; - dimensions->subgroups[dimensions->count] = value; + dimensions->subgroups[dimensions->count] = tagEncode(value); dimensions->count++; } } return dimensions; } static void dimensionsFree(dimensions_t **dimensions) /* frees any previously obtained dividers setting */ { if(dimensions && *dimensions) { freeMem((*dimensions)->setting); freeMem((*dimensions)->names); freeMem((*dimensions)->subgroups); freez(dimensions); } } -static char *tagEncode(char *name) -// Turns out css classes cannot begin with a number. So prepend 'A' -// If this were more widely used, could move to cheapcgi.c. -{ -if (!isdigit(*name)) - return name; - -char *newName = needMem(strlen(name)+1); -*newName = 'A'; -strcpy(newName+1,name); -return newName; -} - #define SUBGROUP_MAX 9 enum filterCompositeType // Filter composites are drop-down checkbix-lists for selecting subtracks (eg hg19::HAIB TFBS) { fctNone=0, // do not offer filter for this dimension fctOne=1, // filter composite by one or all fctOneOnly=2, // filter composite by only one fctMulti=3, // filter composite by multiselect: all, one or many }; typedef struct _members { int count; char * groupTag; char * groupTitle; @@ -2563,36 +2563,46 @@ assert(options != NULL); } struct slName *option; for(option=options;option!=NULL;option=option->next) { mIx = membersSubGroupIx(members, option->name); if(mIx >= 0) members->selected[mIx] = TRUE; } return slNameListToString(options,','); } struct dyString *currentlyCheckedTags = NULL; // Need a string of subGroup tags which are currently checked safef(settingName,sizeof(settingName),"dimension%cchecked",letter); char *dimCheckedDefaults = trackDbSettingOrDefault(parentTdb,settingName,"All"); +char *checkedDefaults[12]; +int defaultCount = 0; +if (dimCheckedDefaults != NULL +&& differentWord(dimCheckedDefaults,"All") && differentWord(dimCheckedDefaults,"Any")) + { + defaultCount = chopCommas(dimCheckedDefaults, checkedDefaults); + int dIx = 0; + for (;dIx < defaultCount;dIx++) + checkedDefaults[dIx] = tagEncode(checkedDefaults[dIx]); // Need to encode these before compare! + } // Will leak, but this is a tiny amount for(mIx=0;mIxcount;mIx++) { safef(settingName, sizeof(settingName), "%s.mat_%s_dim%c_cb",parentTdb->track,members->tags[mIx],letter); members->selected[mIx] = TRUE; - if (differentWord(dimCheckedDefaults,"All") && differentWord(dimCheckedDefaults,"Any")) - members->selected[mIx] = (NULL!=findWordByDelimiter(members->tags[mIx],',',dimCheckedDefaults)); + if (defaultCount > 0) + members->selected[mIx] = (-1 != stringArrayIx(members->tags[mIx],checkedDefaults,defaultCount)); members->selected[mIx] = cartUsualBoolean(cart,settingName,members->selected[mIx]); if(members->selected[mIx]) { if(currentlyCheckedTags == NULL) currentlyCheckedTags = dyStringCreate(members->tags[mIx]); else dyStringPrintf(currentlyCheckedTags,",%s",members->tags[mIx]); } } if(currentlyCheckedTags) return dyStringCannibalize(¤tlyCheckedTags); return NULL; } static membersForAll_t *membersForAllSubGroupsWeedOutEmpties(struct trackDb *parentTdb, membersForAll_t *membersForAll, struct cart *cart)