From 13ae16997d4bbca14e255d5989d1c44a76eac72c Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Wed, 16 May 2012 15:23:48 -0700 Subject: montage v.0.10 integration Signed-off-by: Valerio Virgillito --- node_modules/montage/core/event/event-manager.js | 56 +++++++++++++++++++----- 1 file changed, 46 insertions(+), 10 deletions(-) (limited to 'node_modules/montage/core/event/event-manager.js') diff --git a/node_modules/montage/core/event/event-manager.js b/node_modules/montage/core/event/event-manager.js index d38b9755..9d7ae4e8 100755 --- a/node_modules/montage/core/event/event-manager.js +++ b/node_modules/montage/core/event/event-manager.js @@ -18,6 +18,7 @@ */ var Montage = require("montage").Montage, + UUID = require("core/uuid"), MutableEvent = require("core/event/mutable-event").MutableEvent, Serializer = require("core/serializer").Serializer, Deserializer = require("core/deserializer").Deserializer, @@ -73,6 +74,37 @@ Montage.defineProperty(Element.prototype, "controller", { enumerable: false }); +/** + Adds an event listener to the object. + @function external:Object#addEventListener + @param {string} type The event type to listen for. + @param {object | function} listener The listener object or function. + @param {boolean} useCapture Specifies whether to listen for the event during the bubble or capture phases. +*/ +Montage.defineProperty(Object.prototype, "addEventListener", { + value: function addEventListener(type, listener, useCapture) { + if (listener) { + this.dispatchChangeEvent = true; + defaultEventManager.registerEventListener(this, type, listener, useCapture); + } + } +}); + +/** + Removes an event listener from the object. + @function external:Object#removeEventListener + @param {string} type The event type. + @param {object | function} listener The listener object or function. + @param {boolean} useCapture The phase of the event listener. +*/ +Montage.defineProperty(Object.prototype, "removeEventListener", { + value: function removeEventListener(type, listener, useCapture) { + if (listener) { + this.dispatchChangeEvent = true; + defaultEventManager.unregisterEventListener(this, type, listener, useCapture); + } + } +}); /** @function external:Object#dispatchEvent @@ -393,7 +425,7 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu } if (!aWindow.uuid || aWindow.uuid.length === 0) { - aWindow.uuid = Montage.generateUID(); + aWindow.uuid = UUID.generate(); } if (this._windowsAwaitingFinalRegistration[aWindow.uuid] === aWindow) { @@ -448,15 +480,16 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu && 'addEventListener' in window.HTMLElement.prototype && window.Components && window.Components.interfaces) { - var candidate; + var candidate, candidatePrototype; for(candidate in Components.interfaces) { if(candidate.match(/^nsIDOMHTML\w*Element$/)) { candidate = candidate.replace(/^nsIDOM/, ''); if(candidate = window[candidate]) { - candidate.prototype.nativeAddEventListener = candidate.prototype.addEventListener; - candidate.prototype.addEventListener = Element.prototype.addEventListener; - candidate.prototype.nativeRemoveEventListener = candidate.prototype.removeEventListener; - candidate.prototype.removeEventListener = Element.prototype.removeEventListener; + candidatePrototype = candidate.prototype; + candidatePrototype.nativeAddEventListener = candidatePrototype.addEventListener; + candidatePrototype.addEventListener = Element.prototype.addEventListener; + candidatePrototype.nativeRemoveEventListener = candidatePrototype.removeEventListener; + candidatePrototype.removeEventListener = Element.prototype.removeEventListener; } } } @@ -787,6 +820,12 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu }, + _nonDelegateableEventTypes: { + enumerable: false, + distinct: true, + value: ["load", "resize", "message", "orientationchange", "beforeunload", "unload", + "dragenter", "dragleave", "drop", "dragover", "dragend"] + }, /** Determines the actual target to observe given a target and an eventType. This correctly decides whether to observe the element specified or to observe some other element to leverage event delegation. This should be consulted whenever starting or stopping the observation of a target for a given eventType. @@ -806,10 +845,7 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu // We install all native event listeners on the document, except for a few special event types // TODO this may be problematic for some events in some browsers, I'm afraid there will be too // many exceptions to do this in a generic manner - var nonDelegateableEventTypes = ["load", "resize", "message", "orientationchange", - "beforeunload", "unload", "dragenter", "dragleave", "drop", "dragover", "dragend"]; - - if ((/*isDocument*/!!target.defaultView) || nonDelegateableEventTypes.indexOf(eventType) >= 0) { + if ((/*isDocument*/!!target.defaultView) || this._nonDelegateableEventTypes.indexOf(eventType) >= 0) { return target; } else { return /* isWindow*/target.screen ? target.document : target.ownerDocument; -- cgit v1.2.3