/** * @private */Ext.define('Ext.util.sizemonitor.Abstract', { mixins: ['Ext.mixin.Templatable'], requires: [ 'Ext.TaskQueue' ], config: { element: null, callback: Ext.emptyFn, scope: null, args: [] }, width: null, height: null, contentWidth: null, contentHeight: null, constructor: function(config) { this.refresh = Ext.Function.bind(this.refresh, this); this.info = { width: 0, height: 0, contentWidth: 0, contentHeight: 0, flag: 0 }; this.initElement(); this.initConfig(config); this.bindListeners(true); }, bindListeners: Ext.emptyFn, applyElement: function(element) { if (element) { return Ext.get(element); } }, updateElement: function(element) { element.append(this.detectorsContainer); element.addCls(Ext.baseCSSPrefix + 'size-monitored'); }, applyArgs: function(args) { return args.concat([this.info]); }, refreshMonitors: Ext.emptyFn, forceRefresh: function() { Ext.TaskQueue.requestRead('refresh', this); }, getContentBounds: function() { return this.detectorsContainer.getBoundingClientRect(); }, getContentWidth: function() { return this.detectorsContainer.clientWidth; }, getContentHeight: function() { return this.detectorsContainer.clientHeight; }, refreshSize: function() { var element = this.getElement(); if (!element || element.destroyed) { return false; } var width = element.getWidth(), height = element.getHeight(), contentWidth = this.getContentWidth(), contentHeight = this.getContentHeight(), currentContentWidth = this.contentWidth, currentContentHeight = this.contentHeight, info = this.info, resized = false, flag = 0; this.width = width; this.height = height; this.contentWidth = contentWidth; this.contentHeight = contentHeight; flag = ((currentContentWidth !== contentWidth ? 1 : 0) + (currentContentHeight !== contentHeight ? 2 : 0)); if (flag > 0) { info.width = width; info.height = height; info.contentWidth = contentWidth; info.contentHeight = contentHeight; info.flag = flag; resized = true; this.getCallback().apply(this.getScope(), this.getArgs()); } return resized; }, refresh: function(force) { if (this.destroying || this.destroyed) { return; } if (this.refreshSize() || force) { Ext.TaskQueue.requestWrite('refreshMonitors', this); } }, destroy: function() { var me = this, element = me.getElement(); me.bindListeners(false); if (element && !element.destroyed) { element.removeCls(Ext.baseCSSPrefix + 'size-monitored'); } delete me._element; // This is a closure so Base destructor won't null it me.refresh = null; me.callParent(); }});