0d2757e19a4ea5280be67b8d3edcfd67ab4d01c7
braney
  Tue Aug 29 17:05:17 2017 -0700
more updates to hgCollection

diff --git src/hg/hgCollection/hgCollection.c src/hg/hgCollection/hgCollection.c
index 8997596..d9ae08b 100644
--- src/hg/hgCollection/hgCollection.c
+++ src/hg/hgCollection/hgCollection.c
@@ -254,46 +254,46 @@
 
 void doTable()
 // output the tree table
 {
 char *hubName = hubNameFromUrl(getHubName(database));
 struct grp *curGroup;
 for(curGroup = fullGroupList; curGroup;  curGroup = curGroup->next)
     {
     if ((hubName != NULL) && sameString(curGroup->name, hubName))
         break;
     }
 if (curGroup != NULL)
     {
     // print out all the tracks in this group
     struct trackDb *tdb;
-    jsInlineF("$('#collection').append(\"");
+    jsInlineF("$('#currentCollection').append(\"");
     for(tdb = fullTrackList; tdb;  tdb = tdb->next)
         {
         if (sameString(tdb->grp, hubName))
             {
             jsInlineF("<div id='%s' shortLabel='%s'>", trackHubSkipHubName(tdb->track), tdb->shortLabel);
             jsInlineF("<ul>");
             printGroup("collections", tdb, TRUE, TRUE);
             jsInlineF("<ul>");
             jsInlineF("</div>");
             }
         }
     jsInlineF("\");\n");
     
     // print out all the tracks in this group
-    jsInlineF("$('#collections').append(\"");
+    jsInlineF("$('#collectionList').append(\"");
     for(tdb = fullTrackList; tdb;  tdb = tdb->next)
         {
         if (sameString(tdb->grp, hubName))
             {
             jsInlineF("<li class='nodrop' id='%s'  name='%s'>%s</li>", trackHubSkipHubName(tdb->track),trackHubSkipHubName(tdb->track), tdb->shortLabel);
             //printGroup("collections", tdb, TRUE, TRUE);
             }
         }
     jsInlineF("\");\n");
     }
 //addVisibleTracks();
 jsInlineF("$('#tracks').append(\"");
 for(curGroup = fullGroupList; curGroup;  curGroup = curGroup->next)
     {
     if ((hubName != NULL) && sameString(curGroup->name, hubName))
@@ -303,31 +303,31 @@
     struct trackDb *tdb;
     jsInlineF("<ul>");
     for(tdb = fullTrackList; tdb;  tdb = tdb->next)
         {
         if ( sameString(tdb->grp, curGroup->name))
             {
             printGroup(curGroup->name, tdb, FALSE, FALSE);
             }
         }
     jsInlineF("</ul>");
     jsInlineF("</li>");
     jsInlineF("</ul>");
 
     }
 jsInlineF("\");\n");
-jsInlineF("collections.init();\n");
+jsInlineF("hgCollection.init();\n");
 }
 
 static void onclickJumpToTop(char *id)
 /* CSP-safe click handler arrows that cause scroll to top */
 {
 jsOnEventById("click", id, "$('html,body').scrollTop(0);");
 }
 
 static void printHelp()
 // print out the help page
 {
 puts(
 "<a name='INFO_SECTION'></a>\n"
 "    <div class='row gbSectionBanner'>\n"
 "        <div class='col-md-11'>Help</div>\n"
@@ -398,62 +398,63 @@
 {
 struct trackDb *tdb = hashMustFindVal(nameHash, track->name);
 
 if (tdb == NULL)
     errAbort("cannot find trackDb for %s\n", track->name);
 
 char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl");
 if (bigDataUrl == NULL)
     {
     if (startsWith("bigWig", tdb->type))
         bigDataUrl = getSqlBigWig(conn, db, tdb);
     }
 return bigDataUrl;
 }
 
-void outTdb(struct sqlConnection *conn, char *db, FILE *f, char *name,  struct trackDb *tdb, char *parent, char *visibility, unsigned int color, struct track *track, struct hash *nameHash, struct hash *collectionNameHash, int numTabs)
+void outTdb(struct sqlConnection *conn, char *db, FILE *f, char *name,  struct trackDb *tdb, char *parent, char *visibility, unsigned int color, struct track *track, struct hash *nameHash, struct hash *collectionNameHash, int numTabs, int priority)
 // out the trackDb for one track
 {
 char *dataUrl = NULL;
 char *bigDataUrl = trackDbSetting(tdb, "bigDataUrl");
 char *tabs = "\t";
 if (numTabs == 2)
     tabs = "\t\t";
 
 if (bigDataUrl == NULL)
     {
     if (startsWith("bigWig", tdb->type))
         dataUrl = getSqlBigWig(conn, db, tdb);
     }
 struct hashCookie cookie = hashFirst(tdb->settingsHash);
 struct hashEl *hel;
 fprintf(f, "%strack %s\n",tabs, makeUnique(collectionNameHash, name));
 fprintf(f, "%sshortLabel %s\n",tabs, track->shortLabel);
 fprintf(f, "%slongLabel %s\n",tabs, track->longLabel);
 while ((hel = hashNext(&cookie)) != NULL)
     {
-    if (differentString(hel->name, "parent") && differentString(hel->name, "polished")&& differentString(hel->name, "shortLabel")&& differentString(hel->name, "longLabel")&& differentString(hel->name, "color")&& differentString(hel->name, "visibility")&& differentString(hel->name, "track")&& differentString(hel->name, "trackNames")&& differentString(hel->name, "superTrack"))
+    if (differentString(hel->name, "parent") && differentString(hel->name, "polished")&& differentString(hel->name, "shortLabel")&& differentString(hel->name, "longLabel")&& differentString(hel->name, "color")&& differentString(hel->name, "visibility")&& differentString(hel->name, "track")&& differentString(hel->name, "trackNames")&& differentString(hel->name, "superTrack")&& differentString(hel->name, "priority"))
         fprintf(f, "%s%s %s\n", tabs,hel->name, (char *)hel->val);
     }
 if (bigDataUrl == NULL)
     {
     if (dataUrl != NULL)
         fprintf(f, "%sbigDataUrl %s\n", tabs,dataUrl);
     }
 fprintf(f, "%sparent %s\n",tabs,parent);
 fprintf(f, "%scolor %d,%d,%d\n", tabs,(color >> 16) & 0xff,(color >> 8) & 0xff,color & 0xff);
 fprintf(f, "%svisibility %s\n",tabs,visibility);
+fprintf(f, "%spriority %d\n",tabs,priority);
 fprintf(f, "\n");
 }
 
 static void outComposite(FILE *f, struct track *collection)
 // output a composite header for user composite
 {
 char *parent = collection->name;
 char *shortLabel = collection->shortLabel;
 char *longLabel = collection->longLabel;
 fprintf(f,"track %s\n\
 shortLabel %s\n\
 compositeTrack on\n\
 aggregate none\n\
 longLabel %s\n\
 %s on\n\
@@ -479,69 +480,71 @@
 static void outView(FILE *f, struct sqlConnection *conn, char *db, struct track *view, char *parent, struct hash *nameHash, struct hash *collectionNameHash)
 // output a view to a trackhub
 {
 fprintf(f,"\ttrack %s\n\
 \tshortLabel %s\n\
 \tlongLabel %s\n\
 \tview %s \n\
 \tparent %s \n\
 \tcolor %ld,%ld,%ld \n\
 \tvisibility %s\n", view->name, view->shortLabel, view->longLabel, view->name, parent, 0xff& (view->color >> 16),0xff& (view->color >> 8),0xff& (view->color), view->visibility);
 //fprintf(f,"\tequation +\n");
 fprintf(f, "\n");
 
 //int useColor = 0;
 struct track *track = view->trackList;
+int priority = 1;
 for(; track; track = track->next)
     {
     struct trackDb *tdb = hashMustFindVal(nameHash, skipColl(track->name));
 
-    outTdb(conn, db, f, skipColl(track->name),tdb, view->name, track->visibility, track->color, track,  nameHash, collectionNameHash, 2);
+    outTdb(conn, db, f, skipColl(track->name),tdb, view->name, track->visibility, track->color, track,  nameHash, collectionNameHash, 2, priority++);
     //useColor++;
     }
 
 }
 
 void updateHub(char *db, struct track *collectionList, struct hash *nameHash)
 // save our state to the track hub
 {
 char *hubName = getHubName(db);
 
 chmod(hubName, 0666);
 FILE *f = mustOpen(hubName, "w");
 struct hash *collectionNameHash = newHash(6);
 
 outHubHeader(f, db, hubName);
 //int useColor = 0;
 struct track *collection;
 struct sqlConnection *conn = hAllocConn(db);
 for(collection = collectionList; collection; collection = collection->next)
     {
     outComposite(f, collection);
     struct trackDb *tdb;
     struct track *track;
+    int priority = 1;
     for (track = collection->trackList; track; track = track->next)
         {
         if (track->trackList != NULL)
             {
             outView(f, conn, db, track, collection->name,  nameHash, collectionNameHash);
             }
         else
             {
             tdb = hashMustFindVal(nameHash, track->name);
 
-            outTdb(conn, db, f, track->name,tdb, collection->name, track->visibility, track->color, track,  nameHash, collectionNameHash, 1);
+            outTdb(conn, db, f, track->name,tdb, collection->name, track->visibility, track->color, track,  nameHash, collectionNameHash, 1, priority++);
             /*
             useColor++;
             if (useColor == (sizeof snakePalette2 / sizeof(int)))
                 useColor = 0;
                 */
             }
         }
     }
 fclose(f);
 hFreeConn(&conn);
 }
 
 unsigned long hexStringToLong(char *str)
 {
 /*