diff options
Diffstat (limited to 'node_modules/montage/core/event/event-manager.js')
-rwxr-xr-x | node_modules/montage/core/event/event-manager.js | 56 |
1 files changed, 46 insertions, 10 deletions
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 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | var Montage = require("montage").Montage, | 20 | var Montage = require("montage").Montage, |
21 | UUID = require("core/uuid"), | ||
21 | MutableEvent = require("core/event/mutable-event").MutableEvent, | 22 | MutableEvent = require("core/event/mutable-event").MutableEvent, |
22 | Serializer = require("core/serializer").Serializer, | 23 | Serializer = require("core/serializer").Serializer, |
23 | Deserializer = require("core/deserializer").Deserializer, | 24 | Deserializer = require("core/deserializer").Deserializer, |
@@ -73,6 +74,37 @@ Montage.defineProperty(Element.prototype, "controller", { | |||
73 | enumerable: false | 74 | enumerable: false |
74 | }); | 75 | }); |
75 | 76 | ||
77 | /** | ||
78 | Adds an event listener to the object. | ||
79 | @function external:Object#addEventListener | ||
80 | @param {string} type The event type to listen for. | ||
81 | @param {object | function} listener The listener object or function. | ||
82 | @param {boolean} useCapture Specifies whether to listen for the event during the bubble or capture phases. | ||
83 | */ | ||
84 | Montage.defineProperty(Object.prototype, "addEventListener", { | ||
85 | value: function addEventListener(type, listener, useCapture) { | ||
86 | if (listener) { | ||
87 | this.dispatchChangeEvent = true; | ||
88 | defaultEventManager.registerEventListener(this, type, listener, useCapture); | ||
89 | } | ||
90 | } | ||
91 | }); | ||
92 | |||
93 | /** | ||
94 | Removes an event listener from the object. | ||
95 | @function external:Object#removeEventListener | ||
96 | @param {string} type The event type. | ||
97 | @param {object | function} listener The listener object or function. | ||
98 | @param {boolean} useCapture The phase of the event listener. | ||
99 | */ | ||
100 | Montage.defineProperty(Object.prototype, "removeEventListener", { | ||
101 | value: function removeEventListener(type, listener, useCapture) { | ||
102 | if (listener) { | ||
103 | this.dispatchChangeEvent = true; | ||
104 | defaultEventManager.unregisterEventListener(this, type, listener, useCapture); | ||
105 | } | ||
106 | } | ||
107 | }); | ||
76 | 108 | ||
77 | /** | 109 | /** |
78 | @function external:Object#dispatchEvent | 110 | @function external:Object#dispatchEvent |
@@ -393,7 +425,7 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu | |||
393 | } | 425 | } |
394 | 426 | ||
395 | if (!aWindow.uuid || aWindow.uuid.length === 0) { | 427 | if (!aWindow.uuid || aWindow.uuid.length === 0) { |
396 | aWindow.uuid = Montage.generateUID(); | 428 | aWindow.uuid = UUID.generate(); |
397 | } | 429 | } |
398 | 430 | ||
399 | if (this._windowsAwaitingFinalRegistration[aWindow.uuid] === aWindow) { | 431 | if (this._windowsAwaitingFinalRegistration[aWindow.uuid] === aWindow) { |
@@ -448,15 +480,16 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu | |||
448 | && 'addEventListener' in window.HTMLElement.prototype | 480 | && 'addEventListener' in window.HTMLElement.prototype |
449 | && window.Components | 481 | && window.Components |
450 | && window.Components.interfaces) { | 482 | && window.Components.interfaces) { |
451 | var candidate; | 483 | var candidate, candidatePrototype; |
452 | for(candidate in Components.interfaces) { | 484 | for(candidate in Components.interfaces) { |
453 | if(candidate.match(/^nsIDOMHTML\w*Element$/)) { | 485 | if(candidate.match(/^nsIDOMHTML\w*Element$/)) { |
454 | candidate = candidate.replace(/^nsIDOM/, ''); | 486 | candidate = candidate.replace(/^nsIDOM/, ''); |
455 | if(candidate = window[candidate]) { | 487 | if(candidate = window[candidate]) { |
456 | candidate.prototype.nativeAddEventListener = candidate.prototype.addEventListener; | 488 | candidatePrototype = candidate.prototype; |
457 | candidate.prototype.addEventListener = Element.prototype.addEventListener; | 489 | candidatePrototype.nativeAddEventListener = candidatePrototype.addEventListener; |
458 | candidate.prototype.nativeRemoveEventListener = candidate.prototype.removeEventListener; | 490 | candidatePrototype.addEventListener = Element.prototype.addEventListener; |
459 | candidate.prototype.removeEventListener = Element.prototype.removeEventListener; | 491 | candidatePrototype.nativeRemoveEventListener = candidatePrototype.removeEventListener; |
492 | candidatePrototype.removeEventListener = Element.prototype.removeEventListener; | ||
460 | } | 493 | } |
461 | } | 494 | } |
462 | } | 495 | } |
@@ -787,6 +820,12 @@ var EventManager = exports.EventManager = Montage.create(Montage,/** @lends modu | |||
787 | }, | 820 | }, |
788 | 821 | ||
789 | 822 | ||
823 | _nonDelegateableEventTypes: { | ||
824 | enumerable: false, | ||
825 | distinct: true, | ||
826 | value: ["load", "resize", "message", "orientationchange", "beforeunload", "unload", | ||
827 | "dragenter", "dragleave", "drop", "dragover", "dragend"] | ||
828 | }, | ||
790 | 829 | ||
791 | /** | 830 | /** |
792 | 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. | 831 | 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 | |||
806 | // We install all native event listeners on the document, except for a few special event types | 845 | // We install all native event listeners on the document, except for a few special event types |
807 | // TODO this may be problematic for some events in some browsers, I'm afraid there will be too | 846 | // TODO this may be problematic for some events in some browsers, I'm afraid there will be too |
808 | // many exceptions to do this in a generic manner | 847 | // many exceptions to do this in a generic manner |
809 | var nonDelegateableEventTypes = ["load", "resize", "message", "orientationchange", | 848 | if ((/*isDocument*/!!target.defaultView) || this._nonDelegateableEventTypes.indexOf(eventType) >= 0) { |
810 | "beforeunload", "unload", "dragenter", "dragleave", "drop", "dragover", "dragend"]; | ||
811 | |||
812 | if ((/*isDocument*/!!target.defaultView) || nonDelegateableEventTypes.indexOf(eventType) >= 0) { | ||
813 | return target; | 849 | return target; |
814 | } else { | 850 | } else { |
815 | return /* isWindow*/target.screen ? target.document : target.ownerDocument; | 851 | return /* isWindow*/target.screen ? target.document : target.ownerDocument; |