| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js">Ext.require('Ext.util.DelayedTask', function() {
 
- <span id='Ext-util-Event'>    /**
 
- </span>     * Represents single event type that an Observable object listens to.
 
-      * All actual listeners are tracked inside here.  When the event fires,
 
-      * it calls all the registered listener functions.
 
-      *
 
-      * @private
 
-      */
 
-     Ext.util.Event = Ext.extend(Object, (function() {
 
-         var noOptions = {};
 
-         function createTargeted(handler, listener, o, scope){
 
-             return function(){
 
-                 if (o.target === arguments[0]){
 
-                     handler.apply(scope, arguments);
 
-                 }
 
-             };
 
-         }
 
-         function createBuffered(handler, listener, o, scope) {
 
-             listener.task = new Ext.util.DelayedTask();
 
-             return function() {
 
-                 listener.task.delay(o.buffer, handler, scope, Ext.Array.toArray(arguments));
 
-             };
 
-         }
 
-         function createDelayed(handler, listener, o, scope) {
 
-             return function() {
 
-                 var task = new Ext.util.DelayedTask();
 
-                 if (!listener.tasks) {
 
-                     listener.tasks = [];
 
-                 }
 
-                 listener.tasks.push(task);
 
-                 task.delay(o.delay || 10, handler, scope, Ext.Array.toArray(arguments));
 
-             };
 
-         }
 
-         function createSingle(handler, listener, o, scope) {
 
-             return function() {
 
-                 var event = listener.ev;
 
-                 if (event.removeListener(listener.fn, scope) && event.observable) {
 
-                     // Removing from a regular Observable-owned, named event (not an anonymous
 
-                     // event such as Ext's readyEvent): Decrement the listeners count
 
-                     event.observable.hasListeners[event.name]--;
 
-                 }
 
-                 return handler.apply(scope, arguments);
 
-             };
 
-         }
 
-         return {
 
- <span id='Ext-util-Event-property-isEvent'>            /**
 
- </span>             * @property {Boolean} isEvent
 
-              * `true` in this class to identify an object as an instantiated Event, or subclass thereof.
 
-              */
 
-             isEvent: true,
 
-             constructor: function(observable, name) {
 
-                 this.name = name;
 
-                 this.observable = observable;
 
-                 this.listeners = [];
 
-             },
 
-             addListener: function(fn, scope, options) {
 
-                 var me = this,
 
-                     listener;
 
-                     scope = scope || me.observable;
 
-                 //<debug error>
 
-                 if (!fn) {
 
-                     Ext.Error.raise({
 
-                         sourceClass: Ext.getClassName(this.observable),
 
-                         sourceMethod: "addListener",
 
-                         msg: "The specified callback function is undefined"
 
-                     });
 
-                 }
 
-                 //</debug>
 
-                 if (!me.isListening(fn, scope)) {
 
-                     listener = me.createListener(fn, scope, options);
 
-                     if (me.firing) {
 
-                         // if we are currently firing this event, don't disturb the listener loop
 
-                         me.listeners = me.listeners.slice(0);
 
-                     }
 
-                     me.listeners.push(listener);
 
-                 }
 
-             },
 
-             createListener: function(fn, scope, options) {
 
-                 options = options || noOptions;
 
-                 scope = scope || this.observable;
 
-                 var listener = {
 
-                         fn: fn,
 
-                         scope: scope,
 
-                         o: options,
 
-                         ev: this
 
-                     },
 
-                     handler = fn;
 
-                 // The order is important. The 'single' wrapper must be wrapped by the 'buffer' and 'delayed' wrapper
 
-                 // because the event removal that the single listener does destroys the listener's DelayedTask(s)
 
-                 if (options.single) {
 
-                     handler = createSingle(handler, listener, options, scope);
 
-                 }
 
-                 if (options.target) {
 
-                     handler = createTargeted(handler, listener, options, scope);
 
-                 }
 
-                 if (options.delay) {
 
-                     handler = createDelayed(handler, listener, options, scope);
 
-                 }
 
-                 if (options.buffer) {
 
-                     handler = createBuffered(handler, listener, options, scope);
 
-                 }
 
-                 listener.fireFn = handler;
 
-                 return listener;
 
-             },
 
-             findListener: function(fn, scope) {
 
-                 var listeners = this.listeners,
 
-                 i = listeners.length,
 
-                 listener,
 
-                 s;
 
-                 while (i--) {
 
-                     listener = listeners[i];
 
-                     if (listener) {
 
-                         s = listener.scope;
 
-                         // Compare the listener's scope with *JUST THE PASSED SCOPE* if one is passed, and only fall back to the owning Observable if none is passed.
 
-                         // We cannot use the test (s == scope || s == this.observable)
 
-                         // Otherwise, if the Observable itself adds Ext.emptyFn as a listener, and then Ext.emptyFn is added under another scope, there will be a false match.
 
-                         if (listener.fn == fn && (s == (scope || this.observable))) {
 
-                             return i;
 
-                         }
 
-                     }
 
-                 }
 
-                 return - 1;
 
-             },
 
-             isListening: function(fn, scope) {
 
-                 return this.findListener(fn, scope) !== -1;
 
-             },
 
-             removeListener: function(fn, scope) {
 
-                 var me = this,
 
-                     index,
 
-                     listener,
 
-                     k;
 
-                 index = me.findListener(fn, scope);
 
-                 if (index != -1) {
 
-                     listener = me.listeners[index];
 
-                     if (me.firing) {
 
-                         me.listeners = me.listeners.slice(0);
 
-                     }
 
-                     // cancel and remove a buffered handler that hasn't fired yet
 
-                     if (listener.task) {
 
-                         listener.task.cancel();
 
-                         delete listener.task;
 
-                     }
 
-                     // cancel and remove all delayed handlers that haven't fired yet
 
-                     k = listener.tasks && listener.tasks.length;
 
-                     if (k) {
 
-                         while (k--) {
 
-                             listener.tasks[k].cancel();
 
-                         }
 
-                         delete listener.tasks;
 
-                     }
 
-                     // remove this listener from the listeners array
 
-                     Ext.Array.erase(me.listeners, index, 1);
 
-                     return true;
 
-                 }
 
-                 return false;
 
-             },
 
-             // Iterate to stop any buffered/delayed events
 
-             clearListeners: function() {
 
-                 var listeners = this.listeners,
 
-                     i = listeners.length;
 
-                 while (i--) {
 
-                     this.removeListener(listeners[i].fn, listeners[i].scope);
 
-                 }
 
-             },
 
-             fire: function() {
 
-                 var me = this,
 
-                     listeners = me.listeners,
 
-                     count = listeners.length,
 
-                     i,
 
-                     args,
 
-                     listener;
 
-                 if (count > 0) {
 
-                     me.firing = true;
 
-                     for (i = 0; i < count; i++) {
 
-                         listener = listeners[i];
 
-                         args = arguments.length ? Array.prototype.slice.call(arguments, 0) : [];
 
-                         if (listener.o) {
 
-                             args.push(listener.o);
 
-                         }
 
-                         if (listener && listener.fireFn.apply(listener.scope || me.observable, args) === false) {
 
-                             return (me.firing = false);
 
-                         }
 
-                     }
 
-                 }
 
-                 me.firing = false;
 
-                 return true;
 
-             }
 
-         };
 
-     }()));
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |