d806d4e2ec73a0e53f8b65443bb5a403cc54364d braney Mon Jun 29 12:11:00 2026 -0700 Enable Sort by Magnitude/Similarity on wiggle-only composites, refs #37816 The right-click "Sort by Magnitude/Similarity" menu items were previously offered only on custom composites. Extend them to any composite whose subtracks are all wiggle types (parentIsAllWiggle in utils.js). diff --git src/hg/js/utils.js src/hg/js/utils.js index 1dd4f526b3f..5668209cd37 100644 --- src/hg/js/utils.js +++ src/hg/js/utils.js @@ -483,30 +483,46 @@ // json help routines function tdbGetJsonRecord(trackName) { return hgTracks.trackDb[trackName]; } // NOTE: These must jive with tdbKindOfParent() and tdbKindOfChild() in trackDb.h function tdbIsFolder(tdb) { return (tdb.kindOfParent === 1); } function tdbIsComposite(tdb) { return (tdb.kindOfParent === 2); } function tdbIsMultiTrack(tdb) { return (tdb.kindOfParent === 3); } function tdbIsView(tdb) { return (tdb.kindOfParent === 4); } // Don't expect to use function tdbIsContainer(tdb) { return (tdb.kindOfParent === 2 || tdb.kindOfParent === 3); } function tdbIsLeaf(tdb) { return (tdb.kindOfParent === 0); } function tdbIsFolderContent(tdb) { return (tdb.kindOfChild === 1); } function tdbIsCompositeSubtrack(tdb) { return (tdb.kindOfChild === 2); } function tdbIsMultiTrackSubtrack(tdb) { return (tdb.kindOfChild === 3); } function tdbIsSubtrack(tdb) { return (tdb.kindOfChild === 2 || tdb.kindOfChild === 3); } function tdbHasParent(tdb) { return (tdb.kindOfChild !== 0 && tdb.parentTrack); } +function parentIsAllWiggle(tdb) +{ // True if every subtrack of tdb's parent composite is a wiggle type. + if (!tdb.parentTrack) + return false; + var parentName = tdb.parentTrack, found = false; + for (var name in hgTracks.trackDb) { + var t = hgTracks.trackDb[name]; + if (t.parentTrack === parentName) { + found = true; + if (/^wigMaf/.test(t.type) || !/^(wig|bigWig|bedGraph)/.test(t.type)) + return false; + } + } + return found; +} + function cartHideAnyTrack (id, cartVars, cartVals) { /* set the right cart variables to hide a track, changes cartVars and cartVals */ var rec = hgTracks.trackDb[id]; if (tdbIsSubtrack(rec)) { cartVars.push(id); cartVals.push('[]'); cartVars.push(id+"_sel"); cartVals.push(0); } else if (tdbIsFolderContent(rec)) { // supertrack children need to have _sel set to trigger superttrack reshaping cartVars.push(id); cartVals.push('hide'); cartVars.push(id+"_sel");