Ext.define('Ext.scroll.scroller.ScrollPosition', {
extend: 'Ext.scroll.scroller.CssPosition',
config: {
stretcherCls: 'x-scroll-stretcher'
},
constructor: function() {
this.stretchSize = { x: 0, y: 0 };
return this.callParent(arguments);
},
getStretcher: function() {
var stretcher = this.stretcher,
element;
if (!stretcher) {
element = this.getElement();
if (element) {
this.stretcher = stretcher = Ext.Element.create({
className: this.getStretcherCls()
});
stretcher.insertBefore(element);
}
}
return stretcher;
},
stretch: function(x, y) {
var strechSize = this.stretchSize,
stretcher = this.getStretcher(),
element = this.getElement();
strechSize.x = x;
strechSize.y = y;
stretcher.setWidth(x * 3);
stretcher.setHeight(y * 3);
element.setLeft(x);
element.setTop(y);
return this;
},
shrink: function() {
var stretcher = this.getStretcher(),
element = this.getElement();
stretcher.setWidth(0);
stretcher.setHeight(0);
element.setLeft(0);
element.setTop(0);
},
doScrollTo: function(x, y) {
var containerDom = this.getContainer().dom,
stretchSize = this.stretchSize;
if (x !== null) {
containerDom.scrollLeft = x + stretchSize.x;
}
if (y !== null) {
containerDom.scrollTop = y + stretchSize.y;
}
},
determinePosition: function() {
var containerDom = this.getContainer().dom,
stretchSize = this.stretchSize;
return {
x: containerDom.scrollLeft - stretchSize.x,
y: containerDom.scrollTop - stretchSize.y
};
},
onTouchStart: function() {
var position = this.determinePosition();
this.scrollTo(position.x, position.y);
this.callParent(arguments);
},
onAfterInitialized: function() {
this.callParent(arguments);
this.refreshStretch();
},
refresh: function() {
this.callParent(arguments);
this.refreshStretch();
},
refreshStretch: function() {
var position = this.position,
size,
containerSize,
stretchX, stretchY;
this.shrink();
size = this.getSize();
containerSize = this.getContainerSize();
stretchX = Math.max(size.x, containerSize.x);
stretchY = Math.max(size.y, containerSize.y);
this.stretch(stretchX, stretchY);
this.doScrollTo(position.x, position.y);
},
destroy: function() {
var element = this.getElement();
if (element) {
this.getStretcher().destroy();
element.setLeft(null);
element.setTop(null);
}
this.callParent(arguments);
}
});