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("
\n");
printf("
\n");
@@ -635,121 +650,30 @@
}
if (!feelingLucky)
{
// REMOVE CT BUTTON FORM.
printf("
\n");
printf("\n");
printf("
\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( "