On 12/23/19, 11:48 PM, "Harbs" <[email protected]> wrote:
The code you mention below is a bug (interesting the compiler didn’t catch
it). I fixed it locally and tried removing e.bubbles completely. Neither made a
difference.
IMO, it is legal AS/JS. I think Closure Compiler should have warned on
e.bubbles; Are you sure it didn't?
I'm done working for today. You might learn something by stepping through the
goog.events dispatching before and after your changes.
I keep feeling like we should replace goog.events with our own code, but
it’s a scary change… ;-)
I think it is safe to get rid of goog.events, but yes, it is a big change.
HTH,
-Alex
> On Dec 24, 2019, at 9:01 AM, Alex Harui <[email protected]> wrote:
>
> Harbs,
>
> In HTMLElementWrapper, it looked like there were 3 main code paths:
>
> 1) if(eventObject is IBrowserEvent){
> 2a) if (converter)
> 2b) else
>
> I'm only looking at this diff, but it feels like some of those may have
gotten lost, so please double-check.
>
> Also, it may be the Crux issue is related to this:
>
> - e = EventUtils.createEvent(eventType);
> + e = EventUtils.createEvent(eventType), e.bubbles;
>
> HTH,
> -Alex
>
> On 12/22/19, 8:39 AM, "[email protected] <mailto:[email protected]>"
<[email protected] <mailto:[email protected]>> wrote:
>
> This is an automated email from the ASF dual-hosted git repository.
>
> harbs pushed a commit to branch develop
> in repository
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-asjs.git&data=02%7C01%7Caharui%40adobe.com%7C2239b5c53a5e40ad97cb08d78845b373%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127705258305361&sdata=9byOZCM%2Baxx5FSJPrfIqO50MH7SSocQP9iOqK7%2BIiBs%3D&reserved=0
<https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-asjs.git&data=02%7C01%7Caharui%40adobe.com%7C2239b5c53a5e40ad97cb08d78845b373%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637127705258315356&sdata=7aCHCOQpPN0G42L2L4udJj8WEno2nFDhNPWR6q5W%2FcA%3D&reserved=0>
>
>
> The following commit(s) were added to refs/heads/develop by this push:
> new f50c999 Cleaned up ElementWrapper and HTMLElementWrapper
> f50c999 is described below
>
> commit f50c9990a3190cf681364905525656984ab2e9c5
> Author: Harbs <[email protected] <mailto:[email protected]>>
> AuthorDate: Sun Dec 22 18:39:04 2019 +0200
>
> Cleaned up ElementWrapper and HTMLElementWrapper
> ---
> .../beads/CrossBrowserFireListenerOverrideBead.as | 4 +-
> .../org/apache/royale/core/ElementWrapper.as | 41 ++---
> .../org/apache/royale/core/HTMLElementWrapper.as | 204
+--------------------
> .../org/apache/royale/events/KeyboardEvent.as | 4 +-
> .../royale/org/apache/royale/events/MouseEvent.as | 4 +-
> .../src/main/royale/mx/core/Application.as | 8 +-
> .../main/royale/spark/components/Application.as | 4 +-
> 7 files changed, 37 insertions(+), 232 deletions(-)
>
> diff --git
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
> index 36db48b..98532bd 100644
> ---
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
> +++
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
> @@ -20,7 +20,7 @@ package org.apache.royale.html.beads
> {
> import org.apache.royale.core.IBead;
> import org.apache.royale.core.IStrand;
> - import org.apache.royale.core.HTMLElementWrapper;
> + import org.apache.royale.core.ElementWrapper;
> COMPILE::JS
> {
> import goog.events;
> @@ -87,7 +87,7 @@ package org.apache.royale.html.beads
> }
>
> e.wrapEvent(eventObject);
> - return
HTMLElementWrapper.googFireListener(listener, e);
> + return
ElementWrapper.googFireListener(listener, e);
> }
> }
> }
> diff --git
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
> index 58b7a64..ec7ab71 100644
> ---
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
> +++
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
> @@ -27,6 +27,7 @@ package org.apache.royale.core
> import org.apache.royale.events.ElementEvents;
> import goog.events;
> import goog.events.EventTarget;
> + import goog.DEBUG;
> }
> COMPILE::SWF
> {
> @@ -77,8 +78,7 @@ package org.apache.royale.core
> if (!_beads)
> {
> _beads = new Vector.<IBead>();
> - }
> -
> + }
> _beads.push(bead);
> bead.strand = this;
> }
> @@ -115,9 +115,7 @@ package org.apache.royale.core
> public function removeBead(bead:IBead):IBead
> {
> var i:uint, n:uint, value:Object;
> -
> n = _beads.length;
> -
> for (i = 0; i < n; i++)
> {
> value = _beads[i];
> @@ -125,7 +123,7 @@ package org.apache.royale.core
> if (bead === value)
> {
> _beads.splice(i, 1);
> -
> + bead.strand = null;
> return bead;
> }
> }
> @@ -173,6 +171,11 @@ package org.apache.royale.core
> public class ElementWrapper extends EventDispatcher implements
IStrand
> {
>
> + /**
> + * @royalesuppresspublicvarwarning
> + */
> + static public var converterMap:Object = {};
> +
> //--------------------------------------
> // Static Function
> //--------------------------------------
> @@ -185,13 +188,13 @@ package org.apache.royale.core
> */
> static public function
fireListenerOverride(listener:Object,
eventObject:goog.events.BrowserEvent):Boolean
> {
> - /**
> - * For now we're adding in some just-in-case code to
prevent conflicts with ElementWrapper. This needs to be fixed.
> - */
> var e:IBrowserEvent;
> - if(eventObject is IBrowserEvent){
> - e = eventObject as IBrowserEvent
> - } else {
> + var nativeEvent:Object = eventObject.getBrowserEvent();
> + var converter:Object =
converterMap[nativeEvent.constructor.name];
> + if (converter)
> + e = converter["convert"](nativeEvent,eventObject);
> + else
> + {
> e = new org.apache.royale.events.BrowserEvent();
> e.wrapEvent(eventObject);
> }
> @@ -262,7 +265,7 @@ package org.apache.royale.core
> {
> _beads = new Vector.<IBead>();
> }
> -
> + if (goog.DEBUG && !(bead is IBead)) throw new
TypeError('Cannot convert '+bead+' to IBead');
> _beads.push(bead);
> bead.strand = this;
> }
> @@ -274,11 +277,8 @@ package org.apache.royale.core
> public function
getBeadByType(classOrInterface:Class):IBead
> {
> var bead:IBead, i:uint, n:uint;
> -
> if (!_beads) return null;
> -
> n = _beads.length;
> -
> for (i = 0; i < n; i++)
> {
> bead = _beads[i];
> @@ -299,9 +299,7 @@ package org.apache.royale.core
> public function removeBead(bead:IBead):IBead
> {
> var i:uint, n:uint, value:Object;
> -
> n = _beads.length;
> -
> for (i = 0; i < n; i++)
> {
> value = _beads[i];
> @@ -309,7 +307,6 @@ package org.apache.royale.core
> if (bead === value)
> {
> _beads.splice(i, 1);
> -
> return bead;
> }
> }
> @@ -351,12 +348,12 @@ package org.apache.royale.core
> override public function dispatchEvent(e:Object):Boolean
> {
> var eventType:String = "";
> - if (typeof(e) === 'string')
> + if (typeof(e) == 'string')
> {
> eventType = e as String;
> - if (e === Event.CHANGE)
> + if (e == "change")
> {
> - e = EventUtils.createEvent(eventType);
> + e = EventUtils.createEvent(eventType, e.bubbles);
> }
> }
> else
> @@ -364,7 +361,7 @@ package org.apache.royale.core
> eventType = e.type;
> if (ElementEvents.elementEvents[eventType])
> {
> - e = EventUtils.createEvent(eventType);
> + e = EventUtils.createEvent(eventType), e.bubbles;
> }
> }
> var source:Object = this.getActualDispatcher_(eventType);
> diff --git
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
> index d44fb29..59e571c 100644
> ---
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
> +++
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
> @@ -144,92 +144,13 @@ package org.apache.royale.core
> }
>
> COMPILE::JS
> - public class HTMLElementWrapper extends EventDispatcher
implements IStrand
> + public class HTMLElementWrapper extends ElementWrapper
> {
>
> - //--------------------------------------
> - // Static Function
> - //--------------------------------------
> -
> - /**
> - * @param listener The listener object to call
{goog.events.Listener}.
> - * @param eventObject The event object to pass to the
listener.
> - * @return Result of listener.
> - * @royaleignorecoercion
org.apache.royale.events.IBrowserEvent
> - */
> - static public function
fireListenerOverride(listener:Object,
eventObject:goog.events.BrowserEvent):Boolean
> - {
> - /**
> - * For now we're adding in some just-in-case code to
prevent conflicts with ElementWrapper. This needs to be fixed.
> - */
> - var e:IBrowserEvent;
> - if(eventObject is IBrowserEvent){
> - e = eventObject as IBrowserEvent
> - } else {
> - var nativeEvent:Object =
eventObject.getBrowserEvent();
> - var converter:Object =
converterMap[nativeEvent.constructor.name];
> - if (converter)
> - e = converter["convert"](nativeEvent,eventObject);
> - else
> - {
> - e = new org.apache.royale.events.BrowserEvent();
> - e.wrapEvent(eventObject);
> - }
> - }
> - return
HTMLElementWrapper.googFireListener(listener, e);
> - }
> -
> - /**
> - * @royalesuppresspublicvarwarning
> - */
> - static public var converterMap:Object = {};
> -
> - /**
> - * Static initializer
> - */
> - static public function installOverride():Boolean
> - {
> - HTMLElementWrapper.googFireListener =
goog.events.fireListener;
> - goog.events.fireListener =
HTMLElementWrapper.fireListenerOverride;
> - return true;
> - }
> -
> - //--------------------------------------
> - // Static Property
> - //--------------------------------------
> -
> - /**
> - * The original fireListener.
> - *
> - * @royalesuppresspublicvarwarning
> - */
> - static public var googFireListener:Function;
> -
> - /**
> - * The properties that triggers the static initializer.
> - * Note, in JS, this property has to be declared
> - * after the installOverride.
> - *
> - * @royalesuppresspublicvarwarning
> - */
> - static public var installedOverride:Boolean =
installOverride();
>
> //--------------------------------------
> // Property
> //--------------------------------------
> -
> - private var _element:WrappedHTMLElement;
> -
> - public function get element():WrappedHTMLElement
> - {
> - return _element;
> - }
> -
> - public function set element(value:WrappedHTMLElement):void
> - {
> - _element = value;
> - _element.royale_wrapper = this;
> - }
>
> /**
> * allow access from overrides
> @@ -270,8 +191,6 @@ package org.apache.royale.core
> }
> }
>
> - private var _beads:Array;
> -
> //--------------------------------------
> // Function
> //--------------------------------------
> @@ -280,85 +199,15 @@ package org.apache.royale.core
> * @param bead The new bead.
> * @royaleignorecoercion org.apache.royale.core.IBeadModel
> */
> - public function addBead(bead:IBead):void
> + override public function addBead(bead:IBead):void
> {
> - if (!_beads)
> - {
> - _beads = [];
> - }
> - if (goog.DEBUG && !(bead is IBead)) throw new
TypeError('Cannot convert '+bead+' to IBead')
> - _beads.push(bead);
> -
> - if (bead is IBeadModel)
> + if (bead is IBeadModel)
> {
> _model = bead as IBeadModel;
> }
> -
> - bead.strand = this;
> - }
> -
> - /**
> - * @param classOrInterface The requested bead type.
> - * @return The bead.
> - */
> - public function
getBeadByType(classOrInterface:Class):IBead
> - {
> - var bead:IBead, i:uint, n:uint;
> -
> - if (!_beads) return null;
> -
> - n = _beads.length;
> -
> - for (i = 0; i < n; i++)
> - {
> - bead = _beads[i];
> -
> - if (bead is classOrInterface)
> - {
> - return bead;
> - }
> - }
> -
> - return null;
> + super.addBead(bead);
> }
> -
> - /**
> - * @param bead The bead to remove.
> - * @return The bead.
> - */
> - public function removeBead(bead:IBead):IBead
> - {
> - var i:uint, n:uint, value:Object;
> -
> - n = _beads.length;
> -
> - for (i = 0; i < n; i++)
> - {
> - value = _beads[i];
> -
> - if (bead === value)
> - {
> - _beads.splice(i, 1);
> - bead.strand = null;
> - return bead;
> - }
> - }
> -
> - return null;
> - }
> -
> - override public function addEventListener(type:String,
handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object =
null):void
> - {
> - var source:Object = getActualDispatcher_(type);
> - goog.events.listen(source, type, handler);
> - }
> -
> - override public function removeEventListener(type:String,
handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object =
null):void
> - {
> - var source:Object = getActualDispatcher_(type);
> - goog.events.unlisten(source, type, handler);
> - }
> -
> +
> private function getActualDispatcher_(type:String):Object
> {
> var source:Object = this;
> @@ -368,48 +217,7 @@ package org.apache.royale.core
> }
> return source;
> }
> -
> - override public function hasEventListener(type:String):Boolean
> - {
> - var source:Object = this.getActualDispatcher_(type);
> -
> - return goog.events.hasListener(source, type);
> - }
> -
> - /**
> - * @royaleignorecoercion String
> - */
> - override public function dispatchEvent(e:Object):Boolean
> - {
> - var eventType:String = "";
> - if (typeof(e) === 'string')
> - {
> - eventType = e as String;
> - if (e === org.apache.royale.events.Event.CHANGE)
> - {
> - e = EventUtils.createEvent(eventType, e.bubbles);
> - }
> - }
> - else
> - {
> - eventType = e.type;
> - if (ElementEvents.elementEvents[eventType])
> - {
> - e = EventUtils.createEvent(eventType, e.bubbles);
> - }
> - }
> - var source:Object = this.getActualDispatcher_(eventType);
> - if (e.bubbles) {
> - return dispatchBubblingEvent(source, e);
> - }
> - if (source == this)
> - {
> - return super.dispatchEvent(e);
> - }
> -
> - return source.dispatchEvent(e);
> - }
> -
> +
> /**
> * @royaleignorecoercion
org.apache.royale.events.IEventDispatcher
> */
> diff --git
a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
> index bbcaa1d..8719a1e 100644
> ---
a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
> +++
b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
> @@ -21,7 +21,7 @@ package org.apache.royale.events
> COMPILE::JS
> {
> import goog.events.BrowserEvent;
> - import org.apache.royale.core.HTMLElementWrapper;
> + import org.apache.royale.core.ElementWrapper;
> import org.apache.royale.events.Event;
> import org.apache.royale.events.utils.KeyboardEventConverter;
> }
> @@ -314,7 +314,7 @@ package org.apache.royale.events
> COMPILE::JS
> public static function setupConverter():Boolean
> {
> - HTMLElementWrapper.converterMap["KeyboardEvent"] =
KeyboardEventConverter;
> + ElementWrapper.converterMap["KeyboardEvent"] =
KeyboardEventConverter;
> return true;
> }
>
> diff --git
a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
> index 0d30f31..33bb052 100644
> ---
a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
> +++
b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
> @@ -32,7 +32,7 @@ package org.apache.royale.events
>
> import goog.events.BrowserEvent;
>
> - import org.apache.royale.core.HTMLElementWrapper;
> + import org.apache.royale.core.ElementWrapper;
> import org.apache.royale.events.Event;
> import org.apache.royale.events.utils.MouseEventConverter;
> }
> @@ -838,7 +838,7 @@ package org.apache.royale.events
>
> public static function setupConverter():Boolean
> {
> - HTMLElementWrapper.converterMap["MouseEvent"] =
MouseEventConverter;
> + ElementWrapper.converterMap["MouseEvent"] =
MouseEventConverter;
> _useNativeConstructor = typeof window.MouseEvent ==
'function';
> return true;
> }
> diff --git
a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
> index 2e79aec..525bed2 100644
> ---
a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
> +++
b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
> @@ -66,7 +66,7 @@ import mx.managers.FocusManager;
> import mx.managers.ISystemManager;
>
> COMPILE::JS {
> - import org.apache.royale.core.HTMLElementWrapper;
> + import org.apache.royale.core.ElementWrapper;
> import org.apache.royale.events.ElementEvents;
> }
>
> @@ -632,9 +632,9 @@ public class Application extends Container
implements IStrand, IParent, IEventDi
> COMPILE::JS
> public function initializeApplication():void
> {
> - HTMLElementWrapper.converterMap["MouseEvent"] =
MouseEventConverter;
> - HTMLElementWrapper.converterMap["KeyboardEvent"] =
KeyboardEventConverter;
> - HTMLElementWrapper.converterMap["FocusEvent"] =
FocusEventConverter;
> + ElementWrapper.converterMap["MouseEvent"] =
MouseEventConverter;
> + ElementWrapper.converterMap["KeyboardEvent"] =
KeyboardEventConverter;
> + ElementWrapper.converterMap["FocusEvent"] =
FocusEventConverter;
> addEventListener(KeyboardEvent.KEY_DOWN,
keyDownForCapsLockHandler);
>
> initManagers();
> diff --git
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
> index a840ea3..0a85538 100644
> ---
a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
> +++
b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
> @@ -67,7 +67,7 @@ import mx.events.utils.MouseEventConverter;
> import mx.managers.ISystemManager;
>
> COMPILE::JS {
> - import org.apache.royale.core.HTMLElementWrapper;
> + import org.apache.royale.core.ElementWrapper;
> }
>
> import org.apache.royale.binding.ContainerDataBinding;
> @@ -324,7 +324,7 @@ public class Application extends
SkinnableContainer implements IStrand, IParent,
>
> COMPILE::JS
> {
> - HTMLElementWrapper.converterMap["MouseEvent"] =
MouseEventConverter;
> + ElementWrapper.converterMap["MouseEvent"] =
MouseEventConverter;
> }
> }