change way we handle event.target expressions. Now we wrap all events with a BrowserEvent. This probably needs revisiting again
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/b7f109fa Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/b7f109fa Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/b7f109fa Branch: refs/heads/develop Commit: b7f109fa3acfab85162852c1ed6625ef40fb1997 Parents: 24205c9 Author: Alex Harui <aha...@apache.org> Authored: Fri Apr 3 16:09:53 2015 -0700 Committer: Alex Harui <aha...@apache.org> Committed: Fri Apr 3 16:09:53 2015 -0700 ---------------------------------------------------------------------- .../org/apache/flex/core/HTMLElementWrapper.js | 34 ++++- .../src/org/apache/flex/events/BrowserEvent.js | 139 +++++++++++++++++++ .../src/org/apache/flex/events/DragEvent.js | 3 +- .../src/org/apache/flex/events/ElementEvents.js | 47 +++++++ .../FlexJS/src/org/apache/flex/events/Event.js | 22 --- .../org/apache/flex/events/EventDispatcher.js | 16 +-- 6 files changed, 223 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b7f109fa/frameworks/js/FlexJS/src/org/apache/flex/core/HTMLElementWrapper.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/core/HTMLElementWrapper.js b/frameworks/js/FlexJS/src/org/apache/flex/core/HTMLElementWrapper.js index 0b1d19d..01dbfdf 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/core/HTMLElementWrapper.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/core/HTMLElementWrapper.js @@ -16,6 +16,7 @@ goog.provide('org_apache_flex_core_HTMLElementWrapper'); goog.require('org_apache_flex_core_IBeadModel'); goog.require('org_apache_flex_core_IStrand'); +goog.require('org_apache_flex_events_BrowserEvent'); goog.require('org_apache_flex_events_EventDispatcher'); goog.require('org_apache_flex_utils_Language'); @@ -127,4 +128,35 @@ org_apache_flex_core_HTMLElementWrapper.prototype.removeBead = function(bead) { } return null; -}; \ No newline at end of file +}; + + +/** + * @type {function((goog.events.Listener|null), (Object|null)):boolean} + */ +org_apache_flex_core_HTMLElementWrapper.googFireListener = null; + +/** + * Fires a listener with a set of arguments + * + * @param {goog.events.Listener} listener The listener object to call. + * @param {Object} eventObject The event object to pass to the listener. + * @return {boolean} Result of listener. + */ +org_apache_flex_core_HTMLElementWrapper.fireListenerOverride = function(listener, eventObject) { + var e = new org_apache_flex_events_BrowserEvent(); + e.wrappedEvent = eventObject; + return org_apache_flex_core_HTMLElementWrapper.googFireListener(listener, e); +}; + + +org_apache_flex_core_HTMLElementWrapper.installOverride = function() { + org_apache_flex_core_HTMLElementWrapper.googFireListener = + goog.events.fireListener; + goog.events.fireListener = org_apache_flex_core_HTMLElementWrapper.fireListenerOverride; +}; + + +org_apache_flex_core_HTMLElementWrapper.installedOverride = + org_apache_flex_core_HTMLElementWrapper.installOverride(); + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b7f109fa/frameworks/js/FlexJS/src/org/apache/flex/events/BrowserEvent.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/events/BrowserEvent.js b/frameworks/js/FlexJS/src/org/apache/flex/events/BrowserEvent.js new file mode 100644 index 0000000..454c6ee --- /dev/null +++ b/frameworks/js/FlexJS/src/org/apache/flex/events/BrowserEvent.js @@ -0,0 +1,139 @@ +/** + * Licensed 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. + */ +goog.provide('org_apache_flex_events_BrowserEvent'); + +goog.require('goog.events.BrowserEvent'); +//goog.require('org_apache_flex_events_Event'); + + + +/** + * @constructor + * @extends {org_apache_flex_events_Event} + */ +org_apache_flex_events_BrowserEvent = function() { +// org_apache_flex_events_BrowserEvent.base(this, 'constructor'); + +}; +//goog.inherits(org_apache_flex_events_BrowserEvent, +// org_apache_flex_events_Event); + + +/** + * Metadata + * + * @type {Object.<string, Array.<Object>>} + */ +org_apache_flex_events_BrowserEvent.prototype.FLEXJS_CLASS_INFO = + { names: [{ name: 'BrowserEvent', + qName: 'org_apache_flex_events_BrowserEvent' }] }; + + +/** + * @type {?goog.events.BrowserEvent} + */ +org_apache_flex_events_BrowserEvent.prototype.wrappedEvent = null; + + +/** + */ +org_apache_flex_events_BrowserEvent.prototype.preventDefault = function() { + this.wrappedEvent.preventDefault(); +} + +Object.defineProperties(org_apache_flex_events_BrowserEvent.prototype, { + 'currentTarget': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + var o = this.wrappedEvent.currentTarget; + if (o.flexjs_wrapper) + return o.flexjs_wrapper; + return o; + } + }, + 'button': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.button; + } + }, + 'charCode': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.charCode; + } + }, + 'clientX': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.clientX; + } + }, + 'clientY': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.clientY; + } + }, + 'keyCode': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.keyCode; + } + }, + 'offsetX': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.offsetX; + } + }, + 'offsetY': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.offsetY; + } + }, + 'screenX': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.screenX; + } + }, + 'screenY': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + return this.wrappedEvent.screenY; + } + }, + 'relatedTarget': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + var o = this.wrappedEvent.relatedTarget; + if (o.flexjs_wrapper) + return o.flexjs_wrapper; + return o; + } + }, + 'target': { + /** @this {org_apache_flex_events_BrowserEvent} */ + get: function() { + var o = this.wrappedEvent.target; + if (o.flexjs_wrapper) + return o.flexjs_wrapper; + return o; + } + } +}); + + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b7f109fa/frameworks/js/FlexJS/src/org/apache/flex/events/DragEvent.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/events/DragEvent.js b/frameworks/js/FlexJS/src/org/apache/flex/events/DragEvent.js index a75791f..e33feda 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/events/DragEvent.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/events/DragEvent.js @@ -15,6 +15,7 @@ goog.provide('org_apache_flex_events_DragEvent'); goog.require('goog.events.BrowserEvent'); +goog.require('org_apache_flex_events_ElementEvents'); goog.require('org_apache_flex_events_EventDispatcher'); @@ -132,7 +133,7 @@ org_apache_flex_events_DragEvent.DRAG_DROP = 'dragDrop'; * @return {boolean} */ org_apache_flex_events_DragEvent.installDragEventMixin = function() { - var o = org_apache_flex_events_EventDispatcher.elementEvents; + var o = org_apache_flex_events_ElementEvents.elementEvents; o['dragEnd'] = 1; o['dragMove'] = 1; return true; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b7f109fa/frameworks/js/FlexJS/src/org/apache/flex/events/ElementEvents.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/events/ElementEvents.js b/frameworks/js/FlexJS/src/org/apache/flex/events/ElementEvents.js new file mode 100644 index 0000000..315b105 --- /dev/null +++ b/frameworks/js/FlexJS/src/org/apache/flex/events/ElementEvents.js @@ -0,0 +1,47 @@ +/** + * Licensed 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. + */ +goog.provide('org_apache_flex_events_ElementEvents'); + + + +/** + * @constructor + */ +org_apache_flex_events_ElementEvents = function() { +}; + + +/** + * Metadata + * + * @type {Object.<string, Array.<Object>>} + */ +org_apache_flex_events_ElementEvents.prototype.FLEXJS_CLASS_INFO = + { names: [{ name: 'ElementEvents', + qName: 'org_apache_flex_events_ElementEvents' }] }; + + +/** + * @type {Object} + */ +org_apache_flex_events_ElementEvents.elementEvents = { + 'mouseover': 1, + 'mouseout': 1, + 'mouseup': 1, + 'mousedown': 1, + 'mousemove': 1, + 'rollover': 1, + 'rollout': 1 +}; + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b7f109fa/frameworks/js/FlexJS/src/org/apache/flex/events/Event.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/events/Event.js b/frameworks/js/FlexJS/src/org/apache/flex/events/Event.js index 876c015..73ecdd0 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/events/Event.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/events/Event.js @@ -69,25 +69,3 @@ org_apache_flex_events_Event.prototype.type = ''; org_apache_flex_events_Event.prototype.init = function(type) { this.type = type; }; - - -Object.defineProperties(org_apache_flex_events_Event.prototype, { - 'type': { - /** @this {org_apache_flex_events_Event} */ - get: function() { - return this.type; - } - }, - 'target': { - /** @this {org_apache_flex_events_Event} */ - get: function() { - return this.target; - } - }, - 'currentTarget': { - /** @this {org_apache_flex_events_Event} */ - get: function() { - return this.currentTarget; - } - } -}); http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/b7f109fa/frameworks/js/FlexJS/src/org/apache/flex/events/EventDispatcher.js ---------------------------------------------------------------------- diff --git a/frameworks/js/FlexJS/src/org/apache/flex/events/EventDispatcher.js b/frameworks/js/FlexJS/src/org/apache/flex/events/EventDispatcher.js index e1e2fb7..9f66ef7 100644 --- a/frameworks/js/FlexJS/src/org/apache/flex/events/EventDispatcher.js +++ b/frameworks/js/FlexJS/src/org/apache/flex/events/EventDispatcher.js @@ -15,6 +15,7 @@ goog.provide('org_apache_flex_events_EventDispatcher'); goog.require('goog.events.EventTarget'); +goog.require('org_apache_flex_events_ElementEvents'); goog.require('org_apache_flex_events_IEventDispatcher'); @@ -59,7 +60,7 @@ org_apache_flex_events_EventDispatcher.prototype.addEventListener = this.element.nodeName.toLowerCase() !== 'div' && this.element.nodeName.toLowerCase() !== 'body') { source = this.element; - } else if (org_apache_flex_events_EventDispatcher.elementEvents[type]) { + } else if (org_apache_flex_events_ElementEvents.elementEvents[type]) { // mouse and keyboard events also dispatch off the element. source = this.element; } @@ -68,16 +69,3 @@ org_apache_flex_events_EventDispatcher.prototype.addEventListener = }; -/** - * @type {Object} - */ -org_apache_flex_events_EventDispatcher.elementEvents = { - 'mouseover': 1, - 'mouseout': 1, - 'mouseup': 1, - 'mousedown': 1, - 'mousemove': 1, - 'rollover': 1, - 'rollout': 1 -}; -