ddb85ced5e8b6127a233b5cda5fcb1fbe2260578 max Wed Mar 25 04:22:06 2026 -0700 Add detailsScript trackDb mechanism for JS visualizations on bigBed details pages Changing based on feedback from Jonathan, Chris and Brian after group discussion. Refactored existing Claude-generated code, moving functions into libraries. This is the first use of ES6 modules in the kent js code. In 2026, this should be acceptable? New trackDb syntax: detailsScript.. The C code (bigBedClick.c) collects these settings, exports field values as JSON (bedDetails object), and dynamically imports hgc..js as an ES6 module. Fields used by detailsScript are shown in the HTML table with empty values, filled by JavaScript. Includes hgc.histogram.js module for drawing SVG bar chart histograms from logfmt-encoded data (space-separated key=value pairs). Applied to both the trexplorer and webstr tracks in the strVar supertrack. Also adds jsonWriteJsonElement() helper to jsonWrite.c for writing parsed jsonElement trees into a jsonWrite stream. max, refs #36652 Co-Authored-By: Claude Opus 4.6 (1M context) diff --git src/hg/hgc/hgc.h src/hg/hgc/hgc.h index 9231d4f6d24..89c4449b279 100644 --- src/hg/hgc/hgc.h +++ src/hg/hgc/hgc.h @@ -531,30 +531,35 @@ /* Show details for bigDbSnp item. */ void printAddWbr(char *text, int distance); /* a crazy hack for firefox/mozilla that is unable to break long words in tables * We need to add a tag every x characters in the text to make text breakable. */ void printIframe(struct trackDb *tdb, char *itemName); /* print an iframe with the URL specified in trackDb (iframeUrl), can have * the standard codes in it (like $$ for itemName, etc) */ char *getIdInUrl(struct trackDb *tdb, char *itemName); /* If we have an idInUrlSql tag, look up itemName in that, else just * return itemName. */ +// trackDb setting prefix for JS visualization scripts on details pages. +// Format: detailsScript.. +// Parsed in both bigBedClick.c (to build JSON + load JS) and hgc.c (to skip fields from table). +#define DETAILS_SCRIPT_PREFIX "detailsScript.*" + void printFieldLabel(char *entry); /* print the field label, the first column in the table, as a . Allow a * longer description after a |-char, as some fields are not easy to * understand. */ void printFieldLabelWithId(char *entry, char *fieldName); /* Like printFieldLabel but adds id="bfld_" to the element, * so JavaScript can find the row by field name. */ struct slPair* getExtraFields(struct trackDb *tdb, char **fields, int fieldCount); /* return the extra field names and their values as a list of slPairs */ struct slPair *getFields(struct trackDb *tdb, char **fields); /* return field names and their values as a list of slPairs. */