cee097b75fe4d1b29f0debd8af938ba6bf729d53
max
  Tue Aug 11 08:18:42 2026 -0700
hgBlat: new client-rendered BLAT search form and sortable results page, refs #37893

An opt-in modern alternative to the classic hyperlink output, gated by the
blatNewForm / blatNewPage hg.conf flags. hgBlat.c emits the hit data and form
config as inline JSON (hgBlatData / hgBlatFormData) into empty containers, and
hgBlat.js builds the UI: the search form, a sortable/filterable DataTable with
identity and query-coverage bars, a docked per-hit detail panel, a FASTA query
viewer, and share-link and rename-track modals.

- hgBlat.css: all styling for both pages, loaded via webIncludeResourceFile
(not injected from JS); layout uses CSS classes rather than inline styles.
- utils.js: setupGenomeSelector, the combobox genome picker the form uses.
- hgc.c: blatOldTracks / blatKeepResults - the "Keep results" checkbox lets a
user accumulate BLAT result tracks instead of each search replacing the last.
- hgConfCatalog: register the blatNewForm / blatNewFormBanner gates.
- blatExample.fa: the example query the form loads on demand.

Markup is built in JS (escaped values via htmlEncode, everything else set through
DOM properties); no HTML strings in the C or a template engine.

diff --git src/hg/htdocs/style/makefile src/hg/htdocs/style/makefile
index ddf4b8e57dc..84cc736a001 100644
--- src/hg/htdocs/style/makefile
+++ src/hg/htdocs/style/makefile
@@ -13,31 +13,31 @@
 endif
 
 CSS_FILES=HGStyle.css assemblySearch.css autocomplete.css blueStyle.css \
     dataTables-1.10.12.min.css dataTables-1.13.6.min.css dataTables-2.2.2.min.css \
     dataTables.buttons-3.2.2.min.css dataTables.select-1.7.0.min.css \
     dataTables.select-3.0.0.min.css \
     encodeProject.css facetedComposite.css facets.css floretStyle.css gar.css \
     hgHubConnect.css hgMyData.css jquery-ui.css jquery.contextmenu.css \
     jquery.ui.autocomplete.css jquery.ui.colorPicker.css \
     jquery.treetable.css jquery.treetable.theme.default.css \
     jstree-3.3.7.min.css \
     jWest.css jWest.afterNiceMenu.css liftRequest.css mouseOver.css \
     theme-modern.css ui.dropdownchecklist.css nice_menu.css \
     encodeDataMatrix.css encodeDataSummary.css userAccounts.css \
     encode3.css encode3Ucsc.css bootstrap.min.css \
-    gbStatic.css gb.css gbAfterMenu.css hgGtexTrackSettings.css \
+    gbStatic.css gb.css gbAfterMenu.css hgGtexTrackSettings.css hgBlat.css \
     spectrum.min.css font-awesome.min.css \
     theme-classic.css theme-dark.css theme-modern.css \
     bootstrap-3-3-7.min.css shepherd.css \
     reveal-5.1.0.css reveal-white-5.1.0.css
 
 user:
 	if test -d ${DOCUMENTROOT}-${USER}; then \
 	    ${MAKE} doInstall DEST=${DOCUMENTROOT}-${USER}/style; \
 	fi
 
 alpha:
 	${GITUP}
 	${MAKE} doInstall DEST=${DOCUMENTROOT}/style
 
 beta: