6d78a8e2d7230272d15508db74169ad20cd76f3f braney Thu Apr 16 12:06:50 2026 -0700 Restrict color override to supported track types; add palette icon; deduplicate type check, refs #20460 Note: palette.png must be installed to htdocs/images/ (new file). Co-Authored-By: Claude Opus 4.6 (1M context) diff --git src/hg/lib/hui.c src/hg/lib/hui.c index de614c44f8f..c3554c93cc6 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -6031,35 +6031,53 @@ void filterNameOption(struct cart *cart, char *name, struct trackDb *tdb) /* filter by feature names text input box */ { printf("
Show only transcripts with these accessions: "); char varName[1024]; safef(varName, sizeof(varName), "%s.nameFilter", name); char *onlyTransStr = cartUsualString(cart, varName, ""); cgiMakeTextVar(varName, onlyTransStr, 60); printInfoIcon("Enter the primary accession of the track, so RefSeq IDs for the RefSeq track, Gencode IDs for the Gencode track, etc. Separate multiple accessions with commas."); puts("
\n\n"); } +boolean tdbSupportsColorOverride(struct trackDb *tdb) +/* Return TRUE if this track type supports the color override feature. */ +{ +if (!cfgOptionBooleanDefault("showColorPicker", FALSE)) + return FALSE; +char *type = tdb->type; +char *track = tdb->track; +// Blacklist tracks that use custom rendering incompatible with color override +if (startsWith("gtexGene", track) || startsWith("gtexEqtlCluster", track) + || startsWith("gtexEqtlTissue", track)) + return FALSE; +return !tdbIsComposite(tdb) + && (startsWithWord("bed", type) || startsWithWord("bigBed", type) + || startsWithWord("genePred", type) || startsWithWord("bigGenePred", type) + || startsWithWord("wig", type) || startsWithWord("bigWig", type) + || startsWithWord("rmsk", type) || startsWithWord("interact", type) + || startsWithWord("bigInteract", type) || startsWithWord("bigLolly", type) + || startsWithWord("vcfTabix", type) || startsWithWord("vcf", type)); +} + void colorTrackOption(struct cart *cart, char *name, struct trackDb *tdb) /* color picker for overriding track color */ { -if (!cfgOptionBooleanDefault("showColorPicker", FALSE)) - return; char varName[1024]; safef(varName, sizeof(varName), "%s.colorOverride", name); char defaultColor[16]; safef(defaultColor, sizeof(defaultColor), "#%02x%02x%02x", tdb->colorR, tdb->colorG, tdb->colorB); char *rawCartValue = cartOptionalString(cart, varName); boolean hasOverride = (rawCartValue != NULL && rawCartValue[0] != '\0'); char *colorValue = hasOverride ? rawCartValue : defaultColor; char checkVar[1024]; safef(checkVar, sizeof(checkVar), "%s.colorOverrideOn", name); boolean isOn = cartUsualBoolean(cart, checkVar, hasOverride);