aboutsummaryrefslogtreecommitdiff
path: root/node_modules/montage/core/event/event-manager.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/montage/core/event/event-manager.js')
-rwxr-xr-xnode_modules/montage/core/event/event-manager.js56
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
20var Montage = require("montage").Montage, 20var 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*/
84Montage.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*/
100Montage.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;