taskbar.js
来自「一个使用ssh+ext的例子。 希望对开发这个应用的人带来好处。仔细研究里面的」· JavaScript 代码 · 共 690 行 · 第 1/2 页
JS
690 行
var left = Ext.fly(el).getOffsetsTo(this.stripWrap)[0] + pos;
var right = left + el.offsetWidth;
if(left < pos){
this.scrollTo(left, animate);
}else if(right > (pos + area)){
this.scrollTo(right - area, animate);
}
},
scrollTo : function(pos, animate){
this.stripWrap.scrollTo('left', pos, animate ? this.getScrollAnim() : false);
if(!animate){
this.updateScrollButtons();
}
},
onScrollRight : function(){
var sw = this.getScrollWidth()-this.getScrollArea();
var pos = this.getScrollPos();
var s = Math.min(sw, pos + this.getScrollIncrement());
if(s != pos){
this.scrollTo(s, this.animScroll);
}
},
onScrollLeft : function(){
var pos = this.getScrollPos();
var s = Math.max(0, pos - this.getScrollIncrement());
if(s != pos){
this.scrollTo(s, this.animScroll);
}
},
updateScrollButtons : function(){
var pos = this.getScrollPos();
this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('ux-taskbuttons-scroller-left-disabled');
this.scrollRight[pos >= (this.getScrollWidth()-this.getScrollArea()) ? 'addClass' : 'removeClass']('ux-taskbuttons-scroller-right-disabled');
}
});
/**
* @class Ext.ux.TaskBar.TaskButton
* @extends Ext.Button
*/
Ext.ux.TaskBar.TaskButton = function(win, el){
this.win = win;
Ext.ux.TaskBar.TaskButton.superclass.constructor.call(this, {
iconCls: win.iconCls,
text: Ext.util.Format.ellipsis(win.title, 12),
tooltip: win.taskbuttonTooltip || win.title,
renderTo: el,
handler : function(){
if(win.minimized || win.hidden){
win.show();
}else if(win == win.manager.getActive()){
win.minimize();
}else{
win.toFront();
}
},
clickEvent:'mousedown'
});
};
Ext.extend(Ext.ux.TaskBar.TaskButton, Ext.Button, {
onRender : function(){
Ext.ux.TaskBar.TaskButton.superclass.onRender.apply(this, arguments);
this.cmenu = new Ext.menu.Menu({
items: [{
id: 'restore',
text: 'Restore',
handler: function(){
if(!this.win.isVisible()){
this.win.show();
}else{
this.win.restore();
}
},
scope: this
},{
id: 'minimize',
text: 'Minimize',
handler: this.win.minimize,
scope: this.win
},{
id: 'maximize',
text: 'Maximize',
handler: this.win.maximize,
scope: this.win
}, '-', {
id: 'close',
text: 'Close',
handler: this.closeWin.createDelegate(this, this.win, true),
scope: this.win
}]
});
this.cmenu.on('beforeshow', function(){
var items = this.cmenu.items.items;
var w = this.win;
items[0].setDisabled(w.maximized !== true && w.hidden !== true);
items[1].setDisabled(w.minimized === true);
items[2].setDisabled(w.maximized === true || w.hidden === true);
items[2].setDisabled(w.maximizable === false);
items[3].setDisabled(w.closable === false);
}, this);
this.el.on('contextmenu', function(e){
e.stopEvent();
if(!this.cmenu.el){
this.cmenu.render();
}
var xy = e.getXY();
xy[1] -= this.cmenu.el.getHeight();
this.cmenu.showAt(xy);
}, this);
},
closeWin : function(cMenu, e, win){
if(!win.isVisible()){
win.show();
}else{
win.restore();
}
win.close();
},
/**
* override so autoWidth() is not called
* @param {String} text The text for the button
*/
setText : function(text){
if(text){
this.text = text;
if(this.el){
this.el.child("td.x-btn-center " + this.buttonSelector).update(Ext.util.Format.ellipsis(text, 12));
}
}
},
/**
* @param {String/Object} tooltip The tooltip for the button - can be a string or QuickTips config object
*/
setTooltip : function(text){
if(text){
this.tooltip = text;
var btnEl = this.el.child(this.buttonSelector);
Ext.QuickTips.unregister(btnEl.id);
if(typeof this.tooltip == 'object'){
Ext.QuickTips.register(Ext.apply({
target: btnEl.id
}, this.tooltip));
} else {
btnEl.dom[this.tooltipType] = this.tooltip;
}
}
}
});
/**
* @class Ext.ux.QuickStartPanel
* @extends Ext.BoxComponent
*/
Ext.ux.QuickStartPanel = Ext.extend(Ext.BoxComponent, {
enableMenu: true,
initComponent : function(){
Ext.ux.QuickStartPanel.superclass.initComponent.call(this);
this.on('resize', this.delegateUpdates);
this.menu = new Ext.menu.Menu();
this.items = [];
this.stripWrap = Ext.get(this.el).createChild({
cls: 'ux-quickstart-strip-wrap',
cn: {tag:'ul', cls:'ux-quickstart-strip'}
});
this.stripSpacer = Ext.get(this.el).createChild({
cls:'ux-quickstart-strip-spacer'
});
this.strip = new Ext.Element(this.stripWrap.dom.firstChild);
this.edge = this.strip.createChild({
tag:'li',
cls:'ux-quickstart-edge'
});
this.strip.createChild({
cls:'x-clear'
});
},
add : function(config){
var li = this.strip.createChild({tag:'li'}, this.edge); // insert before the edge
var btn = new Ext.Button(Ext.apply(config, {
cls:'x-btn-icon',
menuText: config.text,
renderTo: li,
text: '' // do not display text
}));
this.items.push(btn);
this.delegateUpdates();
return btn;
},
remove : function(btn){
var li = document.getElementById(btn.container.id);
btn.destroy();
li.parentNode.removeChild(li);
var s = [];
for(var i = 0, len = this.items.length; i < len; i++) {
if(this.items[i] != btn){
s.push(this.items[i]);
}
}
this.items = s;
this.delegateUpdates();
},
menuAdd : function(config){
this.menu.add(config);
},
delegateUpdates : function(){
if(this.enableMenu && this.rendered){
this.showButtons();
this.clearMenu();
this.autoMenu();
}
},
showButtons : function(){
var count = this.items.length;
for(var i = 0; i < count; i++){
this.items[i].show();
}
},
clearMenu : function(){
this.menu.removeAll();
},
autoMenu : function(){
var count = this.items.length;
var ow = this.el.dom.offsetWidth;
var tw = this.el.dom.clientWidth;
var wrap = this.stripWrap;
var cw = wrap.dom.offsetWidth;
var l = this.edge.getOffsetsTo(this.stripWrap)[0];
if(!this.enableMenu || count < 1 || cw < 20){ // 20 to prevent display:none issues
return;
}
wrap.setWidth(tw);
if(l <= tw){
if(this.showingMenu){
this.showingMenu = false;
this.menuButton.hide();
}
}else{
tw -= wrap.getMargins('lr');
wrap.setWidth(tw > 20 ? tw : 20);
if(!this.showingMenu){
if(!this.menuButton){
this.createMenuButton();
}else{
this.menuButton.show();
}
}
mo = this.getMenuButtonPos();
for(var i = count-1; i >= 0; i--){
var bo = this.items[i].el.dom.offsetLeft + this.items[i].el.dom.offsetWidth;
if(bo > mo){
this.items[i].hide();
var ic = this.items[i].initialConfig,
config = {
iconCls: ic.iconCls,
handler: ic.handler,
scope: ic.scope,
text: ic.menuText
};
this.menuAdd(config);
}else{
this.items[i].show();
}
}
this.showingMenu = true;
}
},
createMenuButton : function(){
var h = this.el.dom.offsetHeight;
var mb = this.el.insertFirst({
cls:'ux-quickstart-menubutton-wrap'
});
mb.setHeight(h);
var btn = new Ext.Button({
cls:'x-btn-icon',
id: 'ux-quickstart-menubutton',
menu: this.menu,
renderTo: mb
});
mb.setWidth(Ext.get('ux-quickstart-menubutton').getWidth());
this.menuButton = mb;
},
getMenuButtonPos : function(){
return this.menuButton.dom.offsetLeft;
}
});
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?