src/cm/media/js/lib/yui/yui_3.0.0b1/build/event/event-debug.js
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0b1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
 * DOM event listener abstraction layer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
 * @module event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
// Unlike most of the library, this code has to be executed as soon as it is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
// introduced into the page -- and it should only be executed one time
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
// regardless of the number of instances that use it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
var GLOBAL_ENV = YUI.Env, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
    C = YUI.config, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    D = C.doc, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    POLL_INTERVAL = C.pollInterval || 40,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    _ready = function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        GLOBAL_ENV._ready();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
    if (!GLOBAL_ENV._ready) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        GLOBAL_ENV._ready = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
            if (!GLOBAL_ENV.DOMReady) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
                GLOBAL_ENV.DOMReady=true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
                // Remove the DOMContentLoaded (FF/Opera/Safari)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
                if (D.removeEventListener) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
                    D.removeEventListener("DOMContentLoaded", _ready, false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        // create custom event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        // Internet Explorer: use the readyState of a defered script.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        // This isolates what appears to be a safe moment to manipulate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        // the DOM prior to when the document's readyState suggests
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        // it is safe to do so.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        if (navigator.userAgent.match(/MSIE/)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
            GLOBAL_ENV._dri = setInterval(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
                try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
                    // throws an error if doc is not ready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
                    document.documentElement.doScroll('left');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
                    clearInterval(GLOBAL_ENV._dri);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
                    GLOBAL_ENV._dri = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
                    _ready();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
                } catch (ex) { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
            }, POLL_INTERVAL); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        // FireFox, Opera, Safari 3+: These browsers provide a event for this
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        // moment.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
            D.addEventListener("DOMContentLoaded", _ready, false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        /////////////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
YUI.add('event', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
 * DOM event listener abstraction layer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
 * @module event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
var GLOBAL_ENV = YUI.Env,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
    adapt = Y.Env.evt.plugins,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
    yready = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
        Y.fire('domready');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
Y.mix(adapt, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
     * Executes the supplied callback when the DOM is first usable.  This
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
     * will execute immediately if called after the DOMReady event has
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
     * fired.   @todo the DOMContentReady event does not fire when the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
     * script is dynamically injected into the page.  This means the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
     * DOMReady custom event will never fire in FireFox or Opera when the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
     * library is injected.  It _will_ fire in Safari, and the IE 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
     * implementation would allow for us to fire it if the defered script
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
     * is not available.  We want this to behave the same in all browsers.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
     * Is there a way to identify when the script has been injected 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
     * instead of included inline?  Is there a way to know whether the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
     * window onload event has fired without having had a listener attached 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
     * to it when it did so?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
     * <p>The callback is a Event.Custom, so the signature is:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
     * <p>type &lt;string&gt;, args &lt;array&gt;, customobject &lt;object&gt;</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
     * <p>For DOMReady events, there are no fire argments, so the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
     * signature is:</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
     * <p>"DOMReady", [], obj</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
     * @event domready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
     * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
     * @param {function} fn what to execute when the element is found.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
     * @optional context execution context
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
     * @optional args 0..n arguments to send to the listener
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
    domready: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
     * Use domready event instead. @see domready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
     * @event event:ready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
     * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
     * @deprecated use 'domready' instead
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
    'event:ready': {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
        on: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
            var a = Y.Array(arguments, 0, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
            a[0] = 'domready';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
            return Y.subscribe.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        detach: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
            var a = Y.Array(arguments, 0, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
            a[0] = 'domready';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
            return Y.unsubscribe.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
Y.publish('domready', {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
    fireOnce: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
if (GLOBAL_ENV.DOMReady) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
    // console.log('DOMReady already fired', 'info', 'event');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
    yready();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
} else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
    // console.log('setting up before listener', 'info', 'event');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
    // console.log('env: ' + YUI.Env.windowLoaded, 'info', 'event');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
    Y.before(yready, GLOBAL_ENV, "_ready");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
 * events.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
 * @module event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
 * Wraps a DOM event, properties requiring browser abstraction are
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
 * fixed here.  Provids a security layer when required.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
 * @class DOMEventFacade
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
 * @param ev {Event} the DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
 * @param currentTarget {HTMLElement} the element the listener was attached to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
 * @param wrapper {Event.Custom} the custom event wrapper for this DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
 * @TODO constants? LEFTBUTTON, MIDDLEBUTTON, RIGHTBUTTON, keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
var whitelist = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
    altKey          : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
    // "button"          : 1, // we supply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
    // "bubbles"         : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
    // "cancelable"      : 1, // needed? 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
    // "charCode"        : 1, // we supply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
    cancelBubble    : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
    // "currentTarget"   : 1, // we supply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
    ctrlKey         : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
    clientX         : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
    clientY         : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
    detail          : 1, // not fully implemented
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
    // "fromElement"     : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
    keyCode         : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
    // "height"          : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
    // "initEvent"       : 1, // need the init events?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
    // "initMouseEvent"  : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
    // "initUIEvent"     : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
    // "layerX"          : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
    // "layerY"          : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
    metaKey         : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
    // "modifiers"       : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
    // "offsetX"         : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
    // "offsetY"         : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
    // "preventDefault"  : 1, // we supply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
    // "reason"          : 1, // IE proprietary
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
    // "relatedTarget"   : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
    // "returnValue"     : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
    shiftKey        : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
    // "srcUrn"          : 1, // IE proprietary
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
    // "srcElement"      : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
    // "srcFilter"       : 1, IE proprietary
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
    // "stopPropagation" : 1, // we supply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
    // "target"          : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
    // "timeStamp"       : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
    // "toElement"       : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
    type            : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
    // "view"            : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
    // "which"           : 1, // we supply
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
    // "width"           : 1, // needed?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
    x               : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
    y               : 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
    var ua = Y.UA,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
     * webkit key remapping required for Safari < 3.1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
     * @property webkitKeymap
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
    webkitKeymap = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
        63232: 38, // up
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
        63233: 40, // down
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
        63234: 37, // left
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        63235: 39, // right
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
        63276: 33, // page up
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        63277: 34, // page down
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
        25: 9      // SHIFT-TAB (Safari provides a different key code in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
                   // this case, even though the shiftKey modifier is set)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
     * Returns a wrapped node.  Intended to be used on event targets,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
     * so it will return the node's parent if the target is a text
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
     * node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
     * @method resolve
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
    resolve = function(n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
        if (!n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
            return null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
        try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
            if (ua.webkit && 3 == n.nodeType) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
                n = n.parentNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
            } 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
        } catch(ex) { }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
        return Y.Node.get(n);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
// provide a single event with browser abstractions resolved
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
//
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
// include all properties for both browers?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
// include only DOM2 spec properties?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
// provide browser-specific facade?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
Y.DOMEventFacade = function(ev, currentTarget, wrapper) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
    var e = ev, ot = currentTarget, d = Y.config.doc, b = d.body,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
        x = e.pageX, y = e.pageY, c, t;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
    this.altKey   = e.altKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
    this.ctrlKey  = e.ctrlKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
    this.metaKey  = e.metaKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
    this.shiftKey = e.shiftKey;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
    this.type     = e.type;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
    //////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
    if (!x && 0 !== x) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
        x = e.clientX || 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
        y = e.clientY || 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
        if (ua.ie) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
            x += Math.max(d.documentElement.scrollLeft, b.scrollLeft);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
            y += Math.max(d.documentElement.scrollTop, b.scrollTop);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
    this._yuifacade = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
     * The X location of the event on the page (including scroll)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
     * @property pageX
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
     * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
    this.pageX = x;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
     * The Y location of the event on the page (including scroll)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
     * @property pageY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
     * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
    this.pageY = y;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
    //////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
    c = e.keyCode || e.charCode || 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
    if (ua.webkit && (c in webkitKeymap)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
        c = webkitKeymap[c];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
     * The keyCode for key events.  Uses charCode if keyCode is not available
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
     * @property keyCode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
     * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
    this.keyCode = c;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
     * The charCode for key events.  Same as keyCode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
     * @property charCode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
     * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
    this.charCode = c;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
    //////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
     * The button that was pushed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
     * @property button
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
     * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
    this.button = e.which || e.button;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
     * The button that was pushed.  Same as button.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
     * @property which
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
     * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
    this.which = this.button;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
    //////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
     * Node reference for the targeted element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
     * @propery target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
     * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
    this.target = resolve(e.target || e.srcElement);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
     * Node reference for the element that the listener was attached to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
     * @propery currentTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
     * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
    this.currentTarget = resolve(ot);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
    t = e.relatedTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
    if (!t) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
        if (e.type == "mouseout") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
            t = e.toElement;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
        } else if (e.type == "mouseover") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
            t = e.fromElement;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
     * Node reference to the relatedTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
     * @propery relatedTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
     * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
    this.relatedTarget = resolve(t);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
    //////////////////////////////////////////////////////
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
    // methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
     * Stops the propagation to the next bubble target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
     * @method stopPropagation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
    this.stopPropagation = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
        if (e.stopPropagation) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
            e.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
            e.cancelBubble = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
        if (wrapper) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
            wrapper.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
     * Stops the propagation to the next bubble target and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
     * prevents any additional listeners from being exectued
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
     * on the current target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
     * @method stopImmediatePropagation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
    this.stopImmediatePropagation = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
        if (e.stopImmediatePropagation) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
            e.stopImmediatePropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
            this.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
        if (wrapper) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
            wrapper.stopImmediatePropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
     * Prevents the event's default behavior
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
     * @method preventDefault
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
    this.preventDefault = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
        if (e.preventDefault) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
            e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
            e.returnValue = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
        if (wrapper) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
            wrapper.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
     * Stops the event propagation and prevents the default
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
     * event behavior.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
     * @method halt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
     * @param immediate {boolean} if true additional listeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
     * on the current target will not be executed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
    this.halt = function(immediate) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
        if (immediate) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
            this.stopImmediatePropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
            this.stopPropagation();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
        this.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
 * DOM event listener abstraction layer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
 * @module event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
 * The event utility provides functions to add and remove event listeners,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
 * event cleansing.  It also tries to automatically remove listeners it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
 * registers during the unload event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
 * @class Event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
 * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
var add = YUI.Env.add,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
remove = YUI.Env.remove,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
onLoad = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
    YUI.Env.windowLoaded = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
    Y.Event._load();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
    remove(window, "load", onLoad);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
onUnload = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
    Y.Event._unload();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
    remove(window, "unload", onUnload);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   492
EVENT_READY = 'domready',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
COMPAT_ARG = '~yui|2|compat~',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   495
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   496
shouldIterate = function(o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   497
    try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   498
         
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   499
        // Y.log('node? ' + (o instanceof Y.Node) + ', ' + ((o.size) ? o.size() : ' no size'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   500
        // if (o instanceof Y.Node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   501
            // o.tagName ="adsf";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   502
        // }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   503
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
        return ( o                     && // o is something
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   505
                 typeof o !== "string" && // o is not a string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   506
                 // o.length  && // o is indexed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   507
                 (o.length && ((!o.size) || (o.size() > 1)))  && // o is indexed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   508
                 !o.tagName            && // o is not an HTML element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   509
                 !o.alert              && // o is not a window
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   510
                 (o.item || typeof o[0] !== "undefined") );
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   511
    } catch(ex) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   512
        Y.log("collection check failure", "warn", "event");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   513
        return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   514
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   515
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   516
},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   517
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   518
Event = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   519
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   520
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   521
     * True after the onload event has fired
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   522
     * @property _loadComplete
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   523
     * @type boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   524
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   525
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   526
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   527
    var _loadComplete =  false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   528
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   529
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   530
     * The number of times to poll after window.onload.  This number is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   531
     * increased if additional late-bound handlers are requested after
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
     * the page load.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   533
     * @property _retryCount
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   535
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   536
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   537
    _retryCount = 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   538
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   539
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   540
     * onAvailable listeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   541
     * @property _avail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   542
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   543
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   544
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   545
    _avail = [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   546
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   547
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   548
     * Custom event wrappers for DOM events.  Key is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
     * 'event:' + Element uid stamp + event type
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   550
     * @property _wrappers
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   551
     * @type Y.Event.Custom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   552
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   553
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   554
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   555
    _wrappers = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   556
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   557
    _windowLoadKey = null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   558
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   559
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   560
     * Custom event wrapper map DOM events.  Key is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
     * Element uid stamp.  Each item is a hash of custom event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
     * wrappers as provided in the _wrappers collection.  This
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563
     * provides the infrastructure for getListeners.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   564
     * @property _el_events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   565
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   566
     * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   567
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   568
    _el_events = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   569
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   570
    return {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   571
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   572
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   573
         * The number of times we should look for elements that are not
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   574
         * in the DOM at the time the event is requested after the document
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   575
         * has been loaded.  The default is 2000@amp;20 ms, so it will poll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   576
         * for 40 seconds or until all outstanding handlers are bound
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   577
         * (whichever comes first).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   578
         * @property POLL_RETRYS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   579
         * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   580
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   581
         * @final
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   582
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   583
        POLL_RETRYS: 1000,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   584
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   585
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   586
         * The poll interval in milliseconds
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   587
         * @property POLL_INTERVAL
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   588
         * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   589
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   590
         * @final
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   591
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   592
        POLL_INTERVAL: 40,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   593
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   594
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   595
         * addListener/removeListener can throw errors in unexpected scenarios.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   596
         * These errors are suppressed, the method returns false, and this property
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   597
         * is set
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   598
         * @property lastError
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   599
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   600
         * @type Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   601
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   602
        lastError: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   603
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   604
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   605
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   606
         * poll handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   607
         * @property _interval
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   608
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   609
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   610
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   611
        _interval: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   612
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   613
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   614
         * document readystate poll handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   615
         * @property _dri
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   616
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   617
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   618
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   619
         _dri: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   620
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   621
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   622
         * True when the document is initially usable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   623
         * @property DOMReady
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   624
         * @type boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   625
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   626
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   627
        DOMReady: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   628
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   629
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   630
         * @method startInterval
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   631
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   632
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   633
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   634
        startInterval: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   635
            var E = Y.Event;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   636
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   637
            if (!E._interval) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   638
E._interval = setInterval(Y.bind(E._poll, E), E.POLL_INTERVAL);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   639
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   640
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   641
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   642
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   643
         * Executes the supplied callback when the item with the supplied
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   644
         * id is found.  This is meant to be used to execute behavior as
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   645
         * soon as possible as the page loads.  If you use this after the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   646
         * initial page load it will poll for a fixed time for the element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   647
         * The number of times it will poll and the frequency are
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   648
         * configurable.  By default it will poll for 10 seconds.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   649
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   650
         * <p>The callback is executed with a single parameter:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   651
         * the custom object parameter, if provided.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   652
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   653
         * @method onAvailable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   654
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   655
         * @param {string||string[]}   id the id of the element, or an array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   656
         * of ids to look for.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   657
         * @param {function} fn what to execute when the element is found.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   658
         * @param {object}   p_obj an optional object to be passed back as
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   659
         *                   a parameter to fn.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   660
         * @param {boolean|object}  p_override If set to true, fn will execute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   661
         *                   in the context of p_obj, if set to an object it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   662
         *                   will execute in the context of that object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   663
         * @param checkContent {boolean} check child node readiness (onContentReady)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   664
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   665
         * @deprecated Use Y.on("available")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   666
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   667
        // @TODO fix arguments
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   668
        onAvailable: function(id, fn, p_obj, p_override, checkContent, compat) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   669
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   670
            var a = Y.Array(id), i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   671
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   672
            // Y.log('onAvailable registered for: ' + id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   673
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   674
            for (i=0; i<a.length; i=i+1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   675
                _avail.push({ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   676
                    id:         a[i], 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   677
                    fn:         fn, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   678
                    obj:        p_obj, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   679
                    override:   p_override, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   680
                    checkReady: checkContent,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   681
                    compat:     compat 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   682
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   683
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   684
            _retryCount = this.POLL_RETRYS;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   685
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   686
            // We want the first test to be immediate, but async
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   687
            setTimeout(Y.bind(Y.Event._poll, Y.Event), 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   688
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   689
            return new Y.EventHandle(); // @TODO by id needs a defered handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   690
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   691
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   692
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   693
         * Works the same way as onAvailable, but additionally checks the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   694
         * state of sibling elements to determine if the content of the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   695
         * available element is safe to modify.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   696
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   697
         * <p>The callback is executed with a single parameter:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   698
         * the custom object parameter, if provided.</p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   699
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   700
         * @method onContentReady
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   701
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   702
         * @param {string}   id the id of the element to look for.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   703
         * @param {function} fn what to execute when the element is ready.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   704
         * @param {object}   p_obj an optional object to be passed back as
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   705
         *                   a parameter to fn.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   706
         * @param {boolean|object}  p_override If set to true, fn will execute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   707
         *                   in the context of p_obj.  If an object, fn will
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   708
         *                   exectute in the context of that object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   709
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   710
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   711
         * @deprecated Use Y.on("contentready")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   712
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   713
        // @TODO fix arguments
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   714
        onContentReady: function(id, fn, p_obj, p_override, compat) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   715
            return this.onAvailable(id, fn, p_obj, p_override, true, compat);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   716
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   717
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   718
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   719
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   720
         * Appends an event handler
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   721
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   722
         * @method attach
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   723
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   724
         * @param {String}   type     The type of event to append
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   725
         * @param {Function} fn        The method the event invokes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   726
         * @param {String|HTMLElement|Array|NodeList} el An id, an element 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   727
         *  reference, or a collection of ids and/or elements to assign the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   728
         *  listener to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   729
         * @param {Object}   obj    An arbitrary object that will be 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   730
         *                             passed as a parameter to the handler
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   731
         * @param {Boolean|object}  args 0..n arguments to pass to the callback
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   732
         * @return {Boolean} True if the action was successful or defered,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   733
         *                        false if one or more of the elements 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   734
         *                        could not have the listener attached,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   735
         *                        or if the operation throws an exception.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   736
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   737
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   738
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   739
        attach: function(type, fn, el, obj) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   740
            return Y.Event._attach(Y.Array(arguments, 0, true));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   741
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   742
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   743
		_createWrapper: function (el, type, capture, compat, facade) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   744
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   745
            var ek = Y.stamp(el),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   746
	            key = 'event:' + ek + type,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   747
	            cewrapper;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   748
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   749
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   750
            if (false === facade) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   751
                key += 'native';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   752
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   753
            if (capture) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   754
                key += 'capture';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   755
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   756
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   757
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   758
            cewrapper = _wrappers[key];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   759
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   760
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   761
            if (!cewrapper) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   762
                // create CE wrapper
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   763
                cewrapper = Y.publish(key, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   764
                    //silent: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   765
                    // host: this,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   766
                    bubbles: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   767
                    contextFn: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   768
                        cewrapper.nodeRef = cewrapper.nodeRef || Y.get(cewrapper.el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   769
                        return cewrapper.nodeRef;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   770
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   771
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   772
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   773
                // for later removeListener calls
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   774
                cewrapper.el = el;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   775
                cewrapper.type = type;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   776
                cewrapper.fn = function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   777
                    cewrapper.fire(Y.Event.getEvent(e, el, (compat || (false === facade))));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   778
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   779
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   780
                if (el == Y.config.win && type == "load") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   781
                    // window load happens once
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   782
                    cewrapper.fireOnce = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   783
                    _windowLoadKey = key;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   784
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   785
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   786
                _wrappers[key] = cewrapper;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   787
                _el_events[ek] = _el_events[ek] || {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   788
                _el_events[ek][key] = cewrapper;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   789
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   790
                add(el, type, cewrapper.fn, capture);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   791
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   792
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   793
			return cewrapper;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   794
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   795
		},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   796
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   797
        _attach: function(args, config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   798
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   799
            var trimmedArgs=args.slice(1),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   800
                compat, E=Y.Event,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   801
                handles, oEl, cewrapper, context, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   802
                fireNow = false, ret,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   803
                type = args[0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   804
                fn = args[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   805
                el = args[2] || Y.config.win,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   806
                facade = config && config.facade,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   807
                capture = config && config.capture;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   808
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   809
            if (trimmedArgs[trimmedArgs.length-1] === COMPAT_ARG) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   810
                compat = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   811
                trimmedArgs.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   812
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   813
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   814
            if (!fn || !fn.call) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   815
// throw new TypeError(type + " attach call failed, callback undefined");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   816
Y.log(type + " attach call failed, invalid callback", "error", "event");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   817
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   818
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   819
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   820
            // The el argument can be an array of elements or element ids.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   821
            if (shouldIterate(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   822
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   823
                // Y.log('collection: ' + el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   824
                // Y.log('collection: ' + el.item(0) + ', ' + el.item(1));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   825
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   826
                handles=[];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   827
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   828
                Y.each(el, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   829
                    args[2] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   830
                    handles.push(E._attach(args, config));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   831
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   832
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   833
                return (handles.length === 1) ? handles[0] : handles;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   834
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   835
            // If the el argument is a string, we assume it is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   836
            // actually the id of the element.  If the page is loaded
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   837
            // we convert el to the actual element, otherwise we 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   838
            // defer attaching the event until the element is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   839
            // ready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   840
            } else if (Y.Lang.isString(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   841
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   842
                // @TODO switch to using DOM directly here
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   843
                // oEl = (compat) ? Y.DOM.byId(el) : Y.all(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   844
                oEl = (compat) ? Y.DOM.byId(el) : Y.Selector.query(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   845
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   846
                if (oEl) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   847
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   848
                    if (Y.Lang.isArray(oEl)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   849
                        if (oEl.length == 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   850
                            el = oEl[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   851
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   852
                            args[2] = oEl;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   853
                            return E._attach(args, config);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   854
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   855
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   856
                    // HTMLElement
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   857
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   858
                        // Y.log('no size: ' + oEl + ', ' + type);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   859
                        el = oEl;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   860
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   861
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   862
                // Not found = defer adding the event until the element is available
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   863
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   864
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   865
                    // Y.log(el + ' not found');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   866
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   867
                    return this.onAvailable(el, function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   868
                        // Y.log('lazy attach: ' + args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   869
                        E._attach(args, config);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   870
                    }, E, true, false, compat);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   871
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   872
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   873
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   874
            // Element should be an html element or an array if we get here.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   875
            if (!el) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   876
                Y.log("unable to attach event " + type, "warn", "event");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   877
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   878
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   879
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   880
            // the custom event key is the uid for the element + type
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   881
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   882
            // allow a node reference to Y.on to work with load time addEventListener check
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   883
            // (Node currently only has the addEventListener interface and that may be
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   884
            // removed).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   885
            if (Y.Node && el instanceof Y.Node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   886
                return el.on.apply(el, args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   887
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   888
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   889
 			cewrapper = this._createWrapper(el, type, capture, compat, facade);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   890
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   891
            if (el == Y.config.win && type == "load") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   892
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   893
                // if the load is complete, fire immediately.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   894
                // all subscribers, including the current one
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   895
                // will be notified.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   896
                if (YUI.Env.windowLoaded) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   897
                    fireNow = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   898
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   899
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   900
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   901
            // switched from obj to trimmedArgs[2] to deal with appened compat param
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   902
            // context = trimmedArgs[2] || ((compat) ? el : Y.get(el));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   903
            context = trimmedArgs[2];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   904
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   905
            // set the context as the second arg to subscribe
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   906
            trimmedArgs[1] = context;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   907
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   908
            // remove the 'obj' param
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   909
            trimmedArgs.splice(2, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   910
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   911
            // set context to the Node if not specified
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   912
            ret = cewrapper.subscribe.apply(cewrapper, trimmedArgs);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   913
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   914
            if (fireNow) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   915
                cewrapper.fire();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   916
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   917
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   918
            return ret;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   919
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   920
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   921
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   922
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   923
         * Removes an event listener.  Supports the signature the event was bound
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   924
         * with, but the preferred way to remove listeners is using the handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   925
         * that is returned when using Y.on
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   926
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   927
         * @method detach
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   928
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   929
         * @param {String|HTMLElement|Array|NodeList} el An id, an element 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   930
         *  reference, or a collection of ids and/or elements to remove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   931
         *  the listener from.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   932
         * @param {String} type the type of event to remove.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   933
         * @param {Function} fn the method the event invokes.  If fn is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   934
         *  undefined, then all event handlers for the type of event are *  removed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   935
         * @return {boolean} true if the unbind was successful, false *  otherwise.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   936
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   937
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   938
        detach: function(type, fn, el, obj) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   939
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   940
            var args=Y.Array(arguments, 0, true), compat, i, len, ok,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   941
                id, ce;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   942
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   943
            if (args[args.length-1] === COMPAT_ARG) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   944
                compat = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   945
                // args.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   946
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   947
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   948
            if (type && type.detach) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   949
                return type.detach();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   950
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   951
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   952
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   953
            // The el argument can be a string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   954
            if (typeof el == "string") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   955
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   956
                // el = (compat) ? Y.DOM.byId(el) : Y.all(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   957
                el = (compat) ? Y.DOM.byId(el) : Y.Selector.query(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   958
                return Y.Event.detach.apply(Y.Event, args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   959
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   960
            // The el argument can be an array of elements or element ids.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   961
            } else if (shouldIterate(el)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   962
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   963
                ok = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   964
                for (i=0, len=el.length; i<len; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   965
                    args[2] = el[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   966
                    ok = ( Y.Event.detach.apply(Y.Event, args) && ok );
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   967
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   968
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   969
                return ok;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   970
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   971
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   972
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   973
            if (!type || !fn || !fn.call) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   974
                return this.purgeElement(el, false, type);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   975
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   976
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   977
            id = 'event:' + Y.stamp(el) + type;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   978
            ce = _wrappers[id];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   979
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   980
            if (ce) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   981
                return ce.detach(fn);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   982
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   983
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   984
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   985
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   986
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   987
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   988
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   989
         * Finds the event in the window object, the caller's arguments, or
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   990
         * in the arguments of another method in the callstack.  This is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   991
         * executed automatically for events registered through the event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   992
         * manager, so the implementer should not normally need to execute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   993
         * this function at all.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   994
         * @method getEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   995
         * @param {Event} e the event parameter from the handler
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   996
         * @param {HTMLElement} el the element the listener was attached to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   997
         * @return {Event} the event 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   998
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   999
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1000
        getEvent: function(e, el, noFacade) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1001
            var ev = e || window.event;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1002
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1003
            return (noFacade) ? ev : 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1004
                new Y.DOMEventFacade(ev, el, _wrappers['event:' + Y.stamp(el) + e.type]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1005
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1006
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1007
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1008
         * Generates an unique ID for the element if it does not already 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1009
         * have one.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1010
         * @method generateId
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1011
         * @param el the element to create the id for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1012
         * @return {string} the resulting id of the element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1013
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1014
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1015
        generateId: function(el) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1016
            var id = el.id;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1017
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1018
            if (!id) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1019
                id = Y.stamp(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1020
                el.id = id;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1021
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1022
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1023
            return id;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1024
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1025
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1026
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1027
         * We want to be able to use getElementsByTagName as a collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1028
         * to attach a group of events to.  Unfortunately, different 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1029
         * browsers return different types of collections.  This function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1030
         * tests to determine if the object is array-like.  It will also 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1031
         * fail if the object is an array, but is empty.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1032
         * @method _isValidCollection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1033
         * @param o the object to test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1034
         * @return {boolean} true if the object is array-like and populated
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1035
         * @deprecated was not meant to be used directly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1036
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1037
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1038
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1039
        _isValidCollection: shouldIterate,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1040
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1041
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1042
         * hook up any deferred listeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1043
         * @method _load
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1044
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1045
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1046
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1047
        _load: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1048
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1049
            if (!_loadComplete) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1050
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1051
                // Y.log('Load Complete', 'info', 'event');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1052
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1053
                _loadComplete = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1054
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1055
                // Just in case DOMReady did not go off for some reason
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1056
                // E._ready();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1057
                if (Y.fire) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1058
                    Y.fire(EVENT_READY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1059
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1060
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1061
                // Available elements may not have been detected before the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1062
                // window load event fires. Try to find them now so that the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1063
                // the user is more likely to get the onAvailable notifications
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1064
                // before the window load notification
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1065
                Y.Event._poll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1066
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1067
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1068
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1069
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1070
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1071
         * Polling function that runs before the onload event fires, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1072
         * attempting to attach to DOM Nodes as soon as they are 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1073
         * available
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1074
         * @method _poll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1075
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1076
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1077
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1078
        _poll: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1079
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1080
            if (this.locked) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1081
                return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1082
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1083
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1084
            if (Y.UA.ie && !YUI.Env.DOMReady) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1085
                // Hold off if DOMReady has not fired and check current
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1086
                // readyState to protect against the IE operation aborted
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1087
                // issue.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1088
                this.startInterval();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1089
                return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1090
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1091
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1092
            this.locked = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1093
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1094
            // Y.log.debug("poll");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1095
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1096
            // keep trying until after the page is loaded.  We need to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1097
            // check the page load state prior to trying to bind the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1098
            // elements so that we can be certain all elements have been 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1099
            // tested appropriately
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1100
            var tryAgain = !_loadComplete, notAvail, executeItem,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1101
                i, len, item, el;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1103
            if (!tryAgain) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1104
                tryAgain = (_retryCount > 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1105
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1107
            // onAvailable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1108
            notAvail = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1109
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1110
            executeItem = function (el, item) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1111
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1112
                var context, ov = item.override;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1113
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1114
                if (item.compat) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1115
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1116
                    if (item.override) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1117
                        if (ov === true) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1118
                            context = item.obj;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1119
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1120
                            context = ov;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1121
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1122
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1123
                        context = el;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1124
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1125
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1126
                    item.fn.call(context, item.obj);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1127
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1128
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1129
                    context = item.obj || Y.get(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1130
                    item.fn.apply(context, (Y.Lang.isArray(ov)) ? ov : []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1131
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1132
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1133
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1134
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1135
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1136
            // onAvailable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1137
            for (i=0,len=_avail.length; i<len; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1138
                item = _avail[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1139
                if (item && !item.checkReady) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1140
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1141
                    // el = (item.compat) ? Y.DOM.byId(item.id) : Y.get(item.id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1142
                    el = (item.compat) ? Y.DOM.byId(item.id) : Y.Selector.query(item.id, null, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1144
                    if (el) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1145
                        // Y.log('avail: ' + el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1146
                        executeItem(el, item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1147
                        _avail[i] = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1148
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1149
                        // Y.log('NOT avail: ' + el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1150
                        notAvail.push(item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1151
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1152
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1153
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1154
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1155
            // onContentReady
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1156
            for (i=0,len=_avail.length; i<len; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1157
                item = _avail[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1158
                if (item && item.checkReady) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1159
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1160
                    // el = (item.compat) ? Y.DOM.byId(item.id) : Y.get(item.id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1161
                    el = (item.compat) ? Y.DOM.byId(item.id) : Y.Selector.query(item.id, null, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1162
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1163
                    if (el) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1164
                        // The element is available, but not necessarily ready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1165
                        // @todo should we test parentNode.nextSibling?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1166
                        if (_loadComplete || (el.get && el.get('nextSibling')) || el.nextSibling) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1167
                            executeItem(el, item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1168
                            _avail[i] = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1169
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1170
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1171
                        notAvail.push(item);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1172
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1173
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1174
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1175
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1176
            _retryCount = (notAvail.length === 0) ? 0 : _retryCount - 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1177
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1178
            if (tryAgain) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1179
                // we may need to strip the nulled out items here
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1180
                this.startInterval();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1181
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1182
                clearInterval(this._interval);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1183
                this._interval = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1184
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1185
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1186
            this.locked = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1187
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1188
            return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1189
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1190
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1191
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1192
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1193
         * Removes all listeners attached to the given element via addListener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1194
         * Optionally, the node's children can also be purged.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1195
         * Optionally, you can specify a specific type of event to remove.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1196
         * @method purgeElement
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1197
         * @param {HTMLElement} el the element to purge
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1198
         * @param {boolean} recurse recursively purge this element's children
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1199
         * as well.  Use with caution.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1200
         * @param {string} type optional type of listener to purge. If
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1201
         * left out, all listeners will be removed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1202
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1203
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1204
        purgeElement: function(el, recurse, type) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1205
            // var oEl = (Y.Lang.isString(el)) ? Y.get(el) : el,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1206
            var oEl = (Y.Lang.isString(el)) ?  Y.Selector.query(el, null, true) : el,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1207
                lis = this.getListeners(oEl, type), i, len;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1208
            if (lis) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1209
                for (i=0,len=lis.length; i<len ; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1210
                    lis[i].detachAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1211
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1212
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1213
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1214
            if (recurse && oEl && oEl.childNodes) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1215
                for (i=0,len=oEl.childNodes.length; i<len ; ++i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1216
                    this.purgeElement(oEl.childNodes[i], recurse, type);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1217
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1218
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1219
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1220
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1221
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1222
         * Returns all listeners attached to the given element via addListener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1223
         * Optionally, you can specify a specific type of event to return.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1224
         * @method getListeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1225
         * @param el {HTMLElement|string} the element or element id to inspect 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1226
         * @param type {string} optional type of listener to return. If
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1227
         * left out, all listeners will be returned
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1228
         * @return {Y.Custom.Event} the custom event wrapper for the DOM event(s)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1229
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1230
         */           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1231
        getListeners: function(el, type) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1232
            var ek = Y.stamp(el, true), evts = _el_events[ek],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1233
                results=[] , key = (type) ? 'event:' + ek + type : null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1234
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1235
            if (!evts) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1236
                return null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1237
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1238
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1239
            if (key) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1240
                if (evts[key]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1241
                    results.push(evts[key]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1242
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1243
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1244
                Y.each(evts, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1245
                    results.push(v);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1246
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1247
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1249
            return (results.length) ? results : null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1250
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1251
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1252
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1253
         * Removes all listeners registered by pe.event.  Called 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1254
         * automatically during the unload event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1255
         * @method _unload
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1256
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1257
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1258
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1259
        _unload: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1260
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1261
            var E = Y.Event;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1262
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1263
            Y.each(_wrappers, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1264
                v.detachAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1265
                remove(v.el, v.type, v.fn);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1266
                delete _wrappers[k];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1267
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1268
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1269
            remove(window, "load", E._load);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1270
            remove(window, "unload", E._unload);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1271
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1272
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1273
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1274
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1275
         * Adds a DOM event directly without the caching, cleanup, context adj, etc
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1276
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1277
         * @method nativeAdd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1278
         * @param {HTMLElement} el      the element to bind the handler to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1279
         * @param {string}      type   the type of event handler
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1280
         * @param {function}    fn      the callback to invoke
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1281
         * @param {boolen}      capture capture or bubble phase
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1282
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1283
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1284
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1285
        nativeAdd: add,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1286
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1287
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1288
         * Basic remove listener
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1289
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1290
         * @method nativeRemove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1291
         * @param {HTMLElement} el      the element to bind the handler to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1292
         * @param {string}      type   the type of event handler
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1293
         * @param {function}    fn      the callback to invoke
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1294
         * @param {boolen}      capture capture or bubble phase
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1295
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1296
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1297
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1298
        nativeRemove: remove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1299
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1300
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1301
}();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1302
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1303
Y.Event = Event;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1304
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1305
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1306
if (Y.config.injected || YUI.Env.windowLoaded) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1307
    onLoad();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1308
} else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1309
    add(window, "load", onLoad);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1310
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1311
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1312
// Process onAvailable/onContentReady items when when the DOM is ready in IE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1313
if (Y.UA.ie) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1314
    Y.on(EVENT_READY, Event._poll, Event, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1315
}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1316
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1317
add(window, "unload", onUnload);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1318
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1319
Event.Custom = Y.CustomEvent;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1320
Event.Subscriber = Y.Subscriber;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1321
Event.Target = Y.EventTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1322
Event.Handle = Y.EventHandle;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1323
Event.Facade = Y.EventFacade;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1324
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1325
Event._poll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1326
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1327
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1328
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1329
 * Executes the callback as soon as the specified element 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1330
 * is detected in the DOM.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1331
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1332
 * @event available
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1333
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1334
Y.Env.evt.plugins.available = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1335
    on: function(type, fn, id, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1336
        var a = arguments.length > 4 ?  Y.Array(arguments, 4, true) : [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1337
        return Y.Event.onAvailable.call(Y.Event, id, fn, o, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1338
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1339
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1340
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1341
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1342
 * Executes the callback as soon as the specified element 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1343
 * is detected in the DOM with a nextSibling property
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1344
 * (indicating that the element's children are available)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1345
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1346
 * @event contentready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1347
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1348
Y.Env.evt.plugins.contentready = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1349
    on: function(type, fn, id, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1350
        var a = arguments.length > 4 ?  Y.Array(arguments, 4, true) : [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1351
        return Y.Event.onContentReady.call(Y.Event, id, fn, o, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1352
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1353
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1354
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1355
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1356
var adapt = Y.Env.evt.plugins,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1357
    CAPTURE_CONFIG = { capture: true },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1358
    NOOP  = function(){},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1359
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1360
    // Opera implents capture phase events per spec rather than
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1361
    // the more useful way it is implemented in other browsers:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1362
    // The event doesn't fire on a target unless there is a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1363
    // listener on an element in the target's ancestry.  If a
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1364
    // capture phase listener is added only to the element that 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1365
    // will be the target of the event, the listener won't fire.  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1366
    // To get around this, we register a NOOP listener on the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1367
    // element's parent.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1368
    _captureHack = function(type, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1369
        var el = (Y.Lang.isString(o)) ? Y.Selector.query(o, null, true) : o,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1370
            p  = el && el.parentNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1371
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1372
        if (p) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1373
            Y.Event._attach([type, NOOP, p], CAPTURE_CONFIG);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1374
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1375
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1376
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1377
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1378
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1379
 * Adds a DOM focus listener.  Uses the focusin event in IE,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1380
 * and the capture phase otherwise so that
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1381
 * the event propagates in a way that enables event delegation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1382
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1383
 * Note: if you are registering this event on the intended target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1384
 * rather than an ancestor, the element must be in the DOM in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1385
 * order for it to work in Opera.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1386
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1387
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1388
 * @event focus
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1389
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1390
adapt.focus = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1391
    on: function(type, fn, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1392
        var a = Y.Array(arguments, 0, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1393
        if (Y.UA.opera) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1394
            _captureHack(type, o);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1395
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1396
        return Y.Event._attach(a, CAPTURE_CONFIG);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1397
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1398
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1399
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1400
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1401
 * Adds a DOM blur listener.  Uses the focusout event in IE,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1402
 * and the capture phase otherwise so that
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1403
 * the event propagates in a way that enables event delegation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1404
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1405
 * Note: if you are registering this event on the intended target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1406
 * rather than an ancestor, the element must be in the DOM 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1407
 * at the time of registration in order for it to work in Opera.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1408
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1409
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1410
 * @event blur
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1411
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1412
adapt.blur = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1413
    on: function(type, fn, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1414
        var a = Y.Array(arguments, 0, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1415
        if (Y.UA.opera) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1416
            _captureHack(type, o);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1417
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1418
        return Y.Event._attach(a, CAPTURE_CONFIG);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1419
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1420
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1421
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1422
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1423
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1424
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1425
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1426
 * Add a key listener.  The listener will only be notified if the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1427
 * keystroke detected meets the supplied specification.  The
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1428
 * spec consists of the key event type, followed by a colon,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1429
 * followed by zero or more comma separated key codes, followed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1430
 * by zero or more modifiers delimited by a plus sign.  Ex:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1431
 * press:12,65+shift+ctrl
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1432
 * @event key
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1433
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1434
 * @param type {string} 'key'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1435
 * @param fn {string} the function to execute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1436
 * @param id {string} the element(s) to bind
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1437
 * @param spec {string} the keyCode and modifier specification
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1438
 * @param o optional context object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1439
 * @param args 0..n additional arguments that should be provided 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1440
 * to the listener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1441
 * @return {Event.Handle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1442
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1443
Y.Env.evt.plugins.key = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1444
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1445
    on: function(type, fn, id, spec, o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1446
        var a = Y.Array(arguments, 0, true),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1447
            parsed, etype, criteria, ename;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1448
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1449
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1450
        if (!spec || spec.indexOf(':') == -1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1451
Y.log('Illegal key spec, creating a regular keypress listener instead.', 'info', 'event');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1452
            a[0] = 'keypress';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1453
            return Y.on.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1454
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1455
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1456
        parsed = spec.split(':');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1457
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1458
        // key event type: 'down', 'up', or 'press'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1459
        etype = parsed[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1460
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1461
        // list of key codes optionally followed by modifiers
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1462
        criteria = (parsed[1]) ? parsed[1].split(/,|\+/) : null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1463
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1464
        // the name of the custom event that will be created for the spec
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1465
        ename = (Y.Lang.isString(id) ? id : Y.stamp(id)) + spec;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1466
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1467
        ename = ename.replace(/,/g, '_');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1468
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1469
        if (!Y.getEvent(ename)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1470
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1471
            // subscribe spec validator to the DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1472
            Y.on(type + etype, function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1473
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1474
                // Y.log('keylistener: ' + e.keyCode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1475
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1476
                var passed = false, failed = false, i, crit, critInt;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1477
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1478
                for (i=0; i<criteria.length; i=i+1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1479
                    crit = criteria[i]; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1480
                    critInt = parseInt(crit, 10);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1481
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1482
                    // pass this section if any supplied keyCode 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1483
                    // is found
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1484
                    if (Y.Lang.isNumber(critInt)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1485
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1486
                        if (e.charCode === critInt) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1487
                            // Y.log('passed: ' + crit);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1488
                            passed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1489
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1490
                            failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1491
                            // Y.log('failed: ' + crit);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1492
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1493
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1494
                    // only check modifier if no keyCode was specified
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1495
                    // or the keyCode check was successful.  pass only 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1496
                    // if every modifier passes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1497
                    } else if (passed || !failed) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1498
                        passed = (e[crit + 'Key']);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1499
                        failed = !passed;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1500
                        // Y.log(crit + ": " + passed);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1501
                    }                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1502
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1503
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1504
                // fire spec custom event if spec if met
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1505
                if (passed) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1506
                    Y.fire(ename, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1507
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1508
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1509
            }, id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1510
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1511
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1512
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1513
        // subscribe supplied listener to custom event for spec validator
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1514
        // remove element and spec.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1515
        a.splice(2, 2);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1516
        a[0] = ename;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1517
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1518
        return Y.on.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1519
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1520
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1521
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1522
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1523
var Lang = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1524
	delegates = {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1525
	resolveTextNode = function(n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1526
	    try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1527
	        if (n && 3 == n.nodeType) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1528
	            return n.parentNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1529
	        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1530
	    } catch(e) { }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1531
	    return n;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1532
	},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1533
    _worker = function(delegateKey, e, el) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1534
        var target = resolveTextNode((e.target || e.srcElement)), 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1535
            tests  = delegates[delegateKey],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1536
            spec, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1537
			ename,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1538
			elements,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1539
			nElements,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1540
			matched,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1541
			ev,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1542
			i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1543
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1544
        for (spec in tests) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1545
            if (tests.hasOwnProperty(spec)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1546
                ename  = tests[spec];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1547
				elements = Y.Selector.query(spec, el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1548
				nElements = elements.length;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1549
				if (nElements > 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1550
					i = elements.length - 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1551
					do {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1552
						matched = elements[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1553
	                    if (matched === target || Y.DOM.contains(matched, target)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1554
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1555
                            if (!ev) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1556
                                ev = new Y.DOMEventFacade(e, el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1557
	                            ev.container = ev.currentTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1558
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1559
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1560
	                        ev.currentTarget = Y.Node.get(matched);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1561
	                        Y.fire(ename, ev);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1562
	                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1563
					}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1564
					while (i--);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1565
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1566
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1567
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1568
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1569
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1570
	attach = function (type, key, element) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1571
		Y.Event._attach([type, function (e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1572
            _worker(key, (e || window.event), element);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1573
		}, element], { facade: false });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1574
	},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1575
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1576
    _sanitize = Y.cached(function(str) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1577
        return str.replace(/[|,:]/g, '~');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1578
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1579
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1580
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1581
 * Sets up a delegated listener container.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1582
 * @event delegate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1583
 * @param type {string} 'delegate'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1584
 * @param fn {string} the function to execute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1585
 * @param el {string|node} the element that is the delegation container
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1586
 * @param delegateType {string} the event type to delegate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1587
 * @param spec {string} a selector that must match the target of the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1588
 * event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1589
 * @return {EventHandle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1590
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1591
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1592
Y.Env.evt.plugins.delegate = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1593
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1594
    on: function(type, fn, el, delegateType, spec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1595
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1596
        if (!spec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1597
            Y.log('delegate: no spec, nothing to do', 'warn', 'event');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1598
            return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1599
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1600
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1601
        // identifier to target the container
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1602
        var guid = (Lang.isString(el) ? el : Y.stamp(el)), 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1603
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1604
            // the custom event for the delegation spec
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1605
            ename = 'delegate:' + guid + delegateType + _sanitize(spec),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1606
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1607
            // the key to the listener for the event type and container
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1608
            delegateKey = delegateType + guid,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1609
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1610
            a = Y.Array(arguments, 0, true),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1611
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1612
			element;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1613
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1614
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1615
        if (!(delegateKey in delegates)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1616
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1617
			if (Lang.isString(el)) {	//	Selector
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1618
				element = Y.Selector.query(el);				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1619
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1620
			else {	// Node instance
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1621
				element = Y.Node.getDOMNode(el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1622
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1623
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1624
			if (Lang.isArray(element)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1625
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1626
				Y.Array.each(element, function (v) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1627
					attach(delegateType, delegateKey, v);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1628
				});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1629
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1630
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1631
			else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1632
				attach(delegateType, delegateKey, element);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1633
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1634
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1635
            delegates[delegateKey] = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1636
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1637
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1638
        delegates[delegateKey][spec] = ename;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1639
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1640
        a[0] = ename;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1641
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1642
        // remove element, delegation spec and context object from the args
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1643
        a.splice(2, 3);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1644
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1645
        // subscribe to the custom event for the delegation spec
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1646
        return Y.on.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1647
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1648
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1649
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1650
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1651
(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1652
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1653
var detachHandle,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1654
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1655
    timerHandle,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1656
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1657
    CE_NAME = 'window:resize',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1658
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1659
    handler = function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1660
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1661
        if (Y.UA.gecko) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1662
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1663
            Y.fire(CE_NAME, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1664
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1665
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1666
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1667
            if (timerHandle) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1668
                timerHandle.cancel();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1669
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1670
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1671
            timerHandle = Y.later(Y.config.windowResizeDelay || 40, Y, function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1672
                Y.fire(CE_NAME, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1673
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1674
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1675
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1676
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1677
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1678
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1679
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1680
 * Firefox fires the window resize event once when the resize action
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1681
 * finishes, other browsers fire the event periodically during the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1682
 * resize.  This code uses timeout logic to simulate the Firefox 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1683
 * behavior in other browsers.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1684
 * @event windowresize
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1685
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1686
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1687
Y.Env.evt.plugins.windowresize = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1688
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1689
    on: function(type, fn) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1690
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1691
        // check for single window listener and add if needed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1692
        if (!detachHandle) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1693
            detachHandle = Y.Event._attach(['resize', handler]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1694
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1695
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1696
        var a = Y.Array(arguments, 0, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1697
        a[0] = CE_NAME;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1698
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1699
        return Y.on.apply(Y, a);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1700
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1701
};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1702
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1703
})();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1704
var isString = Y.Lang.isString,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1705
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1706
	fireMouseEventForNode = function (node, relatedTarget, eventName, e, spec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1707
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1708
		if (!node.compareTo(relatedTarget) && !node.contains(relatedTarget)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1709
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1710
			e.container = e.currentTarget;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1711
			e.currentTarget = node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1712
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1713
			Y.fire(eventName, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1714
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1715
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1716
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1717
	},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1718
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1719
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1720
	handleMouseEvent = function (e, eventName, spec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1721
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1722
		var relatedTarget = e.relatedTarget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1723
			currentTarget = e.currentTarget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1724
			target = e.target;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1725
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1726
		if (spec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1727
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1728
			currentTarget.queryAll(spec).some(function (v) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1729
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1730
				var bReturnVal;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1731
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1732
				if (v.compareTo(target) || v.contains(target)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1733
					fireMouseEventForNode(v, relatedTarget, eventName, e, spec);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1734
					bReturnVal = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1735
				}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1736
				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1737
				return bReturnVal; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1738
			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1739
			});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1740
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1741
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1742
		else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1743
			fireMouseEventForNode(currentTarget, relatedTarget, eventName, e);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1744
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1745
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1746
	},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1747
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1748
	sanitize = Y.cached(function (str) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1749
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1750
    	return str.replace(/[|,:]/g, "~");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1751
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1752
	}),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1753
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1754
	eventConfig = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1755
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1756
    	on: function(type, fn, el, spec) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1757
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1758
	        var sDOMEvent = (type === "mouseenter") ? "mouseover" : "mouseout",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1759
				sEventName = type + ":" + (isString(el) ? el : Y.stamp(el)) + sDOMEvent,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1760
	            args = Y.Array(arguments, 0, true),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1761
				sSelector;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1762
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1763
			if (isString(spec)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1764
				sSelector = spec;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1765
				sEventName = sEventName + sanitize(sSelector);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1766
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1767
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1768
	        if (!Y.getEvent(sEventName)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1769
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1770
	            // Set up the listener on the container
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1771
	            Y.on(sDOMEvent, function (e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1772
	
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1773
					handleMouseEvent(e, sEventName, sSelector);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1774
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1775
				}, el);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1776
	        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1777
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1778
	        args[0] = sEventName;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1779
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1780
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1781
	        // Remove the element (and the spec--if defined) from the args
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1782
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1783
			if (sSelector) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1784
	        	args.splice(2, 2);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1785
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1786
			else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1787
				args.splice(2, 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1788
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1789
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1790
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1791
	        // Subscribe to the custom event for the delegation spec
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1792
	        return Y.on.apply(Y, args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1793
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1794
	    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1795
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1796
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1797
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1798
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1799
 * Sets up a "mouseenter" listener&#151;a listener that is called the first time 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1800
 * the user's mouse enters the specified element(s).  By passing a CSS selector 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1801
 * as the fourth argument, can also be used to delegate a "mouseenter" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1802
 * event listener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1803
 * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1804
 * @event mouseenter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1805
 * @param type {string} "mouseenter"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1806
 * @param fn {string} The method the event invokes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1807
 * @param el {string|node} The element(s) to assign the listener to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1808
 * @param spec {string} Optional.  String representing a selector that must 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1809
 * match the target of the event in order for the listener to be called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1810
 * @return {EventHandle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1811
 * @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1812
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1813
Y.Env.evt.plugins.mouseenter = eventConfig;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1814
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1815
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1816
* Sets up a "mouseleave" listener&#151;a listener that is called the first time 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1817
* the user's mouse leaves the specified element(s).  By passing a CSS selector 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1818
* as the fourth argument, can also be used to delegate a "mouseleave" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1819
* event listener.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1820
* 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1821
* @event mouseleave
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1822
* @param type {string} "mouseleave"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1823
* @param fn {string} The method the event invokes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1824
* @param el {string|node} The element(s) to assign the listener to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1825
* @param spec {string} Optional.  String representing a selector that must 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1826
* match the target of the event in order for the listener to be called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1827
* @return {EventHandle} the detach handle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1828
* @for YUI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1829
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1830
Y.Env.evt.plugins.mouseleave = eventConfig;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1831
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1832
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1833
}, '3.0.0b1' ,{requires:['event-custom']});