057c793acb74d78c0fe969db0c3fb21df00927c6
max
  Wed Sep 2 02:33:06 2015 -0700
Removing the 'send to' menu and replacing it with a javascript-based
dialog that closes itself. Also fixing a small bug with the / key on
firefox for the shortcuts. refs #15113

diff --git src/hg/hgTracks/menu.c src/hg/hgTracks/menu.c
index 426abfd..2a0c7f2 100644
--- src/hg/hgTracks/menu.c
+++ src/hg/hgTracks/menu.c
@@ -16,56 +16,65 @@
 #include "web.h"
 #include "geoMirror.h"
 #include "hgTracks.h"
 #include "trackHub.h"
 #include "extTools.h"
 #include "trackVersion.h"
 
 /* list of links to display in a menu */
 struct hotLink
     {
     struct hotLink *next;
     char *name;
     char *url;
     char *id;
     char *mouseOver;
+    char *onClick;
     boolean inactive; /* greyed out */
     boolean external;
     };
 
 static void appendLink(struct hotLink **links, char *url, char *name, char *id, boolean external)
 {
 // append to list of links for later printing and/or communication with javascript client
 struct hotLink *link;
 AllocVar(link);
 link->name = cloneString(name);
 link->url = cloneString(url);
 link->id = cloneString(id);
 link->external = external;
 link->inactive = FALSE;
 slAddTail(links, link);
 }
 
 static void appendLinkMaybeInactive(struct hotLink **links, char *url, char *name, char *id, 
     char *mouseOver, boolean external, boolean inactive)
 {
 appendLink(links, url, name, id, external);
 struct hotLink *le = slLastEl(links);
 le->inactive=inactive;
 le->mouseOver=mouseOver;
 }
 
+static void appendLinkWithOnclick(struct hotLink **links, char *url, char *name, char *id, 
+    char *mouseOver, char *onClick, boolean external, boolean inactive)
+{
+appendLinkMaybeInactive(links, url, name, id, mouseOver, external, inactive);
+struct hotLink *le = slLastEl(links);
+le->onClick=onClick;
+}
+
 static void printEnsemblAnchor(char *database, char* archive,
                                char *chrName, int start, int end, struct hotLink **links)
 /* Print anchor to Ensembl display on same window. */
 {
 char *scientificName = hScientificName(database);
 char *dir = ensOrgNameFromScientificName(scientificName);
 struct dyString *ensUrl;
 char *name;
 int localStart, localEnd;
 
 name = chrName;
 
 if (sameWord(scientificName, "Takifugu rubripes"))
     {
     /* for Fugu, must give scaffold, not chr coordinates */
@@ -160,87 +169,43 @@
     {
     char class[100];
     if(i == 0)
         safef(class, sizeof(class), "first");
     else if (i + 1 == len)
         safef(class, sizeof(class), "last");
     else
         class[0] = 0;
     dyStringAppend(menuHtml, "<li");
     char *encodedName = htmlEncode(link->name);
     if(*class)
         dyStringPrintf(menuHtml, " class='%s'", class);
     dyStringPrintf(menuHtml, "><a href='%s' ", link->url);
     if (link->mouseOver)
         dyStringPrintf(menuHtml, "title='%s' ", link->mouseOver); 
+    if (link->onClick)
+        dyStringPrintf(menuHtml, "onclick=\"%s\" ", link->onClick); 
     dyStringPrintf(menuHtml, "id='%s'%s>%s</a></li>\n", link->id, 
         link->external ? " TARGET='_blank'" : "", encodedName);
     freez(&encodedName);
 
     freez(&link->name);
     freez(&link->url);
     freez(&link->id);
     }
 slFreeList(links);
 }
 
-static void addSendToMenuItems(struct dyString *viewMenu, char* uiVars)
-/* add the "send to" menu to the "viewMenu" dyString */
-{
-struct hotLink *viewLinks = NULL;
-
-char url[4096];
-char label[4096];
-
-struct extTool *extTools = readExtToolRa("extTools.ra");
-struct extTool *et;
-for(et = extTools; et != NULL; et = et->next)
-    {
-
-    if (et->dbs!=NULL)
-        {
-        if (!slNameInList(et->dbs, database))
-            continue;
-        }
-    if (et->notDbs!=NULL)
-        {
-        if (slNameInList(et->notDbs, database))
-            continue;
-        }
-
-
-    safef(url, sizeof(url), "hgTracks?%s&hgt.redirectTool=%s", uiVars, et->tool);
-
-    boolean inactive = FALSE;
-    if (et->maxSize!=0)
-        {
-        inactive = TRUE;
-        if (et->maxSize>1000)
-            safef(label, sizeof(label), "%s (< %d kbp)", et->shortLabel, et->maxSize/1000);
-        else
-            safef(label, sizeof(label), "%s (< %d bp)", et->shortLabel, et->maxSize);
-        }
-    else
-        safef(label, sizeof(label), "%s", et->shortLabel);
-        
-    appendLinkMaybeInactive(&viewLinks, url, label, "extTool", et->longLabel, TRUE, inactive);
-    }
-
-freeLinksAndConvert(viewLinks, viewMenu);
-
-}
-
 void printMenuBar()
 /* Put up the special menu bar for hgTracks. */
 {
 struct hotLink *links = NULL;
 struct sqlConnection *conn = NULL;
 if (!trackHubDatabase(database))
     conn = hAllocConn(database);
 char *menuStr, buf[4096], uiVars[1024];
 safef(uiVars, sizeof(uiVars), "%s=%s", cartSessionVarName(), cartSessionId(cart));
 
 menuStr = menuBar(cart, database);
 
 // Create top items in view menu
 safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.psOutput=on", uiVars);
 appendLink(&links, buf, "PDF/PS", "pdfLink", FALSE);
@@ -432,37 +397,23 @@
 appendLink(&links, buf, "Configure Browser", "configureMenuLink", FALSE);
 safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.reset=on", uiVars);
 appendLink(&links, buf, "Default Tracks", "defaultTracksMenuLink", FALSE);
 safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.defaultImgOrder=on", uiVars);
 appendLink(&links, buf, "Default Track Order", "defaultTrackOrderMenuLink", FALSE);
 appendLink(&links, "../cgi-bin/cartReset", "Reset All User Settings", "cartResetMenuLink", FALSE);
 
 // add the sendTo menu
 if (fileExists("extTools.ra"))
     {
     appendLinkWithOnclick(&links, "#", "In external tool", "Show current region on a third-party website", "extToolLink", "showExtToolDialog()", FALSE, FALSE);
     }
 
 struct dyString *viewMenu = dyStringCreate("<li class='menuparent' id='view'><span>View</span>\n<ul>\n");
 freeLinksAndConvert(links, viewMenu);
-if (fileExists("extTools.ra"))
-    {
-    dyStringAppend(viewMenu, "<li class=\"menuparent\" id=\"sendTo\"><span>In external tool</span><ul>");
-    addSendToMenuItems(viewMenu, uiVars);
-    dyStringAppend(viewMenu, "</ul>\n</li>\n");
-    }
 dyStringAppend(viewMenu, "</ul>\n</li>\n");
 
-// add the sendTo menu
-if (fileExists("extTools.ra"))
-    {
-    dyStringAppend(viewMenu, "<li class=\"menuparent\" id=\"sendTo\"><span>Send To</span><ul>");
-    addSendToMenuItems(viewMenu, uiVars);
-    dyStringAppend(viewMenu, "</ul>\n</li>\n");
-    }
-
 menuStr = replaceChars(menuStr, "<!-- OPTIONAL_VIEW_MENU -->", dyStringCannibalize(&viewMenu));
 menuStr = replaceChars(menuStr, "id=\"main-menu-whole\"", "id=\"hgTracks-main-menu-whole\"");
 menuStr = replaceChars(menuStr, "id=\"home-link\"", "id=\"hgTracks-home-link\"");
 hPuts(menuStr);
 freez(&menuStr);
 }