web-apps/vendor/touch/src/behavior/Scrollable.js
2016-09-14 15:04:28 +03:00

110 lines
3 KiB
JavaScript

/**
* @private
*/
Ext.define('Ext.behavior.Scrollable', {
extend: 'Ext.behavior.Behavior',
requires: [
'Ext.scroll.View'
],
constructor: function() {
this.listeners = {
painted: 'onComponentPainted',
scope: this
};
this.callParent(arguments);
},
onComponentPainted: function() {
this.scrollView.refresh();
},
setConfig: function(config) {
var scrollView = this.scrollView,
component = this.component,
scrollerElement, extraWrap, scroller, direction;
if (config) {
if (!scrollView) {
this.scrollView = scrollView = new Ext.scroll.View(config);
scrollView.on('destroy', 'onScrollViewDestroy', this);
component.setUseBodyElement(true);
this.scrollerElement = scrollerElement = component.innerElement;
if (!Ext.feature.has.ProperHBoxStretching) {
scroller = scrollView.getScroller();
direction = (Ext.isObject(config) ? config.direction : config) || 'auto';
if (direction !== 'vertical') {
extraWrap = scrollerElement.wrap();
extraWrap.addCls(Ext.baseCSSPrefix + 'translatable-hboxfix');
if (direction == 'horizontal') {
extraWrap.setStyle({height: '100%'});
}
this.scrollContainer = extraWrap.wrap();
scrollView.FixedHBoxStretching = scroller.FixedHBoxStretching = true;
}
else {
this.scrollContainer = scrollerElement.wrap();
}
}
else {
this.scrollContainer = scrollerElement.wrap();
}
scrollView.setElement(component.bodyElement);
if (component.isPainted()) {
this.onComponentPainted();
}
component.on(this.listeners);
}
else if (Ext.isString(config) || Ext.isObject(config)) {
scrollView.setConfig(config);
}
}
else if (scrollView) {
scrollView.destroy();
}
return this;
},
getScrollView: function() {
return this.scrollView;
},
onScrollViewDestroy: function() {
var component = this.component,
scrollerElement = this.scrollerElement;
if (!scrollerElement.isDestroyed) {
this.scrollerElement.unwrap();
}
this.scrollContainer.destroy();
if (!component.isDestroyed) {
component.un(this.listeners);
}
delete this.scrollerElement;
delete this.scrollView;
delete this.scrollContainer;
},
onComponentDestroy: function() {
var scrollView = this.scrollView;
if (scrollView) {
scrollView.destroy();
}
}
});