a1aab1e4c27cb4cf0b03793b7088be6a1d7de760
kate
  Fri Jan 9 15:22:44 2015 -0800
Suppress annoying 'Top' link at start of subtrack list when matrix not present
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index d9a1004..0fd4066 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -4425,30 +4425,38 @@
                 printf("</TD>\n<TD align='center'>&nbsp;%s&nbsp;", dateDisplay);
             }
         }
 
     // End of row and free ourselves of this subtrack
     puts("</TD></TR>\n");
     checkBoxIdFree(&id);
     }
 
 // End of the table
 puts("</TBODY>");
 dyStringFree(&dyHtml)
 membersForAllSubGroupsFree(parentTdb,&membersForAll);
 }
 
+static boolean membersHaveMatrix(membersForAll_t *membersForAll)
+/* Check for matrix */
+{
+if (membersForAll->members[dimX] == NULL && membersForAll->members[dimY] == NULL)
+    return false;
+return true;
+}
+
 static void printSubtrackTable(struct trackDb *parentTdb, struct slRef *subtrackRefList,
                                 struct subtrackConfigSettings *settings, struct cart *cart)
 /* Print table of subtracks */
 {
 // Print table tag
 printf("\n<TABLE CELLSPACING='2' CELLPADDING='0' border='0'");
 struct dyString *dyHtml = newDyString(SMALLBUF);
 if (settings->sortOrder != NULL)
     dyStringPrintf(dyHtml, "sortable");
 if (settings->useDragAndDrop)
     {
     if (dyStringLen(dyHtml) > 0)
         dyStringAppendC(dyHtml,' ');
     dyStringPrintf(dyHtml, "tableWithDragAndDrop");
     }
@@ -4513,35 +4521,39 @@
     char javascript[JBUFSIZE];
     safef(javascript, sizeof(javascript),
           "class='allOrOnly' onclick='showOrHideSelectedSubtracks(true);'");
     if (subCount > LARGE_COMPOSITE_CUTOFF)
         safef(buffer,SMALLBUF,"%s.displaySubtracks",parentTdb->track);
     else
         safecpy(buffer,SMALLBUF,"displaySubtracks");
     cgiMakeOnClickRadioButton(buffer, "selected", !displayAll,javascript);
     puts("only selected/visible &nbsp;&nbsp;");
     safef(javascript, sizeof(javascript),
           "class='allOrOnly' onclick='showOrHideSelectedSubtracks(false);'");
     cgiMakeOnClickRadioButton(buffer, "all", displayAll,javascript);
     printf("all</B>");
     if (slCount(subtrackRefList) > 5)
         printf("&nbsp;&nbsp;&nbsp;&nbsp;(<span class='subCBcount'></span>)");
+    if (membersHaveMatrix(membersForAll))
         makeTopLink(parentTdb);
     printf("</td></tr></table>");
     }
 else
+    {
+    if (membersHaveMatrix(membersForAll))
         makeTopLink(parentTdb);
+    }
 
 // Get info for subtrack list
 struct subtrackConfigSettings *subtrackConfig = NULL;
 AllocVar(subtrackConfig);
 
 // Determine whether there is a restricted until date column
 subtrackConfig->restrictions = FALSE;
 for (subtrackRef = subtrackRefList; subtrackRef != NULL; subtrackRef = subtrackRef->next)
     {
     subtrack = subtrackRef->val;
     (void)metadataForTable(db,subtrack,NULL);
     if (NULL != metadataFindValue(subtrack,"dateUnrestricted"))
         {
         subtrackConfig->restrictions = TRUE;
         break;
@@ -6739,31 +6751,31 @@
                 {
                 char *link = controlledVocabLink(words[0],(sameWord(cvSetting,"antibody") ?
                                                                                 "target" : "term"),
                                                  (char *)cvTerm,(char *)cvTerm,rootLabel,suffix);
                 return link;
                 }
             }
         }
     }
 freeMem(words[0]);
 freeMem(rootLabel);
 return cloneString(label);
 }
 
 #ifdef BUTTONS_BY_CSS
-#define BUTTON_MAT "<span class='pmButton' onclick=\"matSetMatrixCheckBoxes(%s%s%s%s)\">%c</span>"
+#define BUTTON_MAT "<span class='pmButton' onclick=\"matSeteatrixCheckBoxes(%s%s%s%s)\">%c</span>"
 #else///ifndef BUTTONS_BY_CSS
 #define PM_BUTTON_UC "<IMG height=18 width=18 onclick=\"return " \
                      "(matSetMatrixCheckBoxes(%s%s%s%s%s%s) == false);\" id='btn_%s' " \
                      "src='../images/%s'>"
 #endif///def BUTTONS_BY_CSS
 
 #define MATRIX_RIGHT_BUTTONS_AFTER 8
 #define MATRIX_BOTTOM_BUTTONS_AFTER 20
 
 static void buttonsForAll()
 {
 #ifdef BUTTONS_BY_CSS
 printf(BUTTON_MAT,"true", "", "", "", '+');
 printf(BUTTON_MAT,"false","", "", "", '-');
 #else///ifndef BUTTONS_BY_CSS