feb380e4c526092d9793e1d70f8a484cca2ae338 galt Tue Oct 20 01:18:28 2020 -0700 Fix speed of javascript in View, Facets, and Subtracks for hgTrackUi. fixes #26381 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index f65adcb..53ed2fc 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -4189,48 +4189,30 @@ } void highlightBySetCfgUi(struct cart *cart, struct trackDb *tdb, filterBy_t *filterBySet, boolean onOneLine, char *prefix) /* Does the highlight UI for a list of filterBy structure */ { filterBySetCfgUiGuts(cart, tdb, filterBySet, onOneLine, "Highlight", "hbc", "None", prefix); } #define COLOR_BG_DEFAULT_IX 0 #define COLOR_BG_ALTDEFAULT_IX 1 #define DIVIDING_LINE "<TR valign=\"CENTER\" line-height=\"1\" BGCOLOR=\"%s\"><TH colspan=\"5\" " \ "align=\"CENTER\"><hr noshade color=\"%s\" width=\"100%%\"></TD></TR>\n" #define DIVIDER_PRINT(color) printf(DIVIDING_LINE,COLOR_BG_DEFAULT,(color)) -static char *checkBoxIdMakeForTrack(struct trackDb *tdb,members_t** dims,int dimMax, - membership_t *membership) -// Creates an 'id' string for subtrack checkbox in style that matrix understand: -// "cb_dimX_dimY_view_cb" -{ -int len = strlen(tdb->track) + 10; -char *id = needMem(len); -safef(id,len,"%s_sel",tdb->track); -return id; -} - -static void checkBoxIdFree(char**id) -// Frees 'id' string -{ -if (id && *id) - freez(id); -} - static boolean divisionIfNeeded(char **lastDivide,dividers_t *dividers,membership_t *membership) // Keeps track of location within subtracks in order to provide requested division lines { boolean division = FALSE; if (dividers) { if (lastDivide != NULL) { int ix; for (ix=0;ix<dividers->count;ix++) { int sIx = stringArrayIx(dividers->subgroups[ix],membership->subgroups, membership->count); if ((lastDivide[ix] == (void*)NULL && sIx >= 0) || (lastDivide[ix] != (void*)NULL && sIx < 0) @@ -4856,30 +4838,31 @@ sqlFreeResult(&sr); hFreeConn(&conn); } return tableHash; } static void printSubtrackTableBody(struct trackDb *parentTdb, struct slRef *subtrackRefList, struct subtrackConfigSettings *settings, struct cart *cart) /* Print list of subtracks */ { sortOrder_t *sortOrder = settings->sortOrder; boolean useDragAndDrop = settings->useDragAndDrop; boolean restrictions = settings->restrictions; struct dyString *dyHtml = newDyString(SMALLBUF); char buffer[SMALLBUF]; +char id[SMALLBUF]; char *db = cartString(cart, "db"); // The subtracks need to be sorted by priority but only sortable and dragable will have // non-default (cart) priorities to sort on if (sortOrder != NULL || useDragAndDrop) { // preserves user's prev sort/drags, ignore returned value about where // priorities come from (void) tdbRefSortPrioritiesFromCart(cart, &subtrackRefList); printf("<TBODY class='%saltColors'>\n", (sortOrder != NULL ? "sortable " : "") ); } else { slSort(&subtrackRefList, trackDbRefCmp); // straight from trackDb.ra puts("<TBODY>"); @@ -4939,33 +4922,31 @@ cType = cfgNone; } if (sortOrder == NULL && !useDragAndDrop) { char **lastDivide = NULL; dividers_t *dividers = dividersSettingGet(parentTdb); if (dividers) lastDivide = needMem(sizeof(char*)*dividers->count); if (membership && divisionIfNeeded(lastDivide,dividers,membership) ) colorIx = (colorIx == COLOR_BG_DEFAULT_IX ? COLOR_BG_ALTDEFAULT_IX : COLOR_BG_DEFAULT_IX); dividersFree(÷rs); } - // Start the TR which must have an id that is directly related to the checkBox id - char *id = checkBoxIdMakeForTrack(subtrack,membersForAll->members,membersForAll->dimMax, - membership); // view is known tag + safef(id, sizeof(id), "%s_sel", subtrack->track); printf("<TR valign='top' class='%s%s'", colors[colorIx],(useDragAndDrop?" trDraggable":"")); printf(" id=tr_%s%s>\n",id,(!visibleCB && !settings->displayAll?" style='display:none'":"")); // Now the TD that holds the checkbox printf("<TD%s%s>", (enabledCB?"":" title='view is hidden'"), (useDragAndDrop?" class='dragHandle' title='Drag to reorder'":"")); // A hidden field to keep track of subtrack order if it could change if (sortOrder != NULL || useDragAndDrop) { safef(buffer, sizeof(buffer), "%s.priority", subtrack->track); float priority = (float)cartUsualDouble(cart, buffer, subtrack->priority); printf("<INPUT TYPE=HIDDEN NAME='%s' class='trPos' VALUE=\"%.0f\">", @@ -5161,31 +5142,30 @@ if (restrictions) { char *dateDisplay = encodeRestrictionDate(db,subtrack,FALSE); // includes dates in the past if (dateDisplay) { if (dateIsOld(dateDisplay, MDB_ENCODE_DATE_FORMAT)) printf("</TD>\n<TD align='center' nowrap style='color: #BBBBBB;'> %s ", dateDisplay); else printf("</TD>\n<TD align='center'> %s ", dateDisplay); } } // End of row and free ourselves of this subtrack puts("</TD></TR>\n"); - checkBoxIdFree(&id); boolean showCfg = trackDbSettingOn(subtrack, "showCfg"); if (showCfg) jsInlineF(" subCfg.cfgToggle(document.getElementById(\"%s_toggle\"),\"%s\");", subtrack->track, subtrack->track); } // End of the table puts("</TBODY>"); dyStringFree(&dyHtml) membersForAllSubGroupsFree(parentTdb,&membersForAll); } static boolean membersHaveMatrix(membersForAll_t *membersForAll) /* Check for matrix */