8dc2f2a3bfe8d47e02a94ca4d9f62063df86b15c braney Thu Oct 5 14:56:25 2017 -0700 ongoing work on hgCollection. Add the ability to add tracks in hgTracks to a collection. Turn "overlay method" back on for custom collections. Fix panning bug in hgTracks with custom collections diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index 273466b..25a966c 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -2530,30 +2530,31 @@ { setTimeout( function() { rightClick.hitFinish(menuItemClicked, menuObject, cmd, args); }, 1); }, hitFinish: function (menuItemClicked, menuObject, cmd, args) { // dispatcher for context menu hits var id = rightClick.selectedMenuItem.id; var url = null; // TODO: Break this giant routine with shared vars into some sub-functions var href = null; var rec = null; var row = null; var rows = null; var selectUpdated = null; + function mySuccess() {} if (menuObject.shown) { // warn("Spinning: menu is still shown"); setTimeout(function() { rightClick.hitFinish(menuItemClicked, menuObject, cmd); }, 10); return; } if (cmd === 'selectWholeGene' || cmd === 'getDna' || cmd === 'highlightItem') { // bring whole gene into view or redirect to DNA screen. href = rightClick.selectedMenuItem.href; var chrom, chromStart, chromEnd; // Many links leave out the chrom (b/c it's in the server side cart as "c") // var chrom = hgTracks.chromName; // This is no longer acceptable // with multi-window capability drawing multiple positions on multiple chroms. var a = /hgg_chrom=(\w+)&/.exec(href); if (a) { if (a && a[1]) @@ -2690,32 +2691,65 @@ url = "hgTrackUi?hgsid=" + getHgsid() + "&g="; rec = hgTracks.trackDb[id]; if (tdbHasParent(rec) && tdbIsLeaf(rec)) url += rec.parentTrack; 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 === 'sortExp') || (cmd === 'sortSim')) { + } 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; + var collectionName; + for(ii=0; ii < hgTracks.collections.length; ii++) { + if ( hgTracks.collections[ii].shortLabel === shortLabel) { + collectionName = hgTracks.collections[ii].track; + break; + } + } + + $.ajax({ + type: "PUT", + async: false, + url: "../cgi-bin/hgCollection", + data: "cmd=addTrack&track=" + id + "&collection=" + collectionName + "&hgsid=" + getHgsid(), + trueSuccess: mySuccess, + success: catchErrorOrDispatch, + error: errorHandler, + }); + imageV2.fullReload(); + } else if ((cmd === 'sortExp') || (cmd === 'sortSim')) { url = "hgTracks?hgsid=" + getHgsid() + "&" + cmd + "="; rec = hgTracks.trackDb[id]; if (tdbHasParent(rec) && tdbIsLeaf(rec)) url += rec.parentTrack; else { // The button already has the ref var link2 = normed($( 'td#td_btn_'+ rightClick.selectedMenuItem.id ).children('a')); if (link2) url = $(link2).attr('href'); else url += rightClick.selectedMenuItem.id; } location.assign(url); } else if (cmd === 'viewImg') { @@ -3219,30 +3253,55 @@ var text = (currentlySeen ? " Zoom" : " Jump") + " to highlight"; o[rightClick.makeImgTag("highlightZoom.png") + text] = { onclick: rightClick.makeHitCallback('jumpToHighlight') }; if ( currentlySeen ) { // Remove only when seen o[rightClick.makeImgTag("highlightRemove.png") + " Remove highlight"] = { onclick: rightClick.makeHitCallback('removeHighlight') }; } menu.push(o); } } + if (rec.isCustomComposite) + { + // add delete from composite + } + else if (!rec.hasChildren && rec.type.startsWith("bigWig")) { + o = {}; + o[" Make a New Collection with \"" + rec.shortLabel + "\""] = { + onclick: rightClick.makeHitCallback("newCollection") + }; + menu.push(o); + + if (hgTracks.collections) { + var ii; + for(ii=0; ii < hgTracks.collections.length; ii++) { + o = {}; + o[" Add to \"" + hgTracks.collections[ii].shortLabel + "\""] = { + onclick: rightClick.makeHitCallback("addCollection") + }; + menu.push(o); + } + } + + menu.push($.contextMenu.separator); + } + // add sort options if this is a custom composite if (rec.isCustomComposite) { o = {}; o[" Sort by Expression "] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, "sortExp"); return true; } }; menu.push(o); o = {}; o[" Sort by Similarity "] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, "sortSim");