5ee63c17bf3324e22fba3ab16c2bb21415b102d7
max
  Fri Jun 14 07:00:44 2024 -0700
increasing buffer for connected hubs, refs #33973

diff --git src/hg/lib/web.c src/hg/lib/web.c
index 438da80..569e44f 100644
--- src/hg/lib/web.c
+++ src/hg/lib/web.c
@@ -684,31 +684,31 @@
 
 static void printSomeGenomeListHtmlNamedMaybeCheck(char *customOrgCgiName,
 	 char *db, struct dbDb *dbList, char *event, char *javascript, boolean doCheck)
 /* Prints to stdout the HTML to render a dropdown list
  * containing a list of the possible genomes to choose from.
  * param db - a database whose genome will be the default genome.
  *                       If NULL, no default selection.
  * param onChangeText - Optional (can be NULL) text to pass in
  *                              any onChange javascript. */
 {
 char *orgList[1024];
 int numGenomes = 0;
 struct dbDb *cur = NULL;
 struct hash *hash = hashNew(10); // 2^^10 entries = 1024
 char *selGenome = hGenome(db);
-char *values [1024];
+char *values [4096];
 char *cgiName;
 
 for (cur = dbList; cur != NULL; cur = cur->next)
     {
     if (!hashFindVal(hash, cur->genome) &&
 	(!doCheck || hDbExists(cur->name)))
         {
         hashAdd(hash, cur->genome, cur);
         orgList[numGenomes] = trackHubSkipHubName(cur->genome);
         values[numGenomes] = cur->genome;
         numGenomes++;
 	if (numGenomes >= ArraySize(orgList))
 	    internalErr();
         }
     }
@@ -1456,57 +1456,72 @@
 for(offset = 0; offset < len && !regexec(&re, oldString + offset, ArraySize(match), match, 0); 
     offset += match[0].rm_eo)
     {
     dyStringAppendN(dy, oldString + offset, match[0].rm_eo);
     if(match[1].rm_so == match[1].rm_eo)
 	dyStringAppend(dy, "?");
     dyStringAppend(dy, uiVars);
     if(match[1].rm_so != match[1].rm_eo)
 	dyStringAppend(dy, "&amp;");
     }
 if(offset < len)
     dyStringAppend(dy, oldString + offset);
 return dyStringCannibalize(&dy);
 }
 
+void webIncludeLocalJs()
+/* some mirrors want special JS on their site */
+{
+char *addJs = cfgOption("addJs");
+if (addJs)
+    {
+    struct slName *jsList = slNameListFromString(addJs, ',');
+    for(; jsList; jsList = jsList->next)
+        jsIncludeFile(jsList->name, NULL);
+    slNameFreeList(&jsList);
+    }
+}
+
 char *menuBar(struct cart *cart, char *db)
 // Return HTML for the menu bar (read from a configuration file);
 // we fixup internal CGI's to add hgsid's and include the appropriate js and css files.
 //
 // Note this function is also called by hgTracks which extends the menu bar
 //  with a View menu defined in hgTracks/menu.c
 {
 char *docRoot = hDocumentRoot();
 char *menuStr, buf[4096], uiVars[128];
 FILE *fd;
 char *navBarFile = "inc/globalNavBar.inc";
 struct stat statBuf;
 char *scriptName = cgiScriptName();
 if (cart)
     safef(uiVars, sizeof(uiVars), "%s=%s", cartSessionVarName(), cartSessionId(cart));
 else
     uiVars[0] = 0;
 
 if(docRoot == NULL)
     // tolerate missing docRoot (i.e. don't bother with menu when running from command line)
     return NULL;
 
 jsIncludeFile("jquery.js", NULL);
 jsIncludeFile("jquery.plugins.js", NULL);
 jsIncludeFile("utils.js", NULL);
 webIncludeResourceFile("nice_menu.css");
 
+webIncludeLocalJs();
+
 // Read in menu bar html
 safef(buf, sizeof(buf), "%s/%s", docRoot, navBarFile);
 fd = mustOpen(buf, "r");
 fstat(fileno(fd), &statBuf);
 int len = statBuf.st_size;
 menuStr = needMem(len + 1);
 mustRead(fd, menuStr, statBuf.st_size);
 menuStr[len] = 0;
 carefulClose(&fd);
 
 if (cart)
     {
     char *newMenuStr = menuBarAddUiVars(menuStr, "/cgi-bin/hg", uiVars);
     freez(&menuStr);
     menuStr = newMenuStr;