diff --git a/www/manager6/Toolkit.js b/www/manager6/Toolkit.js index 351cd8be..881e43a1 100644 --- a/www/manager6/Toolkit.js +++ b/www/manager6/Toolkit.js @@ -122,22 +122,14 @@ Ext.define('Ext.ux.IFrame', { src: 'about:blank', renderTpl: [ - '' + '' ], + childEls: ['iframeEl'], initComponent: function () { this.callParent(); - this.frameName = this.frameName || this.id + '-frame'; - - this.addEvents( - 'beforeload', - 'load' - ); - - Ext.apply(this.renderSelectors, { - iframeEl: 'iframe' - }); + this.frameName = this.frameName || this.id + '-frame'; }, initEvents : function() { @@ -190,9 +182,9 @@ Ext.define('Ext.ux.IFrame', { if (this.rendered) { try { - doc = this.getDoc(); + doc = this.getDoc(); if (doc) { - Ext.EventManager.removeAll(doc); + Ext.get(doc).un(this._docListeners); if (destroying) { for (prop in doc) { if (doc.hasOwnProperty && doc.hasOwnProperty(prop)) { @@ -212,32 +204,32 @@ Ext.define('Ext.ux.IFrame', { if (doc) { try { - Ext.EventManager.removeAll(doc); - // These events need to be relayed from the inner document (where they stop // bubbling) up to the outer document. This has to be done at the DOM level so // the event reaches listeners on elements like the document body. The effected // mechanisms that depend on this bubbling behavior are listed to the right // of the event. - Ext.EventManager.on(doc, { - mousedown: fn, // menu dismisal (MenuManager) and Window onMouseDown (toFront) - mousemove: fn, // window resize drag detection - mouseup: fn, // window resize termination - click: fn, // not sure, but just to be safe - dblclick: fn, // not sure again - scope: me - }); + Ext.get(doc).on( + me._docListeners = { + mousedown: fn, // menu dismisal (MenuManager) and Window onMouseDown (toFront) + mousemove: fn, // window resize drag detection + mouseup: fn, // window resize termination + click: fn, // not sure, but just to be safe + dblclick: fn, // not sure again + scope: me + } + ); } catch(e) { // cannot do this xss } // We need to be sure we remove all our events from the iframe on unload or we're going to LEAK! - Ext.EventManager.on(this.getWin(), 'beforeunload', me.cleanupListeners, me); + Ext.get(this.getWin()).on('beforeunload', me.cleanupListeners, me); this.el.unmask(); this.fireEvent('load', this); - } else if(me.src && me.src != '') { + } else if (me.src) { this.el.unmask(); this.fireEvent('error', this); @@ -246,6 +238,29 @@ Ext.define('Ext.ux.IFrame', { }, + onRelayedEvent: function (event) { + // relay event from the iframe's document to the document that owns the iframe... + + var iframeEl = this.iframeEl, + + // Get the left-based iframe position + iframeXY = iframeEl.getTrueXY(), + originalEventXY = event.getXY(), + + // Get the left-based XY position. + // This is because the consumer of the injected event will + // perform its own RTL normalization. + eventXY = event.getTrueXY(); + + // the event from the inner document has XY relative to that document's origin, + // so adjust it to use the origin of the iframe in the outer document: + event.xy = [iframeXY[0] + eventXY[0], iframeXY[1] + eventXY[1]]; + + event.injectEvent(iframeEl); // blame the iframe for the event... + + event.xy = originalEventXY; // restore the original XY (just for safety) + }, + load: function (src) { var me = this, text = me.loadMask,