/** * @private */ Ext.define('Ext.scroll.indicator.ScrollPosition', { extend: 'Ext.scroll.indicator.Abstract', config: { cls: 'scrollposition' }, getElementConfig: function() { var config = this.callParent(arguments); config.children.unshift({ className: 'x-scroll-bar-stretcher' }); return config; }, updateValue: function(value) { if (this.gapLength === 0) { if (value >= 1) { value--; } this.setOffset(this.barLength * value); } else { this.setOffset(this.gapLength * value); } }, doUpdateLength: function() { if (!this.isDestroyed) { var scrollOffset = this.barLength, element = this.element; this.callParent(arguments); if (this.getAxis() === 'x') { element.setLeft(scrollOffset); } else { element.setTop(scrollOffset); } } }, doSetOffset: function(offset) { if (!this.isDestroyed) { var barLength = this.barLength, minLength = this.getMinLength(), barDom = this.barElement.dom; if (offset !== -10000) { offset = Math.min(barLength - minLength, Math.max(offset, minLength - this.getLength())); offset = barLength - offset; } if (this.getAxis() === 'x') { barDom.scrollLeft = offset; } else { barDom.scrollTop = offset; } } } });