macoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-services
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
3.7 KiB
161 lines
3.7 KiB
/** |
|
* This class is used to wrap content items in the `Dashboard`. It uses an |
|
* `anchor` layout by default and provides resizing on the bottom edge only. |
|
* @protected |
|
*/ |
|
Ext.define('Ext.dashboard.Panel', { |
|
extend: 'Ext.panel.Panel', |
|
|
|
xtype: 'dashboard-panel', |
|
|
|
cls: Ext.baseCSSPrefix + 'dashboard-panel', |
|
|
|
anchor: '100%', |
|
|
|
layout : 'fit', |
|
|
|
frame: true, |
|
closable: true, |
|
collapsible: true, |
|
animCollapse: true, |
|
titleCollapse : true, |
|
|
|
stateful : true, |
|
|
|
draggable: { |
|
moveOnDrag: false |
|
}, |
|
|
|
animateClose: true, |
|
|
|
loadMask: true, |
|
loadMessage: 'Loading...', |
|
|
|
minHeight: 90, |
|
|
|
resizable: true, |
|
resizeHandles: 's', |
|
|
|
// Override Panel's default doClose to provide a custom fade out effect |
|
// when a portlet is removed from the portal |
|
doClose: function() { |
|
var me = this; |
|
|
|
if (me.animateClose) { |
|
if (!me.closing) { |
|
me.closing = true; |
|
me.el.animate({ |
|
opacity: 0, |
|
callback: me.finishClose, |
|
scope: me |
|
}); |
|
} |
|
} else { |
|
me.finishClose(); |
|
} |
|
}, |
|
|
|
finishClose: function () { |
|
var me = this, |
|
closeAction = me.closeAction; |
|
|
|
me.closing = false; |
|
me.fireEvent('close', me); |
|
|
|
// The close of the last portlet within a column results in removal of both the column and its splitter. |
|
// So coalesce any layouts resulting from this operation. |
|
Ext.suspendLayouts(); |
|
me[closeAction](); |
|
Ext.resumeLayouts(true); |
|
|
|
if (closeAction === 'hide') { |
|
// Restore the opacity from doClose |
|
me.el.setOpacity(1); |
|
} |
|
}, |
|
|
|
afterRender: function () { |
|
this.callParent(); |
|
|
|
if (this.loading) { |
|
this.onViewBeforeLoad(); |
|
} |
|
}, |
|
|
|
getLoadMask: function () { |
|
var me = this, |
|
loadMask = me.rendered && me.loadMask, |
|
config; |
|
|
|
if (loadMask && !loadMask.isComponent) { |
|
config = { |
|
target: me |
|
}; |
|
|
|
if (loadMask === true) { |
|
loadMask = config; |
|
} else { |
|
Ext.apply(config, loadMask); |
|
} |
|
|
|
me.loadMask = loadMask = Ext.ComponentManager.create(config, 'loadmask'); |
|
} |
|
|
|
return loadMask || null; |
|
}, |
|
|
|
onAdd: function (view) { |
|
this.callParent(arguments); |
|
|
|
view.on({ |
|
beforeload: 'onViewBeforeLoad', |
|
load: 'onViewLoaded', |
|
scope: this |
|
}); |
|
}, |
|
|
|
onViewBeforeLoad: function () { |
|
this.loading = true; |
|
|
|
var loadMask = this.getLoadMask(); |
|
if (loadMask) { |
|
loadMask.show(); |
|
} |
|
}, |
|
|
|
onViewLoaded: function () { |
|
this.loading = false; |
|
|
|
var loadMask = this.getLoadMask(); |
|
if (loadMask) { |
|
loadMask.hide(); |
|
} |
|
var view = this.items.getAt(0); |
|
if (view.getTitle) { |
|
var title = view.getTitle(); |
|
if (title) { |
|
this.setTitle(title); |
|
} |
|
} |
|
}, |
|
|
|
/** @private */ |
|
setBox: function (box) { |
|
// The resizer calls setBox which would set our left/top coordinates but |
|
// that is a BAD thing in a column layout which relies on flow! |
|
this.setSize(box.width, box.height); |
|
}, |
|
|
|
/** @private */ |
|
getState : function() { |
|
var me = this, |
|
state = me.callParent() || {}; |
|
|
|
if (!state.collapsed) { |
|
me.addPropertyToState(state, 'height', me.rendered ? me.getHeight() : me.height || me.minHeight || 100); |
|
} |
|
|
|
return state; |
|
|
|
} |
|
});
|
|
|