2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 * @implements {WebInspector.EventTarget}
30 WebInspector.Object = function() {
33 WebInspector.Object.prototype = {
35 * @param {string} eventType
36 * @param {function(!WebInspector.Event)} listener
37 * @param {!Object=} thisObject
39 addEventListener: function(eventType, listener, thisObject)
42 console.assert(false);
46 if (!this._listeners[eventType])
47 this._listeners[eventType] = [];
48 this._listeners[eventType].push({ thisObject: thisObject, listener: listener });
52 * @param {string} eventType
53 * @param {function(!WebInspector.Event)} listener
54 * @param {!Object=} thisObject
56 removeEventListener: function(eventType, listener, thisObject)
58 console.assert(listener);
60 if (!this._listeners || !this._listeners[eventType])
62 var listeners = this._listeners[eventType];
63 for (var i = 0; i < listeners.length; ++i) {
64 if (listener && listeners[i].listener === listener && listeners[i].thisObject === thisObject)
65 listeners.splice(i, 1);
66 else if (!listener && thisObject && listeners[i].thisObject === thisObject)
67 listeners.splice(i, 1);
70 if (!listeners.length)
71 delete this._listeners[eventType];
74 removeAllListeners: function()
76 delete this._listeners;
80 * @param {string} eventType
83 hasEventListeners: function(eventType)
85 if (!this._listeners || !this._listeners[eventType])
91 * @param {string} eventType
92 * @param {*=} eventData
95 dispatchEventToListeners: function(eventType, eventData)
97 if (!this._listeners || !this._listeners[eventType])
100 var event = new WebInspector.Event(this, eventType, eventData);
101 var listeners = this._listeners[eventType].slice(0);
102 for (var i = 0; i < listeners.length; ++i) {
103 listeners[i].listener.call(listeners[i].thisObject, event);
104 if (event._stoppedPropagation)
108 return event.defaultPrevented;
114 * @param {!WebInspector.EventTarget} target
115 * @param {string} type
118 WebInspector.Event = function(target, type, data)
120 this.target = target;
123 this.defaultPrevented = false;
124 this._stoppedPropagation = false;
127 WebInspector.Event.prototype = {
128 stopPropagation: function()
130 this._stoppedPropagation = true;
133 preventDefault: function()
135 this.defaultPrevented = true;
139 * @param {boolean=} preventDefault
141 consume: function(preventDefault)
143 this.stopPropagation();
145 this.preventDefault();
152 WebInspector.EventTarget = function()
156 WebInspector.EventTarget.prototype = {
158 * @param {string} eventType
159 * @param {function(!WebInspector.Event)} listener
160 * @param {!Object=} thisObject
162 addEventListener: function(eventType, listener, thisObject) { },
165 * @param {string} eventType
166 * @param {function(!WebInspector.Event)} listener
167 * @param {!Object=} thisObject
169 removeEventListener: function(eventType, listener, thisObject) { },
171 removeAllListeners: function() { },
174 * @param {string} eventType
177 hasEventListeners: function(eventType) { },
180 * @param {string} eventType
181 * @param {*=} eventData
184 dispatchEventToListeners: function(eventType, eventData) { },