e8aeb1dcada5968de429029c2496185abae6f8f1
galt
  Fri Oct 23 02:26:23 2020 -0700
Handle single-dimension matrix in hui.c, and handle missing g track tag in hui.js. refs #26398

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 2e6915c..0794478 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -8278,45 +8278,55 @@
 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"
+"matCB = $('input.matCB:first');\n"
+"if (!matCB)\n"
+"    return;\n"
+"var matClassList = $( matCB ).attr('class').split(' ');\n"
+"matClassList = aryRemove(matClassList,['matCB','changed','disabled','abc']);\n"
+"if (matClassList.length === 0 )\n"
+"    return;\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"
+"  if (matClassList.length === 1) {\n"
+"      var classes = '.' + classList[1]; // dimX or dimY \n"
+"  } else {\n"
 "      var classes = '.' + classList[1] + '.' + classList[2]; // dimX and dimY \n"
+"  }\n"
 "  if (mtxSubMap[classes] === undefined) {\n"
 "    mtxSubMap[classes] = [this];\n"
 "  } else {\n"
 "    mtxSubMap[classes].push(this);\n"
-"  }"
+"  }\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;