64d40b9204a60274a49330c6b61d146e5cdc6d87 max Wed Sep 9 05:54:34 2026 -0700 Faceted composite: a container's max display mode must clamp a pinned child, not drop it Selecting only CpG methylation on the Fiber-seq compendium and hitting submit drew nothing at all, with no message to say why. Two things combined. The children of a faceted composite can be pinned to one display mode with onlyVisibility, and five of the six Fiber-seq data types are pinned to full because they are signal tracks. The container's own "Maximum display mode" is a ceiling over those children, and it was set to pack. tdbVisLimitedByAncestors() then took a pinned child that sat above the ceiling and returned hide for it, so every pinned-to-full track disappeared and only the peaks, pinned to dense, came through. With every data type but peaks unchecked, that left an empty image. A ceiling should limit a child, not delete it, so use tvMin the same way the unpinned case a line below already did. A bigWig draws the same at pack as at full, minus the horizontal grid, so nothing is lost here. The page was also asking for the wrong ceiling. On a faceted composite the dropdown is a ceiling rather than a display mode, since each child carries its own, so taking the container out of hide should ask for full, the one value that clips nothing. Pack was chosen on the reasoning that it suits a mix of signal and feature tracks, which is the right instinct for a plain composite and the wrong one here. refs #36210 diff --git src/hg/js/facetedComposite.js src/hg/js/facetedComposite.js index a8a3a823434..6fa665b7b8b 100644 --- src/hg/js/facetedComposite.js +++ src/hg/js/facetedComposite.js @@ -556,35 +556,37 @@ updateSelectAllCheckbox(this.api()); }, }); function updateSelectAllCheckbox(api) { const filteredCount = api.rows({ search: "applied" }).count(); const selectedCount = api.rows({ search: "applied", selected: true }).count(); $("#select-all") .prop("checked", filteredCount > 0 && selectedCount === filteredCount) .prop("indeterminate", selectedCount > 0 && selectedCount < filteredCount); } // Find the Display Mode dropdown rendered by C code const visDropdown = document.querySelector( 'select[name="' + embeddedData.track + '"]'); - // The mode to come back to when the container needs to be shown. - // Pack rather than full: a faceted composite usually mixes signal and - // feature tracks, and pack is the mode that suits both. An explicit - // choice by the user replaces it, below. - let preferredVis = "pack"; + // The mode to come back to when the container needs to be shown. Full + // rather than pack: on a faceted composite this dropdown is a ceiling and + // not a mode, since each child carries its own display mode, so full is + // the value that clips nothing. Pack here would hide every child pinned + // by onlyVisibility to full. An explicit choice by the user replaces it, + // below. + let preferredVis = "full"; if (visDropdown && visDropdown.value !== "hide") { preferredVis = visDropdown.value; } // Anything the user does on this page that means "I want to see this" // takes the container out of hide. Without it, picking samples on a // container whose visibility is hide silently produces no image. function showTracksNow() { if (visDropdown && visDropdown.value === "hide") visDropdown.value = preferredVis; } showTracks = showTracksNow; // Track previous selection count for detecting 0<->nonzero transitions let prevSelCount = table.rows({selected: true}).count();