d3c4dd4f1df4b3919520794bfcaac0a7d0935a7f
angie
  Tue Dec 19 12:07:23 2017 -0800
Replace hgTracks' links to NCBI's obsolete Map Viewer with the new & improved Genome Data Viewer.  GDV has only the latest RefSeq assembly for all species except human; it wants GCF_... IDs, which we will have to keep updating in hdb.c.  It's possible that someday NCBI may accept our db IDs instead of GCF_.  refs #18671

diff --git src/hg/hgTracks/extTools.c src/hg/hgTracks/extTools.c
index b01cb0d..e25493e 100644
--- src/hg/hgTracks/extTools.c
+++ src/hg/hgTracks/extTools.c
@@ -223,70 +223,79 @@
     printf("Sorry, this tool accepts only a sequence with less than %d base pairs<p>\n"
       "Please zoom in some more.<p>\n", et->maxSize);
     return;
     }
 
 printf("You're being redirected from the UCSC Genome Browser to the site %s<br>\n", url);
 if (et->email)
     printf("Please contact %s for questions on this tool.<br>\n", et->email);
 
 boolean submitDone = FALSE;
 for (slp=et->params; slp!=NULL; slp=slp->next)
     {
     char* val = slp->val;
     if (sameWord(val, "$db"))
         val = db;
-    if (sameWord(val, "$position"))
+    else if (sameWord(val, "$position"))
         val = pos;
-    if (sameWord(val, "$start1"))
+    else if (sameWord(val, "$start1"))
         val = start1;
-    if (sameWord(val, "$returnUrl"))
+    else if (sameWord(val, "$returnUrl"))
         {
         // get the full URL of this hgTracks page, so external page can construct a custom track
         // and link back to us
         char* host = getenv("HTTP_HOST");
         char* reqUrl = getenv("REQUEST_URI");
         // remove everything after ? in URL
         char *e = strchr(reqUrl, '?');
         if (e) *e = 0; 
 
         char url[4000];
         // cannot find a way to find out if the request came in via http or https
         safef(url, sizeof(url), "http://%s%s", host, reqUrl);
         val = url;
         }
     // half the current window size
-    if (stringIn("$halfLen", val))
+    else if (stringIn("$halfLen", val))
         {
         char buf[64];
         safef(buf, sizeof(buf), "%d", len/2);
         val = replaceChars(val, "$halfLen", buf);
         }
-    if (sameWord(val, "$seq") || sameWord(val, "$faSeq"))
+    else if (sameWord(val, "$seq") || sameWord(val, "$faSeq"))
         {
         static struct dnaSeq *seq = NULL;
         seq = hDnaFromSeq(db, chromName, winStart, winEnd, dnaLower);
         if (sameWord(val, "$seq"))
             val = seq->dna;
         else
             {
             val = catTwoStrings(">sequence\n",seq->dna);
             freez(&seq);
             }
         }
+    else if (sameWord(val, "$ncbiGcf"))
+        {
+        char *gcf = hNcbiGcfId(db);
+        if (gcf)
+            val = gcf;
+        else
+            // Really we shouldn't be making this entire form... pass db as hail-mary
+            val = db;
+        }
     // any remaining $-expression might be one of the general ones
-    if (stringIn("$", val))
+    else if (stringIn("$", val))
         {
         val = replaceInUrl(val, "", cart, db, chromName, winStart, winEnd, NULL, TRUE);
         }
 
     // output
     if (debug)
         {
         printf("%s: ", slp->name);
         printf("<input name=\"%s\" value=\"%s\"><p>\n", slp->name, val);
         }
     else
         {
         // parameter named submit is a special case
         if (sameWord(slp->name, "submit"))
             {