125 lines
4.2 KiB
JavaScript
125 lines
4.2 KiB
JavaScript
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([{
|
|
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);
|
|
menu.showAt(e.getPoint());
|
|
}
|
|
};
|
|
|
|
diff_tab_panel = function(type, id, doctype){
|
|
var self = this;
|
|
|
|
var doc_store = new Ext.data.JsonStore({
|
|
url: "tr_history.cgi",
|
|
listeners: { 'exception': Testopia.Util.loadError },
|
|
baseParams: {action: 'getversions',
|
|
type: type,
|
|
id: id},
|
|
root: 'versions',
|
|
fields: [
|
|
{name: 'name', mapping: 'name',
|
|
name: 'id', mapping: 'id'}
|
|
]
|
|
})
|
|
|
|
|
|
diff_tab_panel.superclass.constructor.call(this, {
|
|
title: 'Test Panel',
|
|
height: 500,
|
|
resizeTabs:true, // turn on tab resizing
|
|
minTabWidth: 115,
|
|
tabWidth:135,
|
|
enableTabScroll:true,
|
|
defaults: {autoScroll:true},
|
|
plugins: new Ext.ux.TabCloseMenu(),
|
|
activeTab: 0,
|
|
tbar: [
|
|
new Ext.form.ComboBox({
|
|
displayField: 'name',
|
|
valueField: 'id',
|
|
name: 'product',
|
|
id: 'product_combo',
|
|
fieldLabel: "Product",
|
|
store: doc_store,
|
|
emptyText: 'Select a version...',
|
|
width: 200
|
|
}),
|
|
" Right: ",
|
|
new Ext.Toolbar.Spacer(),
|
|
new Ext.form.ComboBox({
|
|
}),
|
|
" HTML: ",
|
|
new Ext.form.Radio({
|
|
id: 'format',
|
|
value: 'html',
|
|
checked: true
|
|
}),
|
|
" Raw: ",
|
|
new Ext.form.Radio({
|
|
id: 'format',
|
|
value: 'raw'
|
|
}),
|
|
new Ext.Button({
|
|
text: 'Diff',
|
|
handler: addTab
|
|
}),
|
|
new Ext.Toolbar.Separator(),
|
|
"Show Version: ",
|
|
new Ext.form.ComboBox({
|
|
}),
|
|
new Ext.Button({
|
|
text: 'Show',
|
|
handler: addTab
|
|
})
|
|
]
|
|
});
|
|
|
|
|
|
function addTab() {
|
|
self.add({
|
|
title: 'New Tab ',
|
|
iconCls: 'tabs',
|
|
html: 'diff_text',
|
|
closable:true
|
|
}).show();
|
|
}
|
|
|
|
}
|
|
|
|
Ext.extend(diff_tab_panel, Ext.TabPanel);
|
|
|