59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
/*!
|
|
* Ext JS Library 3.0.3
|
|
* Copyright(c) 2006-2009 Ext JS, LLC
|
|
* licensing@extjs.com
|
|
* http://www.extjs.com/license
|
|
*/
|
|
/**
|
|
* @class Ext.ux.TabCloseMenu
|
|
* @extends Object
|
|
* Plugin (ptype = 'tabclosemenu') for adding a close context menu to tabs.
|
|
*
|
|
* @ptype tabclosemenu
|
|
*/
|
|
Ext.ux.TabCloseMenu = function(){
|
|
var tabs, menu, ctxItem;
|
|
this.init = function(tp){
|
|
tabs = tp;
|
|
tabs.on('contextmenu', onContextMenu);
|
|
};
|
|
|
|
function onContextMenu(ts, item, e){
|
|
if(!menu){ // create context menu on first right click
|
|
menu = new Ext.menu.Menu({
|
|
items: [{
|
|
id: tabs.id + '-close',
|
|
text: 'Close Tab',
|
|
handler : function(){
|
|
tabs.remove(ctxItem);
|
|
}
|
|
},{
|
|
id: tabs.id + '-close-others',
|
|
text: 'Close Other Tabs',
|
|
handler : function(){
|
|
tabs.items.each(function(item){
|
|
if(item.closable && item != ctxItem){
|
|
tabs.remove(item);
|
|
}
|
|
});
|
|
}
|
|
}]});
|
|
}
|
|
ctxItem = item;
|
|
var items = menu.items;
|
|
items.get(tabs.id + '-close').setDisabled(!item.closable);
|
|
var disableOthers = true;
|
|
tabs.items.each(function(){
|
|
if(this != item && this.closable){
|
|
disableOthers = false;
|
|
return false;
|
|
}
|
|
});
|
|
items.get(tabs.id + '-close-others').setDisabled(disableOthers);
|
|
e.stopEvent();
|
|
menu.showAt(e.getPoint());
|
|
}
|
|
};
|
|
|
|
Ext.preg('tabclosemenu', Ext.ux.TabCloseMenu);
|