Repository: flex-asjs Updated Branches: refs/heads/develop e54023ece -> 5f9e150f8
FLEX-35247 - Fix creation of events in IE11. - Introduce EventUtils class - provides methods for creating custom events - First is being used recommended way to create event - if it's fails use document.createEvent Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/5f9e150f Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/5f9e150f Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/5f9e150f Branch: refs/heads/develop Commit: 5f9e150f8705f527c720de6f42897eda999b3975 Parents: e54023e Author: piotrz <pio...@apache.org> Authored: Tue Jan 17 19:56:39 2017 +0100 Committer: piotrz <pio...@apache.org> Committed: Tue Jan 17 19:56:39 2017 +0100 ---------------------------------------------------------------------- .../org/apache/flex/core/HTMLElementWrapper.as | 21 +++++--- .../projects/Core/src/main/flex/CoreClasses.as | 1 + .../flex/org/apache/flex/core/ElementWrapper.as | 21 +++++--- .../org/apache/flex/events/utils/EventUtils.as | 57 ++++++++++++++++++++ 4 files changed, 86 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f9e150f/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/HTMLElementWrapper.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/HTMLElementWrapper.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/HTMLElementWrapper.as index 57e4ce3..afb1f56 100644 --- a/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/HTMLElementWrapper.as +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/core/HTMLElementWrapper.as @@ -25,13 +25,13 @@ package org.apache.flex.core COMPILE::JS { - import window.Event; import org.apache.flex.events.Event; import org.apache.flex.events.BrowserEvent; import org.apache.flex.events.ElementEvents; import org.apache.flex.events.EventDispatcher; import goog.events; import goog.events.EventTarget; + import org.apache.flex.events.utils.EventUtils; } COMPILE::SWF @@ -244,20 +244,27 @@ package org.apache.flex.core override public function dispatchEvent(e:Object):Boolean { var t:String; - if (typeof(e) === 'string') { + if (typeof(e) === 'string') + { t = e as String; - if (e === 'change') - e = new window.Event(t); + if (e === org.apache.flex.events.Event.CHANGE) + { + e = EventUtils.createEvent(t); + } } - else { + else + { t = e.type; - if (ElementEvents.elementEvents[t]) { - e = new window.Event(t); + if (ElementEvents.elementEvents[t]) + { + e = EventUtils.createEvent(t); } } var source:Object = this.getActualDispatcher_(t); if (source == this) + { return super.dispatchEvent(e); + } return source.dispatchEvent(e); } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f9e150f/frameworks/projects/Core/src/main/flex/CoreClasses.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/CoreClasses.as b/frameworks/projects/Core/src/main/flex/CoreClasses.as index 4c97c06..acb6960 100644 --- a/frameworks/projects/Core/src/main/flex/CoreClasses.as +++ b/frameworks/projects/Core/src/main/flex/CoreClasses.as @@ -121,6 +121,7 @@ internal class CoreClasses import org.apache.flex.events.DetailEvent; DetailEvent; import org.apache.flex.events.ValueEvent; ValueEvent; import org.apache.flex.events.utils.MouseUtils; MouseUtils; + import org.apache.flex.events.utils.EventUtils; EventUtils; import org.apache.flex.geom.Matrix; Matrix; import org.apache.flex.geom.Point; Point; import org.apache.flex.geom.Rectangle; Rectangle; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f9e150f/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 dea4088..1667f01 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 @@ -20,7 +20,7 @@ package org.apache.flex.core { COMPILE::JS { - import window.Event; + import org.apache.flex.events.utils.EventUtils; import org.apache.flex.events.BrowserEvent; import org.apache.flex.events.ElementEvents; import goog.events; @@ -331,20 +331,27 @@ package org.apache.flex.core override public function dispatchEvent(e:Object):Boolean { var t:String; - if (typeof(e) === 'string') { + if (typeof(e) === 'string') + { t = e as String; - if (e === 'change') - e = new window.Event(t); + if (e === Event.CHANGE) + { + e = EventUtils.createEvent(t); + } } - else { + else + { t = e.type; - if (ElementEvents.elementEvents[t]) { - e = new window.Event(t); + if (ElementEvents.elementEvents[t]) + { + e = EventUtils.createEvent(t); } } var source:Object = this.getActualDispatcher_(t); if (source == this) + { return super.dispatchEvent(e); + } return source.dispatchEvent(e); } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/5f9e150f/frameworks/projects/Core/src/main/flex/org/apache/flex/events/utils/EventUtils.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/utils/EventUtils.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/utils/EventUtils.as new file mode 100644 index 0000000..4a9d36d --- /dev/null +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/utils/EventUtils.as @@ -0,0 +1,57 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.utils +{ + import org.apache.flex.events.Event; + + /** + * Provides static methods for creating custom events in JS + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class EventUtils + { + COMPILE::JS + public static function createEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false):Object + { + var customEvent:Object = null; + + try + { + customEvent = new window.Event(type, {bubbles: bubbles, cancelable: cancelable}); + return customEvent; + } + catch (e:Error) + { + + } + + if (!customEvent) + { + customEvent = document.createEvent("Event"); + customEvent.initEvent(type, bubbles, cancelable); + } + + return customEvent; + } + } +}