cbf4bf3cac2bf99f8dbe8645a74d6a4bc61559fa jcasper Thu Jul 23 12:56:07 2026 -0700 Ensuring that multiwig children of composites can be configured via right-click in hgTracks, refs #36320 diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index 705dc22bba6..a3db619f33a 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -3621,40 +3621,51 @@ var itemToRemove = rightClick.itemFromHref(rightClick.selectedMenuItem.href); if (itemToRemove) rightClick.removeItemColor(itemToRemove.track, itemToRemove.name); } else if (cmd === 'clearItemColors') { rightClick.clearItemColors(); } else if (cmd === 'hgTrackUi_follow') { url = "hgTrackUi?hgsid=" + getHgsid() + "&g="; rec = hgTracks.trackDb[id]; if (tdbHasParent(rec) && tdbIsLeaf(rec)) url += rec.parentTrack; + else if (tdbHasParent(rec) && tdbIsContainer(rec)) + // A container (e.g. multiWig) nested in a composite configures itself, + // not its parent (whose link is on the shared row button). + url += id; else { // The button already has the ref var link = normed($( 'td#td_btn_'+ rightClick.selectedMenuItem.id ).children('a')); if (link) url = $(link).attr('href'); else url += rightClick.selectedMenuItem.id; } location.assign(url); + } else if (cmd === 'hgTrackUi_followParent') { + + // Configure the parent container (e.g. the composite) of a nested container track. + rec = hgTracks.trackDb[id]; + url = "hgTrackUi?hgsid=" + getHgsid() + "&g=" + rec.parentTrack; + location.assign(url); + } else if (cmd === 'newCollection') { $.ajax({ type: "PUT", async: false, url: "../cgi-bin/hgCollection", data: "cmd=newCollection&track=" + id + "&hgsid=" + getHgsid(), trueSuccess: mySuccess, success: catchErrorOrDispatch, error: errorHandler, }); imageV2.fullReload(); } else if (cmd === 'addCollection') { var shortLabel = $(menuItemClicked).text().substring(9).slice(0,-1); var ii; @@ -4630,30 +4641,40 @@ o[rightClick.makeImgTag("folderWrench.png")+" Configure "+ rec.parentLabel + " track set..."] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked,menuObject,"hgTrackUi_follow"); return true; } }; } } else { o[rightClick.makeImgTag("folderWrench.png")+" Configure "+rec.shortLabel + " track set..."] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, "hgTrackUi_follow"); return true; } }; + if (rec.parentTrack) { + // A container (e.g. multiWig) nested in a composite: also offer + // the parent composite's configuration. + o[rightClick.makeImgTag("folderWrench.png")+" Configure "+ + rec.parentLabel + " track set..."] = { + onclick: function(menuItemClicked, menuObject) { + rightClick.hit(menuItemClicked,menuObject,"hgTrackUi_followParent"); + return true; } + }; + } } if (jQuery.floatMgr) { o[(rightClick.selectedMenuItem.id === rightClick.floatingMenuItem ? selectedImg : blankImg) + " float"] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, "float"); return true; } }; } // add a toggle to hide/show the merged item(s) mergeTrack = rightClick.selectedMenuItem.id + ".doMergeItems"; if (rec.hasOwnProperty(mergeTrack)) { var hasMergedItems = rec[mergeTrack] === 1; titleStr = rightClick.makeImgTag("wrench.png") + " "; if (hasMergedItems) {