34b01f059a90f1ce39ee7d4dc97115bc7aa980a3 tdreszer Fri Dec 16 15:21:55 2011 -0800 Fixed bug where view starts with digit. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 1cc52e7..8bab64b 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -2276,33 +2276,33 @@ 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 *firstCharNoDigit(char *name) +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 common. +// 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 #define FILTER_COMPOSITE_ONLYONE #ifdef FILTER_COMPOSITE_ONLYONE // FIXME: do we even support anything but multi??? If not, this is a boolean @@ -2397,31 +2397,31 @@ if(count <= 1) { freeMem(members->setting); freeMem(members); return NULL; } members->groupTag = words[0]; members->groupTitle = strSwapChar(words[1],'_',' '); // Titles replace '_' with space members->tags = needMem(count*sizeof(char*)); members->titles = needMem(count*sizeof(char*)); for (ix = 2,members->count=0; ix < count; ix++) { char *name,*value; if (parseAssignment(words[ix], &name, &value)) { - members->tags[members->count] = firstCharNoDigit(name); + members->tags[members->count] = tagEncode(name); members->titles[members->count] = strSwapChar(value,'_',' '); members->count++; } } return members; } // No longer used, but it could come back! //static members_t *subgroupMembersGetByDimension(struct trackDb *parentTdb, char dimension) ///* Finds the dimension requested and return its associated // * subgroupMembership, returning the count of members or 0 */ //{ //int ix; //dimensions_t *dimensions = dimensionSettingsGet(parentTdb); //if(dimensions!=NULL) @@ -2849,31 +2849,31 @@ if(cnt <= 0) { freeMem(membership->setting); freeMem(membership); return NULL; } membership->subgroups = needMem(cnt*sizeof(char*)); membership->membership = needMem(cnt*sizeof(char*)); membership->titles = needMem(cnt*sizeof(char*)); for (ix = 0,membership->count=0; ix < cnt; ix++) { char *name,*value; if (parseAssignment(words[ix], &name, &value)) { membership->subgroups[membership->count] = name; - membership->membership[membership->count] = firstCharNoDigit(value); // tags will be used as classes by js + membership->membership[membership->count] = tagEncode(value); // tags will be used as classes by js members_t* members = subgroupMembersGet(childTdb->parent, name); membership->titles[membership->count] = NULL; // default if(members != NULL) { int ix2 = stringArrayIx(membership->membership[membership->count],members->tags,members->count); if(ix2 != -1) membership->titles[membership->count] = strSwapChar(cloneString(members->titles[ix2]),'_',' '); subgroupMembersFree(&members); } membership->count++; } } tdbExtrasMembershipSet(childTdb,membership); return membership; } @@ -6192,31 +6192,31 @@ if (!boxed && fileExists(hHelpFile("hgBamTrackHelp"))) printf("
"); cfgEndBox(boxed); } #endif//def USE_BAM struct trackDb *rFindView(struct trackDb *forest, char *view) // Return the trackDb on the list that matches the view tag. Prefers ancestors before decendents { struct trackDb *tdb; for (tdb = forest; tdb != NULL; tdb = tdb->next) { char *viewSetting = trackDbSetting(tdb, "view"); - if (sameOk(viewSetting, view)) + if (sameOk(viewSetting, view) || sameOk(tagEncode(viewSetting), view)) return tdb; } for (tdb = forest; tdb != NULL; tdb = tdb->next) { struct trackDb *viewTdb = rFindView(tdb->subtracks, view); if (viewTdb != NULL) return viewTdb; } return NULL; } static boolean compositeViewCfgExpandedByDefault(struct trackDb *parentTdb,char *view, char **retVisibility) /* returns true if the view cfg is expanded by default. Optionally allocates string of view * setting (eg 'dense') */