da557cba79eca09b909b3921c80e192147df2d60
max
  Tue Aug 18 21:27:43 2015 -0700
fixing mouse overs in extTools, refs #15113

diff --git src/hg/hgTracks/menu.c src/hg/hgTracks/menu.c
index 281f99a..aa3d5a4 100644
--- src/hg/hgTracks/menu.c
+++ src/hg/hgTracks/menu.c
@@ -34,35 +34,36 @@
 
 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, 
-    boolean external, boolean inactive)
+    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 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"))
@@ -156,32 +157,35 @@
 int i = 0;
 struct hotLink *link = NULL;
 for(i = 0, link = links; link != NULL; i++, link = link->next)
     {
     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' title='%s' id='%s'%s>%s</a></li>\n", link->url, 
-        link->id, link->mouseOver, link->external ? " TARGET='_blank'" : "", encodedName);
+    dyStringPrintf(menuHtml, "><a href='%s' ", link->url);
+    if (link->mouseOver)
+        dyStringPrintf(menuHtml, "title='%s' ", link->mouseOver); 
+    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];
@@ -206,31 +210,31 @@
 
     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, et->longLabel, TRUE, inactive);
+    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));