OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview This contains an implementation of the EventTarget interface | 6 * @fileoverview This contains an implementation of the EventTarget interface |
7 * as defined by DOM Level 2 Events. | 7 * as defined by DOM Level 2 Events. |
8 */ | 8 */ |
9 | 9 |
10 /** | 10 /** |
11 * @typedef {EventListener|function(!Event):*} | 11 * @typedef {EventListener|function(!Event):*} |
12 */ | 12 */ |
13 var EventListenerType; | 13 var EventListenerType; |
14 | 14 |
15 cr.define('cr', function() { | 15 cr.define('cr', function() { |
16 | 16 |
17 /** | 17 /** |
18 * Creates a new EventTarget. This class implements the DOM level 2 | 18 * Creates a new EventTarget. This class implements the DOM level 2 |
19 * EventTarget interface and can be used wherever those are used. | 19 * EventTarget interface and can be used wherever those are used. |
20 * @constructor | 20 * @constructor |
21 * @implements {EventTarget} | 21 * @implements {EventTarget} |
22 */ | 22 */ |
23 function EventTarget() { | 23 function EventTarget() {} |
24 } | |
25 | 24 |
26 EventTarget.prototype = { | 25 EventTarget.prototype = { |
27 /** | 26 /** |
28 * Adds an event listener to the target. | 27 * Adds an event listener to the target. |
29 * @param {string} type The name of the event. | 28 * @param {string} type The name of the event. |
30 * @param {EventListenerType} handler The handler for the event. This is | 29 * @param {EventListenerType} handler The handler for the event. This is |
31 * called when the event is dispatched. | 30 * called when the event is dispatched. |
32 */ | 31 */ |
33 addEventListener: function(type, handler) { | 32 addEventListener: function(type, handler) { |
34 if (!this.listeners_) | 33 if (!this.listeners_) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 * @return {boolean} Whether the default action was prevented. If someone | 69 * @return {boolean} Whether the default action was prevented. If someone |
71 * calls preventDefault on the event object then this returns false. | 70 * calls preventDefault on the event object then this returns false. |
72 */ | 71 */ |
73 dispatchEvent: function(event) { | 72 dispatchEvent: function(event) { |
74 if (!this.listeners_) | 73 if (!this.listeners_) |
75 return true; | 74 return true; |
76 | 75 |
77 // Since we are using DOM Event objects we need to override some of the | 76 // Since we are using DOM Event objects we need to override some of the |
78 // properties and methods so that we can emulate this correctly. | 77 // properties and methods so that we can emulate this correctly. |
79 var self = this; | 78 var self = this; |
80 event.__defineGetter__('target', function() { | 79 event.__defineGetter__('target', function() { return self; }); |
81 return self; | |
82 }); | |
83 | 80 |
84 var type = event.type; | 81 var type = event.type; |
85 var prevented = 0; | 82 var prevented = 0; |
86 if (type in this.listeners_) { | 83 if (type in this.listeners_) { |
87 // Clone to prevent removal during dispatch | 84 // Clone to prevent removal during dispatch |
88 var handlers = this.listeners_[type].concat(); | 85 var handlers = this.listeners_[type].concat(); |
89 for (var i = 0, handler; handler = handlers[i]; i++) { | 86 for (var i = 0, handler; handler = handlers[i]; i++) { |
90 if (handler.handleEvent) | 87 if (handler.handleEvent) |
91 prevented |= handler.handleEvent.call(handler, event) === false; | 88 prevented |= handler.handleEvent.call(handler, event) === false; |
92 else | 89 else |
93 prevented |= handler.call(this, event) === false; | 90 prevented |= handler.call(this, event) === false; |
94 } | 91 } |
95 } | 92 } |
96 | 93 |
97 return !prevented && !event.defaultPrevented; | 94 return !prevented && !event.defaultPrevented; |
98 } | 95 } |
99 }; | 96 }; |
100 | 97 |
101 // Export | 98 // Export |
102 return { | 99 return {EventTarget: EventTarget}; |
103 EventTarget: EventTarget | |
104 }; | |
105 }); | 100 }); |
OLD | NEW |