Home | History | Annotate | Download | only in front-end
      1 /*
      2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      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.
     12  *
     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.
     24  */
     25 
     26 WebInspector.Object = function() {
     27 }
     28 
     29 WebInspector.Object.prototype = {
     30     addEventListener: function(eventType, listener, thisObject) {
     31         if (!("_listeners" in this))
     32             this._listeners = {};
     33         if (!(eventType in this._listeners))
     34             this._listeners[eventType] = [];
     35         this._listeners[eventType].push({ thisObject: thisObject, listener: listener });
     36     },
     37 
     38     removeEventListener: function(eventType, listener, thisObject) {
     39         if (!("_listeners" in this) || !(eventType in this._listeners))
     40             return;
     41         var listeners = this._listeners[eventType];
     42         for (var i = 0; i < listeners.length; ++i) {
     43             if (listener && listeners[i].listener === listener && listeners[i].thisObject === thisObject)
     44                 listeners.splice(i, 1);
     45             else if (!listener && thisObject && listeners[i].thisObject === thisObject)
     46                 listeners.splice(i, 1);
     47         }
     48 
     49         if (!listeners.length)
     50             delete this._listeners[eventType];
     51     },
     52 
     53     dispatchEventToListeners: function(eventType) {
     54         if (!("_listeners" in this) || !(eventType in this._listeners))
     55             return;
     56 
     57         var stoppedPropagation = false;
     58 
     59         function stopPropagation()
     60         {
     61             stoppedPropagation = true;
     62         }
     63 
     64         function preventDefault()
     65         {
     66             this.defaultPrevented = true;
     67         }
     68 
     69         var event = {target: this, type: eventType, defaultPrevented: false};
     70         event.stopPropagation = stopPropagation;
     71         event.preventDefault = preventDefault;
     72 
     73         var listeners = this._listeners[eventType].slice(0);
     74         for (var i = 0; i < listeners.length; ++i) {
     75             listeners[i].listener.call(listeners[i].thisObject, event);
     76             if (stoppedPropagation)
     77                 break;
     78         }
     79 
     80         return event.defaultPrevented;
     81     }
     82 }
     83