48cd1865d252867ebbd3852d76bed271d0028d29
max
  Tue Jun 30 05:33:14 2026 -0700
hgBlat: move showAliPlaces autoBigPsl inline JS into src/hg/js/hgBlat.js

The "Create a stable custom track" (autoBigPsl) results page emitted ~140 lines
of JavaScript as C string literals via jsInlineF/jsInline. Move that code into a
real, jshint-clean hgBlat.js and have hgBlat.c emit only a small hgBlatData config
object (url, trackName, trackDescription, and the custom-track cart var names) plus
a jsIncludeFile("hgBlat.js"). Behavior is unchanged. The track name/description are
still javaScriptLiteralEncode'd before interpolation.

diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c
index bbed0916c9e..938fbea957b 100644
--- src/hg/hgBlat/hgBlat.c
+++ src/hg/hgBlat/hgBlat.c
@@ -579,33 +579,48 @@
         struct dyString *url = dyStringNew(256);
         dyStringPrintf(url, "http%s://%s", sameOk(getenv("HTTPS"), "on") ? "s" : "", getenv("HTTP_HOST"));
         dyStringPrintf(url, "%s",    hgcUrl+2);
         dyStringPrintf(url, "?o=%d", psl->tStart);
         dyStringPrintf(url, "&t=%d", psl->tEnd);
         dyStringPrintf(url, "&g=%s", "buildBigPsl");
         dyStringPrintf(url, "&i=%s", cgiEncode(item));
         dyStringPrintf(url, "&c=%s", cgiEncode(psl->tName));
         dyStringPrintf(url, "&l=%d", psl->tStart);
         dyStringPrintf(url, "&r=%d", psl->tEnd);
         dyStringPrintf(url, "&%s=%s",  cartSessionVarName(), cartSessionId(cart));
         dyStringPrintf(url, "&Submit=%s", cgiEncode("Create a stable custom track with these results"));
         if (pslIsProtein(psl))
             dyStringPrintf(url, "&isProt=on");
 
+        /* Pass this request's parameters to hgBlat.js, which builds (and lets the
+           user rename or delete) a stable bigPsl custom track from the blat result. */
+        char *trackNameJs = javaScriptLiteralEncode(trackName);
+        char *trackDescriptionJs = javaScriptLiteralEncode(trackDescription);
+        jsIncludeFile("hgBlat.js", NULL);
         jsInlineF(
 	    "var luckyLocation = '';\n"
-        );
+	    "var hgBlatData = {\n"
+	    "    url: '%s',\n"
+	    "    trackName: '%s',\n"
+	    "    trackDescription: '%s',\n"
+	    "    ctTableVar: '%s',\n"
+	    "    ctRemoveVar: '%s'\n"
+	    "    };\n",
+	    url->string, trackNameJs, trackDescriptionJs,
+	    CT_SELECTED_TABLE_VAR, CT_DO_REMOVE_VAR);
+        freeMem(trackNameJs);
+        freeMem(trackDescriptionJs);
 	if(feelingLucky)
 	    {
 	    /* If we found something jump browser to there. */
 	    if(slCount(pslList) > 0)
 	    printLuckyRedirect(browserUrl, pslList, database, pslName, faName, uiState, unhideTrack);
             }
 
 	//  RENAME BLAT CT FORM
 	// new re-submit code with new trackname and decription
         if (!feelingLucky)
 	    {
 	    printf("<div id=renameFormItem style='display: none'>\n");
 	    printf("<FORM ACTION=>\n");
 	    printf("<INPUT TYPE=SUBMIT NAME=Submit id='showRenameForm' VALUE=\"Rename Custom Track\">\n");
 	    printf("</FORM>\n");
@@ -635,121 +650,30 @@
 	    }
 
         if (!feelingLucky)
 	    {
 	    // REMOVE CT BUTTON FORM.
 	    printf("<div id=deleteCtForm style='display: none'>\n");
 	    printf("<FORM ACTION=\"%s?hgsid=%s&db=%s\" NAME=\"MAIN_FORM\" METHOD=%s>\n\n",
 		hgTracksName(), cartSessionId(cart), database, cartUsualString(cart, "formMethod", "POST"));
 	    cartSaveSession(cart);
 	    cgiMakeButton(CT_DO_REMOVE_VAR, "Delete Custom Track");
 	    cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, "FAKETRACKNAME");
 	    printf("</FORM>\n");
 	    printf("</div>\n");
 	    }
 
-        char *trackNameJs = javaScriptLiteralEncode(trackName);
-        char *trackDescriptionJs = javaScriptLiteralEncode(trackDescription);
-        jsInlineF(
-
-	    "var ct_blat = '';\n"
-	    "\n"
-	    "function buildBigPslCtSuccess (content, status)\n"
-	    "{ // Finishes the successful creation of blat ct bigPsl.  Called by ajax return.\n"
-	    "  // saves the ct name so it can be used later for rename or delete.\n"
-	    "\n"
-	    "var matchWord = '&table=';\n"
-	    "var ct_blatPos = content.indexOf(matchWord) + matchWord.length;\n"
-	    "\n"
-	    "if (ct_blatPos >= 0)\n"
-	    "    {\n"
-	    "    var ct_blatPosEnd = content.indexOf('\"', ct_blatPos);\n"
-	    "    ct_blat = content.slice(ct_blatPos, ct_blatPosEnd);\n"
-	    "    if (luckyLocation == '')\n"
-	    "        {\n"
-	    "        $('input[name=\""CT_SELECTED_TABLE_VAR"\"]')[0].value = ct_blat;\n"
-	    "        $('input[name=\""CT_SELECTED_TABLE_VAR"\"]')[1].value = ct_blat;\n"
-	    "        }\n"
-	    "    }\n"
-	    "}\n"
-	    "\n"
-	    "function buildBigPslCt (url, trackName, trackDescription)\n"
-	    "{ // call hgc to buildBigPsl from blat result.\n"
-	    "\n"
-	    "var cgiVars = 'trackName='+encodeURIComponent(trackName)+'&trackDescription='+encodeURIComponent(trackDescription);\n"
-	    "if (ct_blat !== '')\n"
-	    "    {\n"  	
-	    "    cgiVars += '&"CT_DO_REMOVE_VAR"='+encodeURIComponent('Remove Custom Track');\n"
-	    "    cgiVars += '&"CT_SELECTED_TABLE_VAR"='+encodeURIComponent(ct_blat);\n"
-	    "    }\n"  	
-	    "\n"
-	    "$.ajax({\n"
-	    "    type: 'GET',\n"
-	    "    url: url,\n"
-	    "    data: cgiVars,\n"
-	    "    dataType: 'html',\n"
-	    "    trueSuccess: buildBigPslCtSuccess,\n"
-	    "    success: catchErrorOrDispatch,\n"
-	    "    error: errorHandler,\n"
-	    "    cache: false,\n"
-	    "    async: false\n"
-	    "    });\n"
-	    "}\n"
-	    "\n"
-	    "var url='%s';\n"
-	    "var trackName='%s';\n"
-	    "var trackDescription='%s';\n"
-            "$(document).ready(function() {\n"
-	    "\n"
-	    "buildBigPslCt(url, trackName, trackDescription);\n"
-	    "if (luckyLocation !== '')\n"
-	    "    {\n"
-            "    location.replace(luckyLocation);\n"
-	    "    }\n"
-	    "else\n"
-	    "    {\n"
-	    "    $('#renameFormItem')[0].style.display = 'block';\n"   
-	    "    $('#deleteCtForm')[0].style.display = 'block';\n"   
-	    "    }\n"
-            "});\n", url->string, trackNameJs, trackDescriptionJs);
-        freeMem(trackNameJs);
-        freeMem(trackDescriptionJs);
-
-
-            // RENAME CT JS CODE
-	    if (!feelingLucky)
-		jsInline("$('#showRenameForm').click(function(){\n"
-		    "  $('#renameForm')[0].style.display = 'block';\n"
-		    "  $('#renameFormItem')[0].style.display = 'none';\n"
-		    "  $('#showRenameForm')[0].style.display = 'none';\n"
-		    "  $('input[name=\"trackName\"]')[0].value = trackName;\n"
-		    "  $('input[name=\"trackDescription\"]')[0].value = trackDescription;\n"
-		    "return false;\n"
-		    "});\n");
-
-            // RENAME CT JS CODE
-	    if (!feelingLucky)
-		jsInline("$('#submitTrackNameDescr').click(function(){\n"
-		    "  $('#renameForm')[0].style.display = 'none';\n"
-		    "  $('#renameFormItem')[0].style.display = 'block';\n"
-		    "  $('#showRenameForm')[0].style.display = 'block';\n"
-		    "  trackName = $('input[name=\"trackName\"]')[0].value;\n"
-		    "  trackDescription = $('input[name=\"trackDescription\"]')[0].value;\n"
-		    "buildBigPslCt(url, trackName, trackDescription);\n"
-		    "return false;\n"
-		    "});\n");
-
         dyStringFree(&url);
 
        
         }
     else if (useBigPsl)
         {
         char *trackName = NULL;
         char *trackDescription = NULL;
         getCustomName(database, cart, pslList, &trackName, &trackDescription);
         psl = pslList;
         printf( "<DIV STYLE=\"display:block;\"><FORM ACTION=\"%s\"  METHOD=\"%s\" NAME=\"customTrackForm\">\n", hgcUrl,cartUsualString(cart, "formMethod", "POST"));
         printf("<INPUT TYPE=\"hidden\" name=\"o\" value=\"%d\" />\n",psl->tStart);
         printf("<INPUT TYPE=\"hidden\" name=\"t\" value=\"%d\" />\n",psl->tEnd);
         printf("<INPUT TYPE=\"hidden\" name=\"g\" value=\"%s\" />\n","buildBigPsl");
         printf("<INPUT TYPE=\"hidden\" name=\"i\" value=\"%s %s %s\" />\n",pslName,faName,psl->qName);