580bf7de78a35e5d3fbbdc8171ffcf80a795f877 galt Thu Oct 22 19:46:56 2020 -0700 Fix speed of javascript in Matrix for hgTrackUi. fixes #26398 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 53ed2fc..2e6915c 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -8269,30 +8269,58 @@ membersForAll->members[dimIx]->tags[ix],membersForAll->members[dimIx]->titles[ix]); } printf("</SELECT>"); if (membersForAll->members[dimIx]->fcType == fctOneOnly) printf(" (select only one)"); printf("</TD><TD width='20'></TD>\n"); } printf("</TR></TABLE>\n"); puts("<BR>\n"); return TRUE; } +void fastMatixToSubtrackMap() +// prints out the "common" globals json hash +// This hash is the one utils.js and therefore all CGIs know about +{ +struct dyString *dy = dyStringNew(1024); +dyStringPrintf(dy, +"var mtxSubMap = {};\n" +"$( document ).ready(function()\n" +"{\n" +"subCBs = $('input.subCB');\n" +"$( subCBs ).each( function (i) { \n" +" // class='subCB BS-Seq Mantle_Cell_Lymphoma venous_blood A007MCL CNAG CPG_methylation_cov signal' \n" +" var classList = $( this ).attr('class').split(' ');\n" +" var classes = '.' + classList[1] + '.' + classList[2]; // dimX and dimY \n" +" if (mtxSubMap[classes] === undefined) {\n" +" mtxSubMap[classes] = [this];\n" +" } else {\n" +" mtxSubMap[classes].push(this);\n" +" }" +"});\n" +"});\n" +); + + +jsInline(dy->string); +dyStringFree(&dy); +} + static boolean compositeUiByMatrix(char *db, struct cart *cart, struct trackDb *parentTdb, char *formName) // UI for composite tracks: matrix of checkboxes. { //int ix; char objName[SMALLBUF]; membersForAll_t* membersForAll = membersForAllSubGroupsGet(parentTdb,cart); if (membersForAll == NULL || membersForAll->dimensions == NULL) // Not Matrix! return FALSE; int ixX,ixY; members_t *dimensionX = membersForAll->members[dimX]; members_t *dimensionY = membersForAll->members[dimY]; @@ -8493,30 +8521,32 @@ puts("</TR>\n"); } } if (dimensionY && cntY>MATRIX_BOTTOM_BUTTONS_AFTER) matrixXheadings(db,parentTdb,membersForAll,FALSE); puts("</TD></TR></TABLE>"); // if there is a treeImage, put it beside the matrix if (treeImage != NULL) printf("</TD><TD><IMG SRC=\"%s\"></TD></TABLE>", treeImage); // If any filter additional filter composites, they can be added at the end. compositeUiByFilter(db, cart, parentTdb, formName); +fastMatixToSubtrackMap(); + return TRUE; } static boolean compositeUiAllButtons(char *db, struct cart *cart, struct trackDb *parentTdb, char *formName) // UI for composite tracks: all/none buttons only (as opposed to matrix or lots of buttons { if (trackDbCountDescendantLeaves(parentTdb) <= 1) return FALSE; if (dimensionsExist(parentTdb)) return FALSE; #define PM_BUTTON_GLOBAL "<IMG height=18 width=18 id='%s' src='../images/%s'>" #define PM_BUTTON_GLOBAL_JS "matSubCBsCheck(%s);"