Ext.define('Ext.panel.Collapsible', {
override: 'Ext.Panel',
config: {
collapsed: null,
collapsible: null
},
hasCollapsible: true,
defaultCollapserCls: 'Ext.panel.Collapser',
doDestroy: function() {
this.setCollapsible(null);
this.callParent();
},
collapse: function(animation) {
return this.getCollapsible().collapse(animation);
},
expand: function(animation) {
return this.getCollapsible().expand(animation);
},
toggleCollapsed: function(collapsed, animation) {
return this.getCollapsible().toggleCollapsed(collapsed, animation);
},
getCollapsed: function() {
var collapsible = this.getCollapsible();
return collapsible ? collapsible.getCollapsed() : false;
},
updateCollapsed: function(collapsed) {
var collapsible = this.getCollapsible();
if (collapsible) {
collapsible.setCollapsed(collapsed);
}
},
applyCollapsible: function (collapsible, collapser) {
if (collapsible === true) {
collapsible = { direction: this.getHeaderPosition() };
} else if (typeof collapsible === 'string') {
collapsible = { direction: collapsible };
} else if (!collapsible) {
return null;
}
if (collapser) {
collapser.setConfig(collapsible);
} else {
collapsible = Ext.apply({
xclass: this.defaultCollapserCls,
target: this
}, collapsible);
collapser = Ext.create(collapsible);
}
return collapser;
},
updateCollapsible: function(collapsible, oldCollapsible) {
if (oldCollapsible) {
if (!this.destroying) {
oldCollapsible.doExpandCollapse(false);
}
oldCollapsible.destroy();
}
if (collapsible && this.rendered) {
this.initCollapsible(collapsible);
}
},
updateHeader: function(header, oldHeader) {
var collapsible = this.getCollapsible();
this.callParent([header, oldHeader]);
if (this.isConfiguring && collapsible) {
collapsible.toggleCollapsed(collapsible.getCollapsed(), false);
}
},
updateHeaderPosition: function(headerPosition, oldHeaderPosition) {
var collapsible = this.getCollapsible();
if (collapsible && collapsible.getCollapsed()) {
headerPosition = collapsible.getDirection();
}
this.moveHeaderPosition(headerPosition, oldHeaderPosition);
},
privates: {
initCollapsible: function(collapsible) {
this.ensureHeader();
collapsible.initialize();
},
onCollapsibleRendered: function() {
var collapsible = this.getCollapsible();
if (collapsible) {
this.initCollapsible(collapsible);
}
},
reattachBodyWrap: function() {
var me = this,
header = me._header,
el = me.maxHeightElement || me.element,
bodyWrap = me.bodyWrapElement;
if (bodyWrap.parent() !== el) {
if (header) {
bodyWrap.insertAfter(header.element);
} else {
el.insertFirst(bodyWrap);
}
}
}
}
});