@gmod/jbrowse
Version:
JBrowse - client-side genome browser
52 lines (46 loc) • 1.6 kB
JavaScript
define([
'dojo/_base/declare',
'dojo/_base/lang'
],
function(
declare,
lang
) {
return declare( null, {
_refreshContextMenu: function( fRect ) {
// if we already have a menu generated for this feature,
// give it a new lease on life
if( ! fRect.contextMenu ) {
fRect.contextMenu = this._makeFeatureContextMenu( fRect, this.getConfForFeature( 'menuTemplate', fRect.f ) );
}
// give the menu a timeout so that it's cleaned up if it's not used within a certain time
if( fRect.contextMenuTimeout ) {
window.clearTimeout( fRect.contextMenuTimeout );
}
var timeToLive = 30000; // clean menus up after 30 seconds
fRect.contextMenuTimeout = window.setTimeout( function() {
if( fRect.contextMenu ) {
fRect.contextMenu.destroyRecursive();
delete fRect.contextMenu;
}
delete fRect.contextMenuTimeout;
}, timeToLive );
},
/**
* Make the right-click dijit menu for a feature.
*/
_makeFeatureContextMenu: function( fRect, menuTemplate ) {
var context = lang.mixin( { track: this, feature: fRect.f, callbackArgs: [ this, fRect.f, fRect ] }, fRect );
// interpolate template strings in the menuTemplate
menuTemplate = this._processMenuSpec(
dojo.clone( menuTemplate ),
context
);
// render the menu, start it up, and bind it to right-clicks
// both on the feature div and on the label div
var menu = this._renderContextMenu( menuTemplate, context );
menu.startup();
return menu;
}
});
});