This should fix the target issues. I still need to add a test for targets and stopping propogation.
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/f53e941a Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/f53e941a Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/f53e941a Branch: refs/heads/develop Commit: f53e941ac6b1918a8883ba9b9d6c4387ec420aa2 Parents: 294c3d6 Author: Harbs <ha...@in-tools.com> Authored: Fri Jul 21 10:31:11 2017 +0300 Committer: Harbs <ha...@in-tools.com> Committed: Fri Jul 21 10:31:11 2017 +0300 ---------------------------------------------------------------------- .../flex/org/apache/flex/core/ElementWrapper.as | 7 +++-- .../flex/org/apache/flex/events/BrowserEvent.as | 24 ++------------- .../org/apache/flex/events/KeyboardEvent.as | 30 +++++++++++++++++- .../flex/org/apache/flex/events/MouseEvent.as | 29 +++++++++++++++++- .../org/apache/flex/events/getTargetWrapper.as | 32 ++++++++++++++++++++ 5 files changed, 96 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f53e941a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ElementWrapper.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ElementWrapper.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ElementWrapper.as index b744edb..ce0cf0e 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ElementWrapper.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/core/ElementWrapper.as @@ -22,6 +22,7 @@ package org.apache.flex.core { import org.apache.flex.events.utils.EventUtils; import org.apache.flex.events.BrowserEvent; + import goog.events.BrowserEvent; import org.apache.flex.events.ElementEvents; import goog.events; import goog.events.EventTarget; @@ -179,10 +180,10 @@ package org.apache.flex.core * @param eventObject The event object to pass to the listener. * @return Result of listener. */ - static public function fireListenerOverride(listener:Object, eventObject:BrowserEvent):Boolean + static public function fireListenerOverride(listener:Object, eventObject:goog.events.BrowserEvent):Boolean { - var e:BrowserEvent = new BrowserEvent(); - e.wrappedEvent = eventObject; + var e:org.apache.flex.events.BrowserEvent = new org.apache.flex.events.BrowserEvent(); + e.wrapEvent(eventObject); return ElementWrapper.googFireListener(listener, e); } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f53e941a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/BrowserEvent.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/BrowserEvent.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/BrowserEvent.as index 1c93b6b..b0ec5b8 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/BrowserEvent.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/BrowserEvent.as @@ -67,7 +67,7 @@ package org.apache.flex.events /** * @type {?goog.events.BrowserEvent} */ - public var wrappedEvent:Object; + private var wrappedEvent:Object; public function wrapEvent(event:goog.events.BrowserEvent):void { @@ -181,16 +181,7 @@ package org.apache.flex.events */ public function get currentTarget():Object { - var o:Object = wrappedEvent.currentTarget; - - if (o) - { - if (o.flexjs_wrapper) - return o.flexjs_wrapper; - if (o.parentNode && o.parentNode.flexjs_wrapper) - return o.parentNode.flexjs_wrapper; - } - return o; + return getTargetWrapper(wrappedEvent.currentTarget); } /** @@ -465,16 +456,7 @@ package org.apache.flex.events */ public function get target():Object { - var o:Object = wrappedEvent.target; - - if (o) - { - if (o.flexjs_wrapper) - return o.flexjs_wrapper; - if (o.parentNode && o.parentNode.flexjs_wrapper) - return o.parentNode.flexjs_wrapper; - } - return o; + return getTargetWrapper(wrappedEvent.target); } /** http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f53e941a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/KeyboardEvent.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/KeyboardEvent.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/KeyboardEvent.as index d4f6e18..a05240a 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/KeyboardEvent.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/KeyboardEvent.as @@ -40,7 +40,7 @@ package org.apache.flex.events * @type {?goog.events.BrowserEvent} */ COMPILE::JS - public var wrappedEvent:Object; + private var wrappedEvent:Object; COMPILE::JS public function wrapEvent(event:goog.events.BrowserEvent):void @@ -67,6 +67,34 @@ package org.apache.flex.events _metaKey = metaKey; } + /** + * @copy org.apache.flex.events.BrowserEvent#target + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.9 + */ + COMPILE::JS + public function get target():Object + { + return getTargetWrapper(wrappedEvent.target); + } + + /** + * @copy org.apache.flex.events.BrowserEvent#currentTarget + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.9 + */ + COMPILE::JS + public function get currentTarget():Object + { + return getTargetWrapper(wrappedEvent.currentTarget); + } + private var _key:String; public function get key():String { http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f53e941a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as index fbd445c..bef5531 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as @@ -259,7 +259,8 @@ package org.apache.flex.events /** * @type {?goog.events.BrowserEvent} */ - public var wrappedEvent:Object; + COMPILE::JS + private var wrappedEvent:Object; COMPILE::JS public function wrapEvent(event:goog.events.BrowserEvent):void @@ -326,6 +327,32 @@ package org.apache.flex.events public var controlKey:Boolean; public var clickCount:int; + /** + * @copy org.apache.flex.events.BrowserEvent#target + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get target():Object + { + return getTargetWrapper(wrappedEvent.target); + } + + /** + * @copy org.apache.flex.events.BrowserEvent#currentTarget + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get currentTarget():Object + { + return getTargetWrapper(wrappedEvent.currentTarget); + } + // TODO remove this when figure out how to preserve the real target // The problem only manifests in SWF, so this alias is good enough for now public function get targetBeforeBubbling():Object http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/f53e941a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/getTargetWrapper.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/getTargetWrapper.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/getTargetWrapper.as new file mode 100644 index 0000000..08eef08 --- /dev/null +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/getTargetWrapper.as @@ -0,0 +1,32 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.flex.events +{ + public function getTargetWrapper(obj:Object):Object + { + if (obj) + { + if (obj.flexjs_wrapper) + return obj.flexjs_wrapper; + if (obj.parentNode && obj.parentNode.flexjs_wrapper) + return obj.parentNode.flexjs_wrapper; + } + return obj; + } +} \ No newline at end of file