18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All Rights Reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.Object = function() { 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.Object.prototype = { 30ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block addEventListener: function(eventType, listener, thisObject) 31ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block { 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!("_listeners" in this)) 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._listeners = {}; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!(eventType in this._listeners)) 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._listeners[eventType] = []; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this._listeners[eventType].push({ thisObject: thisObject, listener: listener }); 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block removeEventListener: function(eventType, listener, thisObject) 40ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block { 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!("_listeners" in this) || !(eventType in this._listeners)) 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var listeners = this._listeners[eventType]; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = 0; i < listeners.length; ++i) { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (listener && listeners[i].listener === listener && listeners[i].thisObject === thisObject) 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project listeners.splice(i, 1); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (!listener && thisObject && listeners[i].thisObject === thisObject) 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project listeners.splice(i, 1); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!listeners.length) 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this._listeners[eventType]; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }, 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block removeAllListeners: function() 56ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block { 57ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block delete this._listeners; 58ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block }, 59ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch hasEventListeners: function(eventType) 612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!("_listeners" in this) || !(eventType in this._listeners)) 632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return true; 652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch }, 662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 67ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block dispatchEventToListeners: function(eventType, eventData) 68ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block { 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!("_listeners" in this) || !(eventType in this._listeners)) 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var stoppedPropagation = false; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function stopPropagation() 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stoppedPropagation = true; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function preventDefault() 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.defaultPrevented = true; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke var event = {target: this, type: eventType, data: eventData, defaultPrevented: false}; 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block event.stopPropagation = stopPropagation; 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block event.preventDefault = preventDefault; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block var listeners = this._listeners[eventType].slice(0); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i = 0; i < listeners.length; ++i) { 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project listeners[i].listener.call(listeners[i].thisObject, event); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (stoppedPropagation) 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return event.defaultPrevented; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 98