src/cm/media/js/lib/yui/yui_3.10.3/build/simpleyui/simpleyui-debug.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
The YUI module contains the components required for building the YUI seed file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
This includes the script loading mechanism, a simple queue, and the core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
@module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@main yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
/*jshint eqeqeq: false*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
if (typeof YUI != 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
    YUI._YUI = YUI;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
The YUI global namespace object. This is the constructor for all YUI instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
This is a self-instantiable factory function, meaning you don't need to precede
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
it with the `new` operator. You can invoke it directly like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    YUI().use('*', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
        // Y is a new YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
But it also works like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    var Y = YUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
The `YUI` constructor accepts an optional config object, like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        debug: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        combine: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    }).use('node', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
        // Y.Node is ready to use.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
See the API docs for the <a href="config.html">Config</a> class for the complete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
list of supported configuration properties accepted by the YUI constuctor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
If a global `YUI` object is already defined, the existing YUI object will not be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
overwritten, to ensure that defined namespaces are preserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
Each YUI instance has full custom event support, but only if the event system is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
@class YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
@uses EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
@global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
@param {Object} [config]* Zero or more optional configuration objects. Config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    values are stored in the `Y.config` property. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
    <a href="config.html">Config</a> docs for the list of supported properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    /*global YUI*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    /*global YUI_config*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    var YUI = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
        var i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
            Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
            args = arguments,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
            l = args.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
            instanceOf = function(o, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
                return (o && o.hasOwnProperty && (o instanceof type));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
            gconf = (typeof YUI_config !== 'undefined') && YUI_config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
        if (!(instanceOf(Y, YUI))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
            Y = new YUI();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
            // set up the core environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
            Y._init();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
            Master configuration that might span multiple contexts in a non-
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
            browser environment. It is applied first to all instances in all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
            contexts.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
            @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
                YUI.GlobalConfig = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
                    filter: 'debug'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
                YUI().use('node', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
                    // debug files used here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
                YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
                    filter: 'min'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
                }).use('node', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
                    // min files used here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            @property {Object} GlobalConfig
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
            @global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
            @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
            **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
            if (YUI.GlobalConfig) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
                Y.applyConfig(YUI.GlobalConfig);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
            /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
            Page-level config applied to all YUI instances created on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
            current page. This is applied after `YUI.GlobalConfig` and before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
            any instance-level configuration.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
            @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
                // Single global var to include before YUI seed file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
                YUI_config = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
                    filter: 'debug'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
                YUI().use('node', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
                    // debug files used here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
                YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
                    filter: 'min'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
                }).use('node', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                    // min files used here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            @property {Object} YUI_config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
            @global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
            **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
            if (gconf) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
                Y.applyConfig(gconf);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
            // bind the specified additional modules for this instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
            if (!l) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
                Y._setup();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
        if (l) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
            // Each instance can accept one or more configuration objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
            // These are applied after YUI.GlobalConfig and YUI_Config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
            // overriding values set in those config files if there is a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
            // matching property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            for (; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                Y.applyConfig(args[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
            Y._setup();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
        Y.instanceOf = instanceOf;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
    var proto, prop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
        VERSION = '@VERSION@',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
        PERIOD = '.',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        BASE = 'http://yui.yahooapis.com/',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
        /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
            These CSS class names can't be generated by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
            getClassName since it is not available at the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
            time they are being used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        DOC_LABEL = 'yui3-js-enabled',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
        CSS_STAMP_EL = 'yui3-css-stamp',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
        NOOP = function() {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
        SLICE = Array.prototype.slice,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
        APPLY_TO_AUTH = { 'io.xdrReady': 1,   // the functions applyTo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
                          'io.xdrResponse': 1,   // can call. this should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
                          'SWF.eventHandler': 1 }, // be done at build time
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
        hasWin = (typeof window != 'undefined'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
        win = (hasWin) ? window : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
        doc = (hasWin) ? win.document : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        docEl = doc && doc.documentElement,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
        docClass = docEl && docEl.className,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
        instances = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
        time = new Date().getTime(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
        add = function(el, type, fn, capture) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            if (el && el.addEventListener) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
                el.addEventListener(type, fn, capture);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
            } else if (el && el.attachEvent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
                el.attachEvent('on' + type, fn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
        remove = function(el, type, fn, capture) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
            if (el && el.removeEventListener) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
                // this can throw an uncaught exception in FF
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
                    el.removeEventListener(type, fn, capture);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
                } catch (ex) {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
            } else if (el && el.detachEvent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
                el.detachEvent('on' + type, fn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        handleLoad = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
            YUI.Env.windowLoaded = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            YUI.Env.DOMReady = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            if (hasWin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
                remove(window, 'load', handleLoad);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
        getLoader = function(Y, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
            var loader = Y.Env._loader,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
                lCore = [ 'loader-base' ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
                G_ENV = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
                mods = G_ENV.mods;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            if (loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                //loader._config(Y.config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
                loader.ignoreRegistered = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
                loader.onEnd = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
                loader.data = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
                loader.required = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                loader.loadType = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                loader = new Y.Loader(Y.config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
                Y.Env._loader = loader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
            if (mods && mods.loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                lCore = [].concat(lCore, YUI.Env.loaderExtras);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
            YUI.Env.core = Y.Array.dedupe([].concat(YUI.Env.core, lCore));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
            return loader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
        clobber = function(r, s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            for (var i in s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
                if (s.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
                    r[i] = s[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
        ALREADY_DONE = { success: true };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
//  Stamp the documentElement (HTML) with a class of "yui-loaded" to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
//  enable styles that need to key off of JS being enabled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
if (docEl && docClass.indexOf(DOC_LABEL) == -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    if (docClass) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        docClass += ' ';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    docClass += DOC_LABEL;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
    docEl.className = docClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
if (VERSION.indexOf('@') > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    VERSION = '3.5.0'; // dev time hack for cdn test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
proto = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    Applies a new configuration object to the config of this YUI instance. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    will merge new group/module definitions, and will also update the loader
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
    cache if necessary. Updating `Y.config` directly will not update the cache.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    @method applyConfig
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    @param {Object} o the configuration object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
    @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
    applyConfig: function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        o = o || NOOP;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        var attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
            name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
            // detail,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
            config = this.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
            mods = config.modules,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            groups = config.groups,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
            aliases = config.aliases,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
            loader = this.Env._loader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
        for (name in o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
            if (o.hasOwnProperty(name)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
                attr = o[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
                if (mods && name == 'modules') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
                    clobber(mods, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
                } else if (aliases && name == 'aliases') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
                    clobber(aliases, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
                } else if (groups && name == 'groups') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
                    clobber(groups, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
                } else if (name == 'win') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
                    config[name] = (attr && attr.contentWindow) || attr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
                    config.doc = config[name] ? config[name].document : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
                } else if (name == '_yuid') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
                    // preserve the guid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
                    config[name] = attr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
        if (loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
            loader._config(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    Old way to apply a config to this instance (calls `applyConfig` under the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    hood).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
    @method _config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
    @param {Object} o The config to apply
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    _config: function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
        this.applyConfig(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    Initializes this YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    @method _init
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
    _init: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
        var filter, el,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
            Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
            G_ENV = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
            Env = Y.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            prop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
        The version number of this YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
        This value is typically updated by a script when a YUI release is built,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
        so it may not reflect the correct version number when YUI is run from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
        the development source tree.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        @property {String} version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
        **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
        Y.version = VERSION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        if (!Env) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
            Y.Env = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
                core: ['get', 'features', 'intl-base', 'yui-log', 'yui-later'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
                loaderExtras: ['loader-rollup', 'loader-yui3'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
                mods: {}, // flat module map
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
                versions: {}, // version module map
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
                base: BASE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
                cdn: BASE + VERSION + '/build/',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
                // bootstrapped: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
                _idx: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
                _used: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                _attached: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
                _missed: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
                _yidx: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
                _uidx: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
                _guidp: 'y',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
                _loaded: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
                // serviced: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
                // Regex in English:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
                // I'll start at the \b(simpleyui).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
                // 1. Look in the test string for "simpleyui" or "yui" or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
                //    "yui-base" or "yui-davglass" or "yui-foobar" that comes after a word break.  That is, it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
                //    can't match "foyui" or "i_heart_simpleyui". This can be anywhere in the string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
                // 2. After #1 must come a forward slash followed by the string matched in #1, so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
                //    "yui-base/yui-base" or "simpleyui/simpleyui" or "yui-pants/yui-pants".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
                // 3. The second occurence of the #1 token can optionally be followed by "-debug" or "-min",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
                //    so "yui/yui-min", "yui/yui-debug", "yui-base/yui-base-debug". NOT "yui/yui-tshirt".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
                // 4. This is followed by ".js", so "yui/yui.js", "simpleyui/simpleyui-min.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
                // 0. Going back to the beginning, now. If all that stuff in 1-4 comes after a "?" in the string,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
                //    then capture the junk between the LAST "&" and the string in 1-4.  So
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
                //    "blah?foo/yui/yui.js" will capture "foo/" and "blah?some/thing.js&3.3.0/build/yui-davglass/yui-davglass.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
                //    will capture "3.3.0/build/"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
                // Regex Exploded:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
                // (?:\?             Find a ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
                //   (?:[^&]*&)      followed by 0..n characters followed by an &
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
                //   *               in fact, find as many sets of characters followed by a & as you can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
                //   ([^&]*)         capture the stuff after the last & in \1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
                // )?                but it's ok if all this ?junk&more_junk stuff isn't even there
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
                // \b(simpleyui|     after a word break find either the string "simpleyui" or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
                //    yui(?:-\w+)?   the string "yui" optionally followed by a -, then more characters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
                // )                 and store the simpleyui or yui-* string in \2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
                // \/\2              then comes a / followed by the simpleyui or yui-* string in \2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
                // (?:-(min|debug))? optionally followed by "-min" or "-debug"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
                // .js               and ending in ".js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
                _BASE_RE: /(?:\?(?:[^&]*&)*([^&]*))?\b(simpleyui|yui(?:-\w+)?)\/\2(?:-(min|debug))?\.js/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
                parseBasePath: function(src, pattern) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
                    var match = src.match(pattern),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
                        path, filter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
                    if (match) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
                        path = RegExp.leftContext || src.slice(0, src.indexOf(match[0]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
                        // this is to set up the path to the loader.  The file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
                        // filter for loader should match the yui include.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
                        filter = match[3];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
                        // extract correct path for mixed combo urls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
                        // http://yuilibrary.com/projects/yui3/ticket/2528423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
                        if (match[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
                            path += '?' + match[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
                        path = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
                            filter: filter,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
                            path: path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
                        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
                    return path;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
                getBase: G_ENV && G_ENV.getBase ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
                        function(pattern) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
                            var nodes = (doc && doc.getElementsByTagName('script')) || [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
                                path = Env.cdn, parsed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
                                i, len, src;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
                            for (i = 0, len = nodes.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
                                src = nodes[i].src;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
                                if (src) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
                                    parsed = Y.Env.parseBasePath(src, pattern);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
                                    if (parsed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
                                        filter = parsed.filter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
                                        path = parsed.path;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
                                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
                                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
                            // use CDN default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
                            return path;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
            Env = Y.Env;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
            Env._loaded[VERSION] = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
            if (G_ENV && Y !== YUI) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
                Env._yidx = ++G_ENV._yidx;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
                Env._guidp = ('yui_' + VERSION + '_' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
                             Env._yidx + '_' + time).replace(/[^a-z0-9_]+/g, '_');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
            } else if (YUI._YUI) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
                G_ENV = YUI._YUI.Env;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
                Env._yidx += G_ENV._yidx;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
                Env._uidx += G_ENV._uidx;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
                for (prop in G_ENV) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
                    if (!(prop in Env)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
                        Env[prop] = G_ENV[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
                delete YUI._YUI;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
            Y.id = Y.stamp(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
            instances[Y.id] = Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        Y.constructor = YUI;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        // configuration defaults
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        Y.config = Y.config || {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
            bootstrap: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
            cacheUse: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
            debug: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
            doc: doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
            fetchCSS: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
            throwFail: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
            useBrowserConsole: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
            useNativeES5: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
            win: win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
            global: Function('return this')()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
        //Register the CSS stamp element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
        if (doc && !doc.getElementById(CSS_STAMP_EL)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
            el = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
            el.innerHTML = '<div id="' + CSS_STAMP_EL + '" style="position: absolute !important; visibility: hidden !important"></div>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
            YUI.Env.cssStampEl = el.firstChild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
            if (doc.body) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
                doc.body.appendChild(YUI.Env.cssStampEl);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
                docEl.insertBefore(YUI.Env.cssStampEl, docEl.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
        } else if (doc && doc.getElementById(CSS_STAMP_EL) && !YUI.Env.cssStampEl) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
            YUI.Env.cssStampEl = doc.getElementById(CSS_STAMP_EL);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
        Y.config.lang = Y.config.lang || 'en-US';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
        Y.config.base = YUI.config.base || Y.Env.getBase(Y.Env._BASE_RE);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
        if (!filter || (!('mindebug').indexOf(filter))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
            filter = 'min';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
        filter = (filter) ? '-' + filter : filter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
        Y.config.loaderPath = YUI.config.loaderPath || 'loader/loader' + filter + '.js';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
    Finishes the instance setup. Attaches whatever YUI modules were defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
    at the time that this instance was created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
    @method _setup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
    _setup: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
        var i, Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
            core = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
            mods = YUI.Env.mods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
            extras = Y.config.core || [].concat(YUI.Env.core); //Clone it..
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
        for (i = 0; i < extras.length; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
            if (mods[extras[i]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
                core.push(extras[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
        Y._attach(['yui-base']);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
        Y._attach(core);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
        if (Y.Loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
            getLoader(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
        // Y.log(Y.id + ' initialized', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
    Executes the named method on the specified YUI instance if that method is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    whitelisted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    @method applyTo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    @param {String} id YUI instance id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
    @param {String} method Name of the method to execute. For example:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
        'Object.keys'.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
    @param {Array} args Arguments to apply to the method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    @return {Mixed} Return value from the applied method, or `null` if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
        specified instance was not found or the method was not whitelisted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    applyTo: function(id, method, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
        if (!(method in APPLY_TO_AUTH)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
            this.log(method + ': applyTo not allowed', 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
            return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
        var instance = instances[id], nest, m, i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
        if (instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
            nest = method.split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
            m = instance;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
            for (i = 0; i < nest.length; i = i + 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
                m = m[nest[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
                if (!m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
                    this.log('applyTo not found: ' + method, 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
            return m && m.apply(instance, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
        return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
Registers a YUI module and makes it available for use in a `YUI().use()` call or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
as a dependency for other modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
The easiest way to create a first-class YUI module is to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
<a href="http://yui.github.com/shifter/">Shifter</a>, the YUI component build
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
tool.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
Shifter will automatically wrap your module code in a `YUI.add()` call along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
with any configuration info required for the module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
    YUI.add('davglass', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
        Y.davglass = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
            Y.log('Dav was here!');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
    }, '3.4.0', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
        requires: ['harley-davidson', 'mt-dew']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
@method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
@param {String} name Module name.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
@param {Function} fn Function containing module code. This function will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
    executed whenever the module is attached to a specific YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
    @param {YUI} fn.Y The YUI instance to which this module is attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
    @param {String} fn.name Name of the module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
@param {String} version Module version number. This is currently used only for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    informational purposes, and is not used internally by YUI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
@param {Object} [config] Module config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
    @param {Array} [config.requires] Array of other module names that must be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
        attached before this module can be attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    @param {Array} [config.optional] Array of optional module names that should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
        be attached before this module is attached if they've already been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
        loaded. If the `loadOptional` YUI option is `true`, optional modules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
        that have not yet been loaded will be loaded just as if they were hard
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
        requirements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    @param {Array} [config.use] Array of module names that are included within
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
        or otherwise provided by this module, and which should be attached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
        automatically when this module is attached. This makes it possible to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
        create "virtual rollup" modules that simply attach a collection of other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
        modules or submodules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
@return {YUI} This YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
    add: function(name, fn, version, details) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
        details = details || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
        var env = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
            mod = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
                name: name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
                fn: fn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
                version: version,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
                details: details
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
            //Instance hash so we don't apply it to the same instance twice
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
            applied = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
            loader, inst,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
            i, versions = env.versions;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
        env.mods[name] = mod;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
        versions[version] = versions[version] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
        versions[version][name] = mod;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
        for (i in instances) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
            if (instances.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
                inst = instances[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
                if (!applied[inst.id]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
                    applied[inst.id] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
                    loader = inst.Env._loader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
                    if (loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
                        if (!loader.moduleInfo[name] || loader.moduleInfo[name].temp) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
                            loader.addModule(details, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
    Executes the callback function associated with each required module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
    attaching the module to this YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    @method _attach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
    @param {Array} r The array of modules to attach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
    @param {Boolean} [moot=false] If `true`, don't throw a warning if the module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
        is not attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    _attach: function(r, moot) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
        var i, name, mod, details, req, use, after,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
            mods = YUI.Env.mods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
            aliases = YUI.Env.aliases,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
            Y = this, j,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
            cache = YUI.Env._renderedMods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
            loader = Y.Env._loader,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
            done = Y.Env._attached,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
            len = r.length, loader, def, go,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
            c = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
        //Check for conditional modules (in a second+ instance) and add their requirements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
        //TODO I hate this entire method, it needs to be fixed ASAP (3.5.0) ^davglass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
        for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
            name = r[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
            mod = mods[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
            c.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
            if (loader && loader.conditions[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
                for (j in loader.conditions[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
                    if (loader.conditions[name].hasOwnProperty(j)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                        def = loader.conditions[name][j];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
                        go = def && ((def.ua && Y.UA[def.ua]) || (def.test && def.test(Y)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
                        if (go) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
                            c.push(def.name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
        r = c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
        len = r.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
        for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
            if (!done[r[i]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
                name = r[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
                mod = mods[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
                if (aliases && aliases[name] && !mod) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
                    Y._attach(aliases[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
                    continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
                if (!mod) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
                    if (loader && loader.moduleInfo[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
                        mod = loader.moduleInfo[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
                        moot = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
                    // Y.log('no js def for: ' + name, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
                    //if (!loader || !loader.moduleInfo[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
                    //if ((!loader || !loader.moduleInfo[name]) && !moot) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
                    if (!moot && name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
                        if ((name.indexOf('skin-') === -1) && (name.indexOf('css') === -1)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
                            Y.Env._missed.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
                            Y.Env._missed = Y.Array.dedupe(Y.Env._missed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
                            Y.message('NOT loaded: ' + name, 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
                    done[name] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
                    //Don't like this, but in case a mod was asked for once, then we fetch it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
                    //We need to remove it from the missed list ^davglass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
                    for (j = 0; j < Y.Env._missed.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
                        if (Y.Env._missed[j] === name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
                            Y.message('Found: ' + name + ' (was reported as missing earlier)', 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
                            Y.Env._missed.splice(j, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
                    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
                        If it's a temp module, we need to redo it's requirements if it's already loaded
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
                        since it may have been loaded by another instance and it's dependencies might
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
                        have been redefined inside the fetched file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
                    if (loader && cache && cache[name] && cache[name].temp) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
                        loader.getRequires(cache[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
                        req = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
                        for (j in loader.moduleInfo[name].expanded_map) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
                            if (loader.moduleInfo[name].expanded_map.hasOwnProperty(j)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
                                req.push(j);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
                        Y._attach(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
                    details = mod.details;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
                    req = details.requires;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
                    use = details.use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
                    after = details.after;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
                    //Force Intl load if there is a language (Loader logic) @todo fix this shit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
                    if (details.lang) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
                        req = req || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
                        req.unshift('intl');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
                    if (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
                        for (j = 0; j < req.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
                            if (!done[req[j]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
                                if (!Y._attach(req)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
                                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
                                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
                    if (after) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
                        for (j = 0; j < after.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
                            if (!done[after[j]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
                                if (!Y._attach(after, true)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
                                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
                                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
                    if (mod.fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
                            if (Y.config.throwFail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
                                mod.fn(Y, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
                                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
                                    mod.fn(Y, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
                                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
                                    Y.error('Attach error: ' + name, e, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
                                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
                    if (use) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
                        for (j = 0; j < use.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
                            if (!done[use[j]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
                                if (!Y._attach(use)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
                                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
                                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
        return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
    Delays the `use` callback until another event has taken place such as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
    `window.onload`, `domready`, `contentready`, or `available`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
    @method _delayCallback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    @param {Function} cb The original `use` callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
    @param {String|Object} until Either an event name ('load', 'domready', etc.)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
        or an object containing event/args keys for contentready/available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
    @return {Function}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
    _delayCallback: function(cb, until) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
        var Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
            mod = ['event-base'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
        until = (Y.Lang.isObject(until) ? until : { event: until });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
        if (until.event === 'load') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
            mod.push('event-synthetic');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
        Y.log('Delaying use callback until: ' + until.event, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
        return function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
            Y.log('Use callback fired, waiting on delay', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
            var args = arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
            Y._use(mod, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
                Y.log('Delayed use wrapper callback after dependencies', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
                Y.on(until.event, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
                    args[1].delayUntil = until.event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
                    Y.log('Delayed use callback done after ' + until.event, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
                    cb.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
                }, until.args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    Attaches one or more modules to this YUI instance. When this is executed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
    the requirements of the desired modules are analyzed, and one of several
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
    things can happen:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
      * All required modules have already been loaded, and just need to be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
        attached to this YUI instance. In this case, the `use()` callback will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
        be executed synchronously after the modules are attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
      * One or more modules have not yet been loaded, or the Get utility is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
        available, or the `bootstrap` config option is `false`. In this case,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
        a warning is issued indicating that modules are missing, but all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
        available modules will still be attached and the `use()` callback will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
        be executed synchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
      * One or more modules are missing and the Loader is not available but the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
        Get utility is, and `bootstrap` is not `false`. In this case, the Get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        utility will be used to load the Loader, and we will then proceed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
        the following state:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
      * One or more modules are missing and the Loader is available. In this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
        case, the Loader will be used to resolve the dependency tree for the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
        missing modules and load them and their dependencies. When the Loader is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
        finished loading modules, the `use()` callback will be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
        asynchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
        // Loads and attaches dd and its dependencies.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
        YUI().use('dd', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
        // Loads and attaches dd and node as well as all of their dependencies.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        YUI().use(['dd', 'node'], function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
        // Attaches all modules that have already been loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
        YUI().use('*', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
        // Attaches a gallery module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
        YUI().use('gallery-yql', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
        // Attaches a YUI 2in3 module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
        YUI().use('yui2-datatable', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
    @method use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
    @param {String|Array} modules* One or more module names to attach.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
    @param {Function} [callback] Callback function to be executed once all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
        specified modules and their dependencies have been attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
    @param {YUI} callback.Y The YUI instance created for this sandbox.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
    @param {Object} callback.status Object containing `success`, `msg` and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
        `data` properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
    use: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
        var args = SLICE.call(arguments, 0),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
            callback = args[args.length - 1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
            Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
            name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
            Env = Y.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
            provisioned = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
        // The last argument supplied to use can be a load complete callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
        if (Y.Lang.isFunction(callback)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
            args.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
            if (Y.config.delayUntil) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
                callback = Y._delayCallback(callback, Y.config.delayUntil);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
            callback = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
        if (Y.Lang.isArray(args[0])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
            args = args[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
        if (Y.config.cacheUse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
            while ((name = args[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
                if (!Env._attached[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
                    provisioned = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
                    break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
            if (provisioned) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
                if (args.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
                    Y.log('already provisioned: ' + args, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
                Y._notify(callback, ALREADY_DONE, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
                return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
        if (Y._loading) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
            Y._useQueue = Y._useQueue || new Y.Queue();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
            Y._useQueue.add([args, callback]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
            Y._use(args, function(Y, response) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
                Y._notify(callback, response, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
    Handles Loader notifications about attachment/load errors.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
    @method _notify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
    @param {Function} callback Callback to pass to `Y.config.loadErrorFn`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
    @param {Object} response Response returned from Loader.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
    @param {Array} args Arguments passed from Loader.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
    _notify: function(callback, response, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
        if (!response.success && this.config.loadErrorFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
            this.config.loadErrorFn.call(this, this, callback, response, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
        } else if (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
            if (this.Env._missed && this.Env._missed.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
                response.msg = 'Missing modules: ' + this.Env._missed.join();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
                response.success = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
            if (this.config.throwFail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
                callback(this, response);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
                    callback(this, response);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
                    this.error('use callback error', e, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
    Called from the `use` method queue to ensure that only one set of loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
    logic is performed at a time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
    @method _use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
    @param {String} args* One or more modules to attach.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
    @param {Function} [callback] Function to call once all required modules have
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
        been attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
    _use: function(args, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
        if (!this.Array) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
            this._attach(['yui-base']);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
        var len, loader, handleBoot,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
            Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
            G_ENV = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
            mods = G_ENV.mods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
            Env = Y.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
            used = Env._used,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
            aliases = G_ENV.aliases,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
            queue = G_ENV._loaderQueue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
            firstArg = args[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
            YArray = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
            config = Y.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
            boot = config.bootstrap,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
            missing = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
            i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
            r = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
            ret = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
            fetchCSS = config.fetchCSS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
            process = function(names, skip) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
                var i = 0, a = [], name, len, m, req, use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
                if (!names.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
                    return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
                if (aliases) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
                    len = names.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
                    for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
                        if (aliases[names[i]] && !mods[names[i]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
                            a = [].concat(a, aliases[names[i]]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
                            a.push(names[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
                    names = a;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
                len = names.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
                for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
                    name = names[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
                    if (!skip) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
                        r.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
                    // only attach a module once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
                    if (used[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
                        continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
                    m = mods[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
                    req = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
                    use = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
                    if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
                        used[name] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
                        req = m.details.requires;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
                        use = m.details.use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
                        // CSS files don't register themselves, see if it has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
                        // been loaded
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
                        if (!G_ENV._loaded[VERSION][name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
                            missing.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
                            used[name] = true; // probably css
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
                    // make sure requirements are attached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
                    if (req && req.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
                        process(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
                    // make sure we grab the submodule dependencies too
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
                    if (use && use.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
                        process(use, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
            handleLoader = function(fromLoader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
                var response = fromLoader || {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
                        success: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
                        msg: 'not dynamic'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
                    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
                    redo, origMissing,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
                    ret = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
                    data = response.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
                Y._loading = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
                if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
                    origMissing = missing;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
                    missing = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
                    r = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
                    process(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
                    redo = missing.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
                    if (redo) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
                        if ([].concat(missing).sort().join() ==
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
                                origMissing.sort().join()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
                            redo = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1114
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1115
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
                if (redo && data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
                    Y._loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
                    Y._use(missing, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
                        Y.log('Nested use callback: ' + data, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
                        if (Y._attach(data)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
                            Y._notify(callback, response, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1123
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1124
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1125
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
                    if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
                        // Y.log('attaching from loader: ' + data, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
                        ret = Y._attach(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
                    if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
                        Y._notify(callback, response, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
                if (Y._useQueue && Y._useQueue.size() && !Y._loading) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
                    Y._use.apply(Y, Y._useQueue.next());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1139
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
// Y.log(Y.id + ': use called: ' + a + ' :: ' + callback, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
        // YUI().use('*'); // bind everything available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
        if (firstArg === '*') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
            args = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
            for (i in mods) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
                if (mods.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
                    args.push(i);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1149
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1150
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1151
            ret = Y._attach(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1152
            if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
                handleLoader();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
            return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
        if ((mods.loader || mods['loader-base']) && !Y.Loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
            Y.log('Loader was found in meta, but it is not attached. Attaching..', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
            Y._attach(['loader' + ((!mods.loader) ? '-base' : '')]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
        // Y.log('before loader requirements: ' + args, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
        // use loader to expand dependencies and sort the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
        // requirements if it is available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
        if (boot && Y.Loader && args.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
            Y.log('Using loader to expand dependencies', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
            loader = getLoader(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
            loader.require(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
            loader.ignoreRegistered = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
            loader._boot = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
            loader.calculate(null, (fetchCSS) ? null : 'js');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
            args = loader.sorted;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
            loader._boot = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
        process(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
        len = missing.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
        if (len) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
            missing = YArray.dedupe(missing);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
            len = missing.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
Y.log('Modules missing: ' + missing + ', ' + missing.length, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
        // dynamic load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
        if (boot && len && Y.Loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1192
// Y.log('Using loader to fetch missing deps: ' + missing, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
            Y.log('Using Loader', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
            Y._loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
            loader = getLoader(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
            loader.onEnd = handleLoader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
            loader.context = Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
            loader.data = args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
            loader.ignoreRegistered = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
            loader.require(missing);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
            loader.insert(null, (fetchCSS) ? null : 'js');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
        } else if (boot && len && Y.Get && !Env.bootstrapped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
            Y._loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
            handleBoot = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
                Y._loading = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
                queue.running = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
                Env.bootstrapped = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
                G_ENV._bootstrapping = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
                if (Y._attach(['loader'])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
                    Y._use(args, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1214
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1215
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1216
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
            if (G_ENV._bootstrapping) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
Y.log('Waiting for loader', 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
                queue.add(handleBoot);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
                G_ENV._bootstrapping = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
Y.log('Fetching loader: ' + config.base + config.loaderPath, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1223
                Y.Get.script(config.base + config.loaderPath, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
                    onEnd: handleBoot
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
            Y.log('Attaching available dependencies: ' + args, 'info', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
            ret = Y._attach(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
            if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
                handleLoader();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1233
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
    Utility method for safely creating namespaces if they don't already exist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
    May be called statically on the YUI global object or as a method on a YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
    instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
    When called statically, a namespace will be created on the YUI global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
    object:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1248
        // Create `YUI.your.namespace.here` as nested objects, preserving any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1249
        // objects that already exist instead of overwriting them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1250
        YUI.namespace('your.namespace.here');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1252
    When called as a method on a YUI instance, a namespace will be created on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1253
    that instance:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1255
        // Creates `Y.property.package`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1256
        Y.namespace('property.package');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1258
    Dots in the input string cause `namespace` to create nested objects for each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1259
    token. If any part of the requested namespace already exists, the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1260
    object will be left in place and will not be overwritten. This allows
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1261
    multiple calls to `namespace` to preserve existing namespaced properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1262
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1263
    If the first token in the namespace string is "YAHOO", that token is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1264
    discarded. This is legacy behavior for backwards compatibility with YUI 2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1266
    Be careful with namespace tokens. Reserved words may work in some browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1267
    and not others. For instance, the following will fail in some browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1268
    because the supported version of JavaScript reserves the word "long":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1270
        Y.namespace('really.long.nested.namespace');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1271
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1272
    Note: If you pass multiple arguments to create multiple namespaces, only the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1273
    last one created is returned from this function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1275
    @method namespace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1276
    @param {String} namespace* One or more namespaces to create.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1277
    @return {Object} Reference to the last namespace object created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1278
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1279
    namespace: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1280
        var a = arguments, o, i = 0, j, d, arg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1282
        for (; i < a.length; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1283
            o = this; //Reset base object per argument or it will get reused from the last
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1284
            arg = a[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1285
            if (arg.indexOf(PERIOD) > -1) { //Skip this if no "." is present
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1286
                d = arg.split(PERIOD);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1287
                for (j = (d[0] == 'YAHOO') ? 1 : 0; j < d.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1288
                    o[d[j]] = o[d[j]] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1289
                    o = o[d[j]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1290
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1291
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1292
                o[arg] = o[arg] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1293
                o = o[arg]; //Reset base object to the new object so it's returned
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1294
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1295
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1296
        return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1297
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1299
    // this is replaced if the log module is included
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1300
    log: NOOP,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1301
    message: NOOP,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1302
    // this is replaced if the dump module is included
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1303
    dump: function (o) { return ''+o; },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1305
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1306
    Reports an error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1308
    The reporting mechanism is controlled by the `throwFail` configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1309
    attribute. If `throwFail` is falsy, the message is logged. If `throwFail` is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1310
    truthy, a JS exception is thrown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1312
    If an `errorFn` is specified in the config it must return `true` to indicate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1313
    that the exception was handled and keep it from being thrown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1315
    @method error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1316
    @param {String} msg Error message.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1317
    @param {Error|String} [e] JavaScript error object or an error string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1318
    @param {String} [src] Source of the error (such as the name of the module in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1319
        which the error occurred).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1320
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1321
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1322
    error: function(msg, e, src) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1323
        //TODO Add check for window.onerror here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1325
        var Y = this, ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1327
        if (Y.config.errorFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1328
            ret = Y.config.errorFn.apply(Y, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1329
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1331
        if (!ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1332
            throw (e || new Error(msg));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1333
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1334
            Y.message(msg, 'error', ''+src); // don't scrub this one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1335
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1337
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1338
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1339
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1340
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1341
    Generates an id string that is unique among all YUI instances in this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1342
    execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1344
    @method guid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1345
    @param {String} [pre] Prefix.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1346
    @return {String} Unique id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1347
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1348
    guid: function(pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1349
        var id = this.Env._guidp + '_' + (++this.Env._uidx);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1350
        return (pre) ? (pre + id) : id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1351
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1353
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1354
    Returns a unique id associated with the given object and (if *readOnly* is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1355
    falsy) stamps the object with that id so it can be identified in the future.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1356
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1357
    Stamping an object involves adding a `_yuid` property to it that contains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1358
    the object's id. One exception to this is that in Internet Explorer, DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1359
    nodes have a `uniqueID` property that contains a browser-generated unique
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1360
    id, which will be used instead of a YUI-generated id when available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1361
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1362
    @method stamp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1363
    @param {Object} o Object to stamp.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1364
    @param {Boolean} readOnly If truthy and the given object has not already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1365
        been stamped, the object will not be modified and `null` will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1366
        returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1367
    @return {String} Object's unique id, or `null` if *readOnly* was truthy and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1368
        the given object was not already stamped.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1369
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1370
    stamp: function(o, readOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1371
        var uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1372
        if (!o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1373
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1374
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1376
        // IE generates its own unique ID for dom nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1377
        // The uniqueID property of a document node returns a new ID
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1378
        if (o.uniqueID && o.nodeType && o.nodeType !== 9) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1379
            uid = o.uniqueID;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1380
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1381
            uid = (typeof o === 'string') ? o : o._yuid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1382
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1384
        if (!uid) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1385
            uid = this.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1386
            if (!readOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1387
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1388
                    o._yuid = uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1389
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1390
                    uid = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1391
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1392
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1393
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1394
        return uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1395
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1397
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1398
    Destroys this YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1400
    @method destroy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1401
    @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1402
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1403
    destroy: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1404
        var Y = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1405
        if (Y.Event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1406
            Y.Event._unload();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1407
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1408
        delete instances[Y.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1409
        delete Y.Env;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1410
        delete Y.config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1411
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1412
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1413
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1414
    Safe `instanceof` wrapper that works around a memory leak in IE when the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1415
    object being tested is `window` or `document`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1417
    Unless you are testing objects that may be `window` or `document`, you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1418
    should use the native `instanceof` operator instead of this method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1420
    @method instanceOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1421
    @param {Object} o Object to check.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1422
    @param {Object} type Class to check against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1423
    @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1424
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1425
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1427
    YUI.prototype = proto;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1429
    // inheritance utilities are not available yet
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1430
    for (prop in proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1431
        if (proto.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1432
            YUI[prop] = proto[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1433
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1434
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1435
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1436
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1437
    Applies a configuration to all YUI instances in this execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1439
    The main use case for this method is in "mashups" where several third-party
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1440
    scripts need to write to a global YUI config, but cannot share a single
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1441
    centrally-managed config object. This way they can all call
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1442
    `YUI.applyConfig({})` instead of overwriting the single global config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1444
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1446
        YUI.applyConfig({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1447
            modules: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1448
                davglass: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1449
                    fullpath: './davglass.js'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1450
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1451
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1452
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1454
        YUI.applyConfig({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1455
            modules: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1456
                foo: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1457
                    fullpath: './foo.js'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1458
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1459
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1460
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1461
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1462
        YUI().use('davglass', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1463
            // Module davglass will be available here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1464
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1465
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1466
    @method applyConfig
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1467
    @param {Object} o Configuration object to apply.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1468
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1469
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1470
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1471
    YUI.applyConfig = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1472
        if (!o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1473
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1474
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1475
        //If there is a GlobalConfig, apply it first to set the defaults
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1476
        if (YUI.GlobalConfig) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1477
            this.prototype.applyConfig.call(this, YUI.GlobalConfig);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1478
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1479
        //Apply this config to it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1480
        this.prototype.applyConfig.call(this, o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1481
        //Reset GlobalConfig to the combined config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1482
        YUI.GlobalConfig = this.config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1483
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1485
    // set up the environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1486
    YUI._init();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1488
    if (hasWin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1489
        // add a window load event at load time so we can capture
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1490
        // the case where it fires before dynamic loading is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1491
        // complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1492
        add(window, 'load', handleLoad);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1493
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1494
        handleLoad();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1495
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1497
    YUI.Env.add = add;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1498
    YUI.Env.remove = remove;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1500
    /*global exports*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1501
    // Support the CommonJS method for exporting our single global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1502
    if (typeof exports == 'object') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1503
        exports.YUI = YUI;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1504
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1505
        * Set a method to be called when `Get.script` is called in Node.js
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1506
        * `Get` will open the file, then pass it's content and it's path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1507
        * to this method before attaching it. Commonly used for code coverage
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1508
        * instrumentation. <strong>Calling this multiple times will only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1509
        * attach the last hook method</strong>. This method is only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1510
        * available in Node.js.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1511
        * @method setLoadHook
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1512
        * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1513
        * @param {Function} fn The function to set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1514
        * @param {String} fn.data The content of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1515
        * @param {String} fn.path The file path of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1516
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1517
        YUI.setLoadHook = function(fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1518
            YUI._getLoadHook = fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1519
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1520
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1521
        * Load hook for `Y.Get.script` in Node.js, see `YUI.setLoadHook`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1522
        * @method _getLoadHook
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1523
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1524
        * @param {String} data The content of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1525
        * @param {String} path The file path of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1526
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1527
        YUI._getLoadHook = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1528
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1530
}());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1532
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1533
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1534
Config object that contains all of the configuration options for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1535
this `YUI` instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1537
This object is supplied by the implementer when instantiating YUI. Some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1538
properties have default values if they are not supplied by the implementer.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1540
This object should not be updated directly because some values are cached. Use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1541
`applyConfig()` to update the config object on a YUI instance that has already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1542
been configured.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1544
@class config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1545
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1546
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1548
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1549
If `true` (the default), YUI will "bootstrap" the YUI Loader and module metadata
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1550
if they're needed to load additional dependencies and aren't already available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1551
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1552
Setting this to `false` will prevent YUI from automatically loading the Loader
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1553
and module metadata, so you will need to manually ensure that they're available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1554
or handle dependency resolution yourself.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1556
@property {Boolean} bootstrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1557
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1558
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1559
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1560
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1561
If `true`, `Y.log()` messages will be written to the browser's debug console
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1562
when available and when `useBrowserConsole` is also `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1564
@property {Boolean} debug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1565
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1566
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1568
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1569
Log messages to the browser console if `debug` is `true` and the browser has a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1570
supported console.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1572
@property {Boolean} useBrowserConsole
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1573
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1574
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1576
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1577
A hash of log sources that should be logged. If specified, only messages from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1578
these sources will be logged. Others will be discarded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1580
@property {Object} logInclude
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1581
@type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1582
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1584
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1585
A hash of log sources that should be not be logged. If specified, all sources
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1586
will be logged *except* those on this list.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1588
@property {Object} logExclude
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1589
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1591
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1592
When the YUI seed file is dynamically loaded after the `window.onload` event has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1593
fired, set this to `true` to tell YUI that it shouldn't wait for `window.onload`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1594
to occur.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1596
This ensures that components that rely on `window.onload` and the `domready`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1597
custom event will work as expected even when YUI is dynamically injected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1599
@property {Boolean} injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1600
@default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1601
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1603
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1604
If `true`, `Y.error()` will generate or re-throw a JavaScript error. Otherwise,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1605
errors are merely logged silently.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1607
@property {Boolean} throwFail
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1608
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1609
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1610
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1611
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1612
Reference to the global object for this execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1613
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1614
In a browser, this is the current `window` object. In Node.js, this is the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1615
Node.js `global` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1617
@property {Object} global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1618
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1619
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1620
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1621
The browser window or frame that this YUI instance should operate in.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1622
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1623
When running in Node.js, this property is `undefined`, since there is no
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1624
`window` object. Use `global` to get a reference to the global object that will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1625
work in both browsers and Node.js.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1627
@property {Window} win
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1628
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1630
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1631
The browser `document` object associated with this YUI instance's `win` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1633
When running in Node.js, this property is `undefined`, since there is no
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1634
`document` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1636
@property {Document} doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1637
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1639
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1640
A list of modules that defines the YUI core (overrides the default list).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1641
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1642
@property {Array} core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1643
@type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1644
@default ['get', 'features', 'intl-base', 'yui-log', 'yui-later', 'loader-base', 'loader-rollup', 'loader-yui3']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1645
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1647
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1648
A list of languages to use in order of preference.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1649
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1650
This list is matched against the list of available languages in modules that the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1651
YUI instance uses to determine the best possible localization of language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1652
sensitive modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1654
Languages are represented using BCP 47 language tags, such as "en-GB" for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1655
English as used in the United Kingdom, or "zh-Hans-CN" for simplified Chinese as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1656
used in China. The list may be provided as a comma-separated string or as an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1657
array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1659
@property {String|String[]} lang
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1660
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1661
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1662
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1663
Default date format.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1665
@property {String} dateFormat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1666
@deprecated Use configuration in `DataType.Date.format()` instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1667
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1669
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1670
Default locale.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1672
@property {String} locale
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1673
@deprecated Use `config.lang` instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1674
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1676
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1677
Default generic polling interval in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1679
@property {Number} pollInterval
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1680
@default 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1681
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1683
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1684
The number of dynamic `<script>` nodes to insert by default before automatically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1685
removing them when loading scripts.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1686
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1687
This applies only to script nodes because removing the node will not make the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1688
evaluated script unavailable. Dynamic CSS nodes are not auto purged, because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1689
removing a linked style sheet will also remove the style definitions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1691
@property {Number} purgethreshold
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1692
@default 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1693
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1695
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1696
Delay in milliseconds to wait after a window `resize` event before firing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1697
event. If another `resize` event occurs before this delay has elapsed, the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1698
delay will start over to ensure that `resize` events are throttled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1699
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1700
@property {Number} windowResizeDelay
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1701
@default 40
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1702
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1704
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1705
Base directory for dynamic loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1707
@property {String} base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1708
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1710
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1711
Base URL for a dynamic combo handler. This will be used to make combo-handled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1712
module requests if `combine` is set to `true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1713
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1714
@property {String} comboBase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1715
@default "http://yui.yahooapis.com/combo?"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1716
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1718
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1719
Root path to prepend to each module path when creating a combo-handled request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1721
This is updated for each YUI release to point to a specific version of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1722
library; for example: "3.8.0/build/".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1724
@property {String} root
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1725
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1726
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1727
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1728
Filter to apply to module urls. This filter will modify the default path for all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1729
modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1731
The default path for the YUI library is the minified version of the files (e.g.,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1732
event-min.js). The filter property can be a predefined filter or a custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1733
filter. The valid predefined filters are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1734
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1735
  - **debug**: Loads debug versions of modules (e.g., event-debug.js).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1736
  - **raw**: Loads raw, non-minified versions of modules without debug logging
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1737
    (e.g., event.js).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1738
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1739
You can also define a custom filter, which must be an object literal containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1740
a search regular expression and a replacement string:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1742
    myFilter: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1743
        searchExp : "-min\\.js",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1744
        replaceStr: "-debug.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1745
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1746
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1747
@property {Object|String} filter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1748
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1749
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1750
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1751
Skin configuration and customizations.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1752
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1753
@property {Object} skin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1754
@param {String} [skin.defaultSkin='sam'] Default skin name. This skin will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1755
    applied automatically to skinnable components if not overridden by a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1756
    component-specific skin name.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1757
@param {String} [skin.base='assets/skins/'] Default base path for a skin,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1758
    relative to Loader's `base` path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1759
@param {Object} [skin.overrides] Component-specific skin name overrides. Specify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1760
    a component name as the key and, as the value, a string or array of strings
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1761
    for a skin or skins that should be loaded for that component instead of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1762
    `defaultSkin`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1763
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1764
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1765
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1766
Hash of per-component filter specifications. If specified for a given component,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1767
this overrides the global `filter` config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1769
@property {Object} filters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1770
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1772
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1773
If `true`, YUI will use a combo handler to load multiple modules in as few
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1774
requests as possible.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1776
The YUI CDN (which YUI uses by default) supports combo handling, but other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1777
servers may not. If the server from which you're loading YUI does not support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1778
combo handling, set this to `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1779
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1780
Providing a value for the `base` config property will cause `combine` to default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1781
to `false` instead of `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1783
@property {Boolean} combine
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1784
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1785
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1786
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1787
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1788
Array of module names that should never be dynamically loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1789
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1790
@property {String[]} ignore
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1791
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1793
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1794
Array of module names that should always be loaded when required, even if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1795
already present on the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1797
@property {String[]} force
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1798
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1799
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1800
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1801
DOM element or id that should be used as the insertion point for dynamically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1802
added `<script>` and `<link>` nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1803
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1804
@property {HTMLElement|String} insertBefore
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1805
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1807
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1808
Object hash containing attributes to add to dynamically added `<script>` nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1810
@property {Object} jsAttributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1811
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1813
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1814
Object hash containing attributes to add to dynamically added `<link>` nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1815
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1816
@property {Object} cssAttributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1817
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1818
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1819
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1820
Timeout in milliseconds before a dynamic JS or CSS request will be considered a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1821
failure. If not set, no timeout will be enforced.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1822
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1823
@property {Number} timeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1824
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1825
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1826
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1827
Callback for the 'CSSComplete' event. When dynamically loading YUI components
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1828
with CSS, this property fires when the CSS is finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1829
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1830
This provides an opportunity to enhance the presentation of a loading page a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1831
little bit before the entire loading process is done.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1833
@property {Function} onCSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1834
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1835
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1836
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1837
A hash of module definitions to add to the list of available YUI modules. These
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1838
modules can then be dynamically loaded via the `use()` method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1840
This is a hash in which keys are module names and values are objects containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1841
module metadata.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1843
See `Loader.addModule()` for the supported module metadata fields. Also see
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1844
`groups`, which provides a way to configure the base and combo spec for a set of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1845
modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1847
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1849
    modules: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1850
        mymod1: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1851
            requires: ['node'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1852
            fullpath: '/mymod1/mymod1.js'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1853
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1855
        mymod2: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1856
            requires: ['mymod1'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1857
            fullpath: '/mymod2/mymod2.js'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1858
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1860
        mymod3: '/js/mymod3.js',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1861
        mycssmod: '/css/mycssmod.css'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1862
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1863
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1864
@property {Object} modules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1865
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1867
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1868
Aliases are dynamic groups of modules that can be used as shortcuts.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1869
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1870
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1872
    YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1873
        aliases: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1874
            davglass: [ 'node', 'yql', 'dd' ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1875
            mine: [ 'davglass', 'autocomplete']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1876
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1877
    }).use('mine', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1878
        // Node, YQL, DD & AutoComplete available here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1879
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1881
@property {Object} aliases
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1882
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1884
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1885
A hash of module group definitions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1887
For each group you can specify a list of modules and the base path and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1888
combo spec to use when dynamically loading the modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1890
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1892
    groups: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1893
        yui2: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1894
            // specify whether or not this group has a combo service
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1895
            combine: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1897
            // The comboSeperator to use with this group's combo handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1898
            comboSep: ';',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1899
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1900
            // The maxURLLength for this server
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1901
            maxURLLength: 500,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1902
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1903
            // the base path for non-combo paths
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1904
            base: 'http://yui.yahooapis.com/2.8.0r4/build/',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1905
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1906
            // the path to the combo service
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1907
            comboBase: 'http://yui.yahooapis.com/combo?',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1909
            // a fragment to prepend to the path attribute when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1910
            // when building combo urls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1911
            root: '2.8.0r4/build/',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1913
            // the module definitions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1914
            modules:  {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1915
                yui2_yde: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1916
                    path: "yahoo-dom-event/yahoo-dom-event.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1917
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1918
                yui2_anim: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1919
                    path: "animation/animation.js",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1920
                    requires: ['yui2_yde']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1921
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1922
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1923
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1924
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1925
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1926
@property {Object} groups
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1927
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1929
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1930
Path to the Loader JS file, relative to the `base` path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1931
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1932
This is used to dynamically bootstrap the Loader when it's needed and isn't yet
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1933
available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1934
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1935
@property {String} loaderPath
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1936
@default "loader/loader-min.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1937
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1938
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1939
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1940
If `true`, YUI will attempt to load CSS dependencies and skins. Set this to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1941
`false` to prevent YUI from loading any CSS, or set it to the string `"force"`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1942
to force CSS dependencies to be loaded even if their associated JS modules are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1943
already loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1944
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1945
@property {Boolean|String} fetchCSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1946
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1947
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1948
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1949
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1950
Default gallery version used to build gallery module urls.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1952
@property {String} gallery
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1953
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1954
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1955
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1956
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1957
Default YUI 2 version used to build YUI 2 module urls.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1958
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1959
This is used for intrinsic YUI 2 support via the 2in3 project. Also see the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1960
`2in3` config for pulling different revisions of the wrapped YUI 2 modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1962
@property {String} yui2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1963
@default "2.9.0"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1964
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1965
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1966
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1967
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1968
Revision number of YUI 2in3 modules that should be used when loading YUI 2in3.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1969
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1970
@property {String} 2in3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1971
@default "4"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1972
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1973
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1975
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1976
Alternate console log function that should be used in environments without a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1977
supported native console. This function is executed with the YUI instance as its
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1978
`this` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1979
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1980
@property {Function} logFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1981
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1982
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1984
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1985
The minimum log level to log messages for. Log levels are defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1986
incrementally. Messages greater than or equal to the level specified will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1987
be shown. All others will be discarded. The order of log levels in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1988
increasing priority is:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1990
    debug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1991
    info
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1992
    warn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1993
    error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1995
@property {String} logLevel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1996
@default 'debug'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1997
@since 3.10.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1998
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1999
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2000
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2001
Callback to execute when `Y.error()` is called. It receives the error message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2002
and a JavaScript error object if one was provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2003
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2004
This function is executed with the YUI instance as its `this` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2006
Returning `true` from this function will prevent an exception from being thrown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2008
@property {Function} errorFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2009
@param {String} errorFn.msg Error message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2010
@param {Object} [errorFn.err] Error object (if one was provided).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2011
@since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2012
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2013
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2014
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2015
A callback to execute when Loader fails to load one or more resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2016
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2017
This could be because of a script load failure. It could also be because a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2018
module fails to register itself when the `requireRegistration` config is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2019
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2020
If this function is defined, the `use()` callback will only be called when the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2021
loader succeeds. Otherwise, `use()` will always executes unless there was a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2022
JavaScript error when attaching a module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2023
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2024
@property {Function} loadErrorFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2025
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2026
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2028
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2029
If `true`, Loader will expect all loaded scripts to be first-class YUI modules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2030
that register themselves with the YUI global, and will trigger a failure if a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2031
loaded script does not register a YUI module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2033
@property {Boolean} requireRegistration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2034
@default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2035
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2036
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2037
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2038
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2039
Cache serviced use() requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2040
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2041
@property {Boolean} cacheUse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2042
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2043
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2044
@deprecated No longer used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2045
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2047
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2048
Whether or not YUI should use native ES5 functionality when available for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2049
features like `Y.Array.each()`, `Y.Object()`, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2050
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2051
When `false`, YUI will always use its own fallback implementations instead of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2052
relying on ES5 functionality, even when ES5 functionality is available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2053
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2054
@property {Boolean} useNativeES5
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2055
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2056
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2057
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2058
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2059
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2060
 * Leverage native JSON stringify if the browser has a native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2061
 * implementation.  In general, this is a good idea.  See the Known Issues
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2062
 * section in the JSON user guide for caveats.  The default value is true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2063
 * for browsers with native JSON support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2064
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2065
 * @property useNativeJSONStringify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2066
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2067
 * @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2068
 * @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2069
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2070
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2071
 /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2072
 * Leverage native JSON parse if the browser has a native implementation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2073
 * In general, this is a good idea.  See the Known Issues section in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2074
 * JSON user guide for caveats.  The default value is true for browsers with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2075
 * native JSON support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2076
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2077
 * @property useNativeJSONParse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2078
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2079
 * @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2080
 * @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2081
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2082
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2083
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2084
Delay the `use` callback until a specific event has passed (`load`, `domready`, `contentready` or `available`)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2085
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2086
@property {Object|String} delayUntil
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2087
@since 3.6.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2088
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2089
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2090
You can use `load` or `domready` strings by default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2092
    YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2093
        delayUntil: 'domready'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2094
    }, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2095
        // This will not execute until 'domeready' occurs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2096
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2098
Or you can delay until a node is available (with `available` or `contentready`):
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2100
    YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2101
        delayUntil: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2102
            event: 'available',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2103
            args : '#foo'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2104
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2105
    }, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2106
        // This will not execute until a node matching the selector "#foo" is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2107
        // available in the DOM.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2108
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2110
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2111
YUI.add('yui-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2113
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2114
 * YUI stub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2115
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2116
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2117
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2118
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2119
 * The YUI module contains the components required for building the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2120
 * seed file.  This includes the script loading mechanism, a simple queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2121
 * and the core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2122
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2123
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2124
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2126
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2127
 * Provides core language utilites and extensions used throughout YUI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2128
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2129
 * @class Lang
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2130
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2131
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2133
var L = Y.Lang || (Y.Lang = {}),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2135
STRING_PROTO = String.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2136
TOSTRING     = Object.prototype.toString,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2138
TYPES = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2139
    'undefined'        : 'undefined',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2140
    'number'           : 'number',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2141
    'boolean'          : 'boolean',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2142
    'string'           : 'string',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2143
    '[object Function]': 'function',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2144
    '[object RegExp]'  : 'regexp',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2145
    '[object Array]'   : 'array',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2146
    '[object Date]'    : 'date',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2147
    '[object Error]'   : 'error'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2148
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2150
SUBREGEX        = /\{\s*([^|}]+?)\s*(?:\|([^}]*))?\s*\}/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2151
TRIMREGEX       = /^\s+|\s+$/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2152
NATIVE_FN_REGEX = /\{\s*\[(?:native code|function)\]\s*\}/i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2154
// -- Protected Methods --------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2156
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2157
Returns `true` if the given function appears to be implemented in native code,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2158
`false` otherwise. Will always return `false` -- even in ES5-capable browsers --
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2159
if the `useNativeES5` YUI config option is set to `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2161
This isn't guaranteed to be 100% accurate and won't work for anything other than
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2162
functions, but it can be useful for determining whether a function like
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2163
`Array.prototype.forEach` is native or a JS shim provided by another library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2165
There's a great article by @kangax discussing certain flaws with this technique:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2166
<http://perfectionkills.com/detecting-built-in-host-methods/>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2168
While his points are valid, it's still possible to benefit from this function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2169
as long as it's used carefully and sparingly, and in such a way that false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2170
negatives have minimal consequences. It's used internally to avoid using
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2171
potentially broken non-native ES5 shims that have been added to the page by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2172
other libraries.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2174
@method _isNative
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2175
@param {Function} fn Function to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2176
@return {Boolean} `true` if _fn_ appears to be native, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2177
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2178
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2179
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2180
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2181
L._isNative = function (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2182
    return !!(Y.config.useNativeES5 && fn && NATIVE_FN_REGEX.test(fn));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2183
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2185
// -- Public Methods -----------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2187
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2188
 * Determines whether or not the provided item is an array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2189
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2190
 * Returns `false` for array-like collections such as the function `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2191
 * collection or `HTMLElement` collections. Use `Y.Array.test()` if you want to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2192
 * test for an array-like collection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2193
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2194
 * @method isArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2195
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2196
 * @return {boolean} true if o is an array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2197
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2198
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2199
L.isArray = L._isNative(Array.isArray) ? Array.isArray : function (o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2200
    return L.type(o) === 'array';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2201
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2203
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2204
 * Determines whether or not the provided item is a boolean.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2205
 * @method isBoolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2206
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2207
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2208
 * @return {boolean} true if o is a boolean.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2209
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2210
L.isBoolean = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2211
    return typeof o === 'boolean';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2212
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2214
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2215
 * Determines whether or not the supplied item is a date instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2216
 * @method isDate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2217
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2218
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2219
 * @return {boolean} true if o is a date.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2220
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2221
L.isDate = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2222
    return L.type(o) === 'date' && o.toString() !== 'Invalid Date' && !isNaN(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2223
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2225
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2226
 * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2227
 * Determines whether or not the provided item is a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2228
 * Note: Internet Explorer thinks certain functions are objects:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2229
 * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2230
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2231
 * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2232
 * var obj = document.createElement("object");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2233
 * Y.Lang.isFunction(obj.getAttribute) // reports false in IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2234
 * &nbsp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2235
 * var input = document.createElement("input"); // append to body
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2236
 * Y.Lang.isFunction(input.focus) // reports false in IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2237
 * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2238
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2239
 * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2240
 * You will have to implement additional tests if these functions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2241
 * matter to you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2242
 * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2243
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2244
 * @method isFunction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2245
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2246
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2247
 * @return {boolean} true if o is a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2248
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2249
L.isFunction = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2250
    return L.type(o) === 'function';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2251
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2253
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2254
 * Determines whether or not the provided item is null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2255
 * @method isNull
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2256
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2257
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2258
 * @return {boolean} true if o is null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2259
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2260
L.isNull = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2261
    return o === null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2262
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2264
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2265
 * Determines whether or not the provided item is a legal number.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2266
 * @method isNumber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2267
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2268
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2269
 * @return {boolean} true if o is a number.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2270
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2271
L.isNumber = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2272
    return typeof o === 'number' && isFinite(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2273
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2275
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2276
 * Determines whether or not the provided item is of type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2277
 * or function. Note that arrays are also objects, so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2278
 * <code>Y.Lang.isObject([]) === true</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2279
 * @method isObject
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2280
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2281
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2282
 * @param failfn {boolean} fail if the input is a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2283
 * @return {boolean} true if o is an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2284
 * @see isPlainObject
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2285
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2286
L.isObject = function(o, failfn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2287
    var t = typeof o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2288
    return (o && (t === 'object' ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2289
        (!failfn && (t === 'function' || L.isFunction(o))))) || false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2290
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2292
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2293
 * Determines whether or not the provided item is a string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2294
 * @method isString
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2295
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2296
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2297
 * @return {boolean} true if o is a string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2298
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2299
L.isString = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2300
    return typeof o === 'string';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2301
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2302
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2303
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2304
 * Determines whether or not the provided item is undefined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2305
 * @method isUndefined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2306
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2307
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2308
 * @return {boolean} true if o is undefined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2309
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2310
L.isUndefined = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2311
    return typeof o === 'undefined';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2312
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2314
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2315
 * A convenience method for detecting a legitimate non-null value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2316
 * Returns false for null/undefined/NaN, true for other values,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2317
 * including 0/false/''
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2318
 * @method isValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2319
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2320
 * @param o The item to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2321
 * @return {boolean} true if it is not null/undefined/NaN || false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2322
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2323
L.isValue = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2324
    var t = L.type(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2326
    switch (t) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2327
        case 'number':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2328
            return isFinite(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2329
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2330
        case 'null': // fallthru
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2331
        case 'undefined':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2332
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2334
        default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2335
            return !!t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2336
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2337
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2339
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2340
 * Returns the current time in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2341
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2342
 * @method now
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2343
 * @return {Number} Current time in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2344
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2345
 * @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2346
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2347
L.now = Date.now || function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2348
    return new Date().getTime();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2349
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2350
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2351
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2352
 * Lightweight version of <code>Y.substitute</code>. Uses the same template
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2353
 * structure as <code>Y.substitute</code>, but doesn't support recursion,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2354
 * auto-object coersion, or formats.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2355
 * @method sub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2356
 * @param {string} s String to be modified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2357
 * @param {object} o Object containing replacement values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2358
 * @return {string} the substitute result.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2359
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2360
 * @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2361
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2362
L.sub = function(s, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2363
    return s.replace ? s.replace(SUBREGEX, function (match, key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2364
        return L.isUndefined(o[key]) ? match : o[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2365
    }) : s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2366
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2368
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2369
 * Returns a string without any leading or trailing whitespace.  If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2370
 * the input is not a string, the input will be returned untouched.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2371
 * @method trim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2372
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2373
 * @param s {string} the string to trim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2374
 * @return {string} the trimmed string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2375
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2376
L.trim = STRING_PROTO.trim ? function(s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2377
    return s && s.trim ? s.trim() : s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2378
} : function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2379
    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2380
        return s.replace(TRIMREGEX, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2381
    } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2382
        return s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2383
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2384
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2386
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2387
 * Returns a string without any leading whitespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2388
 * @method trimLeft
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2389
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2390
 * @param s {string} the string to trim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2391
 * @return {string} the trimmed string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2392
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2393
L.trimLeft = STRING_PROTO.trimLeft ? function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2394
    return s.trimLeft();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2395
} : function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2396
    return s.replace(/^\s+/, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2397
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2399
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2400
 * Returns a string without any trailing whitespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2401
 * @method trimRight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2402
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2403
 * @param s {string} the string to trim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2404
 * @return {string} the trimmed string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2405
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2406
L.trimRight = STRING_PROTO.trimRight ? function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2407
    return s.trimRight();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2408
} : function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2409
    return s.replace(/\s+$/, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2410
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2412
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2413
Returns one of the following strings, representing the type of the item passed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2414
in:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2416
 * "array"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2417
 * "boolean"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2418
 * "date"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2419
 * "error"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2420
 * "function"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2421
 * "null"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2422
 * "number"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2423
 * "object"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2424
 * "regexp"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2425
 * "string"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2426
 * "undefined"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2428
Known issues:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2430
 * `typeof HTMLElementCollection` returns function in Safari, but
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2431
    `Y.Lang.type()` reports "object", which could be a good thing --
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2432
    but it actually caused the logic in <code>Y.Lang.isObject</code> to fail.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2434
@method type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2435
@param o the item to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2436
@return {string} the detected type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2437
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2438
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2439
L.type = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2440
    return TYPES[typeof o] || TYPES[TOSTRING.call(o)] || (o ? 'object' : 'null');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2441
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2442
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2443
@module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2444
@submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2445
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2447
var Lang   = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2448
    Native = Array.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2450
    hasOwn = Object.prototype.hasOwnProperty;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2452
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2453
Provides utility methods for working with arrays. Additional array helpers can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2454
be found in the `collection` and `array-extras` modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2456
`Y.Array(thing)` returns a native array created from _thing_. Depending on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2457
_thing_'s type, one of the following will happen:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2459
  * Arrays are returned unmodified unless a non-zero _startIndex_ is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2460
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2461
  * Array-like collections (see `Array.test()`) are converted to arrays.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2462
  * For everything else, a new array is created with _thing_ as the sole
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2463
    item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2465
Note: elements that are also collections, such as `<form>` and `<select>`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2466
elements, are not automatically converted to arrays. To force a conversion,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2467
pass `true` as the value of the _force_ parameter.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2468
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2469
@class Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2470
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2471
@param {Any} thing The thing to arrayify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2472
@param {Number} [startIndex=0] If non-zero and _thing_ is an array or array-like
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2473
  collection, a subset of items starting at the specified index will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2474
  returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2475
@param {Boolean} [force=false] If `true`, _thing_ will be treated as an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2476
  array-like collection no matter what.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2477
@return {Array} A native array created from _thing_, according to the rules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2478
  described above.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2479
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2480
function YArray(thing, startIndex, force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2481
    var len, result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2483
    /*jshint expr: true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2484
    startIndex || (startIndex = 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2486
    if (force || YArray.test(thing)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2487
        // IE throws when trying to slice HTMLElement collections.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2488
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2489
            return Native.slice.call(thing, startIndex);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2490
        } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2491
            result = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2493
            for (len = thing.length; startIndex < len; ++startIndex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2494
                result.push(thing[startIndex]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2495
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2497
            return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2498
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2499
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2501
    return [thing];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2502
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2504
Y.Array = YArray;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2506
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2507
Dedupes an array of strings, returning an array that's guaranteed to contain
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2508
only one copy of a given string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2510
This method differs from `Array.unique()` in that it's optimized for use only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2511
with strings, whereas `unique` may be used with other types (but is slower).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2512
Using `dedupe()` with non-string values may result in unexpected behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2513
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2514
@method dedupe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2515
@param {String[]} array Array of strings to dedupe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2516
@return {Array} Deduped copy of _array_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2517
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2518
@since 3.4.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2519
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2520
YArray.dedupe = function (array) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2521
    var hash    = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2522
        results = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2523
        i, item, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2525
    for (i = 0, len = array.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2526
        item = array[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2528
        if (!hasOwn.call(hash, item)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2529
            hash[item] = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2530
            results.push(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2531
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2532
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2533
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2534
    return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2535
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2537
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2538
Executes the supplied function on each item in the array. This method wraps
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2539
the native ES5 `Array.forEach()` method if available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2541
@method each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2542
@param {Array} array Array to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2543
@param {Function} fn Function to execute on each item in the array. The function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2544
  will receive the following arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2545
    @param {Any} fn.item Current array item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2546
    @param {Number} fn.index Current array index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2547
    @param {Array} fn.array Array being iterated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2548
@param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2549
@return {YUI} The YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2550
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2551
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2552
YArray.each = YArray.forEach = Lang._isNative(Native.forEach) ? function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2553
    Native.forEach.call(array || [], fn, thisObj || Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2554
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2555
} : function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2556
    for (var i = 0, len = (array && array.length) || 0; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2557
        if (i in array) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2558
            fn.call(thisObj || Y, array[i], i, array);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2559
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2560
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2562
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2563
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2565
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2566
Alias for `each()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2568
@method forEach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2569
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2570
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2572
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2573
Returns an object using the first array as keys and the second as values. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2574
the second array is not provided, or if it doesn't contain the same number of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2575
values as the first array, then `true` will be used in place of the missing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2576
values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2578
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2580
    Y.Array.hash(['a', 'b', 'c'], ['foo', 'bar']);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2581
    // => {a: 'foo', b: 'bar', c: true}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2582
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2583
@method hash
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2584
@param {String[]} keys Array of strings to use as keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2585
@param {Array} [values] Array to use as values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2586
@return {Object} Hash using the first array as keys and the second as values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2587
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2588
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2589
YArray.hash = function (keys, values) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2590
    var hash = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2591
        vlen = (values && values.length) || 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2592
        i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2593
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2594
    for (i = 0, len = keys.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2595
        if (i in keys) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2596
            hash[keys[i]] = vlen > i && i in values ? values[i] : true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2597
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2598
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2600
    return hash;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2601
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2603
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2604
Returns the index of the first item in the array that's equal (using a strict
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2605
equality check) to the specified _value_, or `-1` if the value isn't found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2607
This method wraps the native ES5 `Array.indexOf()` method if available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2609
@method indexOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2610
@param {Array} array Array to search.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2611
@param {Any} value Value to search for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2612
@param {Number} [from=0] The index at which to begin the search.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2613
@return {Number} Index of the item strictly equal to _value_, or `-1` if not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2614
    found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2615
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2616
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2617
YArray.indexOf = Lang._isNative(Native.indexOf) ? function (array, value, from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2618
    return Native.indexOf.call(array, value, from);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2619
} : function (array, value, from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2620
    // http://es5.github.com/#x15.4.4.14
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2621
    var len = array.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2622
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2623
    from = +from || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2624
    from = (from > 0 || -1) * Math.floor(Math.abs(from));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2625
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2626
    if (from < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2627
        from += len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2629
        if (from < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2630
            from = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2631
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2632
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2633
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2634
    for (; from < len; ++from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2635
        if (from in array && array[from] === value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2636
            return from;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2637
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2638
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2639
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2640
    return -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2641
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2643
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2644
Numeric sort convenience function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2645
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2646
The native `Array.prototype.sort()` function converts values to strings and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2647
sorts them in lexicographic order, which is unsuitable for sorting numeric
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2648
values. Provide `Array.numericSort` as a custom sort function when you want
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2649
to sort values in numeric order.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2651
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2653
    [42, 23, 8, 16, 4, 15].sort(Y.Array.numericSort);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2654
    // => [4, 8, 15, 16, 23, 42]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2656
@method numericSort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2657
@param {Number} a First value to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2658
@param {Number} b Second value to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2659
@return {Number} Difference between _a_ and _b_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2660
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2661
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2662
YArray.numericSort = function (a, b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2663
    return a - b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2664
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2665
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2666
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2667
Executes the supplied function on each item in the array. Returning a truthy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2668
value from the function will stop the processing of remaining items.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2670
@method some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2671
@param {Array} array Array to iterate over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2672
@param {Function} fn Function to execute on each item. The function will receive
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2673
  the following arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2674
    @param {Any} fn.value Current array item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2675
    @param {Number} fn.index Current array index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2676
    @param {Array} fn.array Array being iterated over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2677
@param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2678
@return {Boolean} `true` if the function returns a truthy value on any of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2679
  items in the array; `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2680
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2681
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2682
YArray.some = Lang._isNative(Native.some) ? function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2683
    return Native.some.call(array, fn, thisObj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2684
} : function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2685
    for (var i = 0, len = array.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2686
        if (i in array && fn.call(thisObj, array[i], i, array)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2687
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2688
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2689
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2691
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2692
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2694
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2695
Evaluates _obj_ to determine if it's an array, an array-like collection, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2696
something else. This is useful when working with the function `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2697
collection and `HTMLElement` collections.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2699
Note: This implementation doesn't consider elements that are also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2700
collections, such as `<form>` and `<select>`, to be array-like.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2702
@method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2703
@param {Object} obj Object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2704
@return {Number} A number indicating the results of the test:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2706
  * 0: Neither an array nor an array-like collection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2707
  * 1: Real array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2708
  * 2: Array-like collection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2710
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2711
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2712
YArray.test = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2713
    var result = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2715
    if (Lang.isArray(obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2716
        result = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2717
    } else if (Lang.isObject(obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2718
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2719
            // indexed, but no tagName (element) or scrollTo/document (window. From DOM.isWindow test which we can't use here),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2720
            // or functions without apply/call (Safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2721
            // HTMLElementCollection bug).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2722
            if ('length' in obj && !obj.tagName && !(obj.scrollTo && obj.document) && !obj.apply) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2723
                result = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2724
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2725
        } catch (ex) {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2726
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2728
    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2729
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2730
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2731
 * The YUI module contains the components required for building the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2732
 * seed file.  This includes the script loading mechanism, a simple queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2733
 * and the core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2734
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2735
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2736
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2737
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2738
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2739
 * A simple FIFO queue.  Items are added to the Queue with add(1..n items) and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2740
 * removed using next().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2741
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2742
 * @class Queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2743
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2744
 * @param {MIXED} item* 0..n items to seed the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2745
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2746
function Queue() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2747
    this._init();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2748
    this.add.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2749
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2751
Queue.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2752
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2753
     * Initialize the queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2754
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2755
     * @method _init
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2756
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2757
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2758
    _init: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2759
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2760
         * The collection of enqueued items
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2761
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2762
         * @property _q
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2763
         * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2764
         * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2765
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2766
        this._q = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2767
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2769
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2770
     * Get the next item in the queue. FIFO support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2771
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2772
     * @method next
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2773
     * @return {MIXED} the next item in the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2774
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2775
    next: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2776
        return this._q.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2777
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2779
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2780
     * Get the last in the queue. LIFO support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2781
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2782
     * @method last
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2783
     * @return {MIXED} the last item in the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2784
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2785
    last: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2786
        return this._q.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2787
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2789
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2790
     * Add 0..n items to the end of the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2791
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2792
     * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2793
     * @param {MIXED} item* 0..n items.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2794
     * @return {object} this queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2795
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2796
    add: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2797
        this._q.push.apply(this._q, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2799
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2800
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2802
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2803
     * Returns the current number of queued items.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2804
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2805
     * @method size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2806
     * @return {Number} The size.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2807
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2808
    size: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2809
        return this._q.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2810
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2811
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2813
Y.Queue = Queue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2815
YUI.Env._loaderQueue = YUI.Env._loaderQueue || new Queue();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2817
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2818
The YUI module contains the components required for building the YUI seed file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2819
This includes the script loading mechanism, a simple queue, and the core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2820
utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2822
@module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2823
@submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2824
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2825
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2826
var CACHED_DELIMITER = '__',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2828
    hasOwn   = Object.prototype.hasOwnProperty,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2829
    isObject = Y.Lang.isObject;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2830
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2831
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2832
Returns a wrapper for a function which caches the return value of that function,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2833
keyed off of the combined string representation of the argument values provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2834
when the wrapper is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2835
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2836
Calling this function again with the same arguments will return the cached value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2837
rather than executing the wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2839
Note that since the cache is keyed off of the string representation of arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2840
passed to the wrapper function, arguments that aren't strings and don't provide
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2841
a meaningful `toString()` method may result in unexpected caching behavior. For
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2842
example, the objects `{}` and `{foo: 'bar'}` would both be converted to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2843
string `[object Object]` when used as a cache key.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2844
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2845
@method cached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2846
@param {Function} source The function to memoize.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2847
@param {Object} [cache={}] Object in which to store cached values. You may seed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2848
  this object with pre-existing cached values if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2849
@param {any} [refetch] If supplied, this value is compared with the cached value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2850
  using a `==` comparison. If the values are equal, the wrapped function is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2851
  executed again even though a cached value exists.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2852
@return {Function} Wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2853
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2854
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2855
Y.cached = function (source, cache, refetch) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2856
    /*jshint expr: true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2857
    cache || (cache = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2858
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2859
    return function (arg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2860
        var key = arguments.length > 1 ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2861
                Array.prototype.join.call(arguments, CACHED_DELIMITER) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2862
                String(arg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2863
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2864
        /*jshint eqeqeq: false*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2865
        if (!(key in cache) || (refetch && cache[key] == refetch)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2866
            cache[key] = source.apply(source, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2867
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2868
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2869
        return cache[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2870
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2871
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2873
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2874
Returns the `location` object from the window/frame in which this YUI instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2875
operates, or `undefined` when executing in a non-browser environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2876
(e.g. Node.js).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2877
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2878
It is _not_ recommended to hold references to the `window.location` object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2879
outside of the scope of a function in which its properties are being accessed or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2880
its methods are being called. This is because of a nasty bug/issue that exists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2881
in both Safari and MobileSafari browsers:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2882
[WebKit Bug 34679](https://bugs.webkit.org/show_bug.cgi?id=34679).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2884
@method getLocation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2885
@return {location} The `location` object from the window/frame in which this YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2886
    instance operates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2887
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2888
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2889
Y.getLocation = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2890
    // It is safer to look this up every time because yui-base is attached to a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2891
    // YUI instance before a user's config is applied; i.e. `Y.config.win` does
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2892
    // not point the correct window object when this file is loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2893
    var win = Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2894
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2895
    // It is not safe to hold a reference to the `location` object outside the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2896
    // scope in which it is being used. The WebKit engine used in Safari and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2897
    // MobileSafari will "disconnect" the `location` object from the `window`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2898
    // when a page is restored from back/forward history cache.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2899
    return win && win.location;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2900
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2901
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2902
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2903
Returns a new object containing all of the properties of all the supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2904
objects. The properties from later objects will overwrite those in earlier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2905
objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2907
Passing in a single object will create a shallow copy of it. For a deep copy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2908
use `clone()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2910
@method merge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2911
@param {Object} objects* One or more objects to merge.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2912
@return {Object} A new merged object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2913
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2914
Y.merge = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2915
    var i      = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2916
        len    = arguments.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2917
        result = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2918
        key,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2919
        obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2920
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2921
    for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2922
        obj = arguments[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2924
        for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2925
            if (hasOwn.call(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2926
                result[key] = obj[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2927
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2928
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2929
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2930
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2931
    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2932
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2934
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2935
Mixes _supplier_'s properties into _receiver_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2936
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2937
Properties on _receiver_ or _receiver_'s prototype will not be overwritten or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2938
shadowed unless the _overwrite_ parameter is `true`, and will not be merged
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2939
unless the _merge_ parameter is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2941
In the default mode (0), only properties the supplier owns are copied (prototype
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2942
properties are not copied). The following copying modes are available:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2944
  * `0`: _Default_. Object to object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2945
  * `1`: Prototype to prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2946
  * `2`: Prototype to prototype and object to object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2947
  * `3`: Prototype to object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2948
  * `4`: Object to prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2949
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2950
@method mix
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2951
@param {Function|Object} receiver The object or function to receive the mixed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2952
  properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2953
@param {Function|Object} supplier The object or function supplying the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2954
  properties to be mixed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2955
@param {Boolean} [overwrite=false] If `true`, properties that already exist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2956
  on the receiver will be overwritten with properties from the supplier.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2957
@param {String[]} [whitelist] An array of property names to copy. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2958
  specified, only the whitelisted properties will be copied, and all others
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2959
  will be ignored.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2960
@param {Number} [mode=0] Mix mode to use. See above for available modes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2961
@param {Boolean} [merge=false] If `true`, objects and arrays that already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2962
  exist on the receiver will have the corresponding object/array from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2963
  supplier merged into them, rather than being skipped or overwritten. When
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2964
  both _overwrite_ and _merge_ are `true`, _merge_ takes precedence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2965
@return {Function|Object|YUI} The receiver, or the YUI instance if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2966
  specified receiver is falsy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2967
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2968
Y.mix = function(receiver, supplier, overwrite, whitelist, mode, merge) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2969
    var alwaysOverwrite, exists, from, i, key, len, to;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2970
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2971
    // If no supplier is given, we return the receiver. If no receiver is given,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2972
    // we return Y. Returning Y doesn't make much sense to me, but it's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2973
    // grandfathered in for backcompat reasons.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2974
    if (!receiver || !supplier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2975
        return receiver || Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2976
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2977
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2978
    if (mode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2979
        // In mode 2 (prototype to prototype and object to object), we recurse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2980
        // once to do the proto to proto mix. The object to object mix will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2981
        // handled later on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2982
        if (mode === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2983
            Y.mix(receiver.prototype, supplier.prototype, overwrite,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2984
                    whitelist, 0, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2985
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2987
        // Depending on which mode is specified, we may be copying from or to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2988
        // the prototypes of the supplier and receiver.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2989
        from = mode === 1 || mode === 3 ? supplier.prototype : supplier;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2990
        to   = mode === 1 || mode === 4 ? receiver.prototype : receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2992
        // If either the supplier or receiver doesn't actually have a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2993
        // prototype property, then we could end up with an undefined `from`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2994
        // or `to`. If that happens, we abort and return the receiver.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2995
        if (!from || !to) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2996
            return receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2997
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2998
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2999
        from = supplier;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3000
        to   = receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3001
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3002
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3003
    // If `overwrite` is truthy and `merge` is falsy, then we can skip a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3004
    // property existence check on each iteration and save some time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3005
    alwaysOverwrite = overwrite && !merge;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3006
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3007
    if (whitelist) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3008
        for (i = 0, len = whitelist.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3009
            key = whitelist[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3011
            // We call `Object.prototype.hasOwnProperty` instead of calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3012
            // `hasOwnProperty` on the object itself, since the object's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3013
            // `hasOwnProperty` method may have been overridden or removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3014
            // Also, some native objects don't implement a `hasOwnProperty`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3015
            // method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3016
            if (!hasOwn.call(from, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3017
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3018
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3019
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3020
            // The `key in to` check here is (sadly) intentional for backwards
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3021
            // compatibility reasons. It prevents undesired shadowing of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3022
            // prototype members on `to`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3023
            exists = alwaysOverwrite ? false : key in to;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3025
            if (merge && exists && isObject(to[key], true)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3026
                    && isObject(from[key], true)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3027
                // If we're in merge mode, and the key is present on both
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3028
                // objects, and the value on both objects is either an object or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3029
                // an array (but not a function), then we recurse to merge the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3030
                // `from` value into the `to` value instead of overwriting it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3031
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3032
                // Note: It's intentional that the whitelist isn't passed to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3033
                // recursive call here. This is legacy behavior that lots of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3034
                // code still depends on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3035
                Y.mix(to[key], from[key], overwrite, null, 0, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3036
            } else if (overwrite || !exists) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3037
                // We're not in merge mode, so we'll only copy the `from` value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3038
                // to the `to` value if we're in overwrite mode or if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3039
                // current key doesn't exist on the `to` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3040
                to[key] = from[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3041
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3042
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3043
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3044
        for (key in from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3045
            // The code duplication here is for runtime performance reasons.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3046
            // Combining whitelist and non-whitelist operations into a single
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3047
            // loop or breaking the shared logic out into a function both result
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3048
            // in worse performance, and Y.mix is critical enough that the byte
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3049
            // tradeoff is worth it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3050
            if (!hasOwn.call(from, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3051
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3052
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3053
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3054
            // The `key in to` check here is (sadly) intentional for backwards
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3055
            // compatibility reasons. It prevents undesired shadowing of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3056
            // prototype members on `to`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3057
            exists = alwaysOverwrite ? false : key in to;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3058
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3059
            if (merge && exists && isObject(to[key], true)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3060
                    && isObject(from[key], true)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3061
                Y.mix(to[key], from[key], overwrite, null, 0, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3062
            } else if (overwrite || !exists) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3063
                to[key] = from[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3064
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3065
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3066
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3067
        // If this is an IE browser with the JScript enumeration bug, force
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3068
        // enumeration of the buggy properties by making a recursive call with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3069
        // the buggy properties as the whitelist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3070
        if (Y.Object._hasEnumBug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3071
            Y.mix(to, from, overwrite, Y.Object._forceEnum, mode, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3072
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3073
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3074
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3075
    return receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3076
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3077
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3078
 * The YUI module contains the components required for building the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3079
 * seed file.  This includes the script loading mechanism, a simple queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3080
 * and the core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3081
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3082
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3083
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3085
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3086
 * Adds utilities to the YUI instance for working with objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3087
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3088
 * @class Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3089
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3090
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3091
var Lang   = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3092
    hasOwn = Object.prototype.hasOwnProperty,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3094
    UNDEFINED, // <-- Note the comma. We're still declaring vars.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3095
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3096
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3097
 * Returns a new object that uses _obj_ as its prototype. This method wraps the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3098
 * native ES5 `Object.create()` method if available, but doesn't currently
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3099
 * pass through `Object.create()`'s second argument (properties) in order to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3100
 * ensure compatibility with older browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3101
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3102
 * @method ()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3103
 * @param {Object} obj Prototype object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3104
 * @return {Object} New object using _obj_ as its prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3105
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3106
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3107
O = Y.Object = Lang._isNative(Object.create) ? function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3108
    // We currently wrap the native Object.create instead of simply aliasing it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3109
    // to ensure consistency with our fallback shim, which currently doesn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3110
    // support Object.create()'s second argument (properties). Once we have a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3111
    // safe fallback for the properties arg, we can stop wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3112
    // Object.create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3113
    return Object.create(obj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3114
} : (function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3115
    // Reusable constructor function for the Object.create() shim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3116
    function F() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3118
    // The actual shim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3119
    return function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3120
        F.prototype = obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3121
        return new F();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3122
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3123
}()),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3125
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3126
 * Property names that IE doesn't enumerate in for..in loops, even when they
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3127
 * should be enumerable. When `_hasEnumBug` is `true`, it's necessary to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3128
 * manually enumerate these properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3129
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3130
 * @property _forceEnum
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3131
 * @type String[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3132
 * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3133
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3134
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3135
forceEnum = O._forceEnum = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3136
    'hasOwnProperty',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3137
    'isPrototypeOf',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3138
    'propertyIsEnumerable',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3139
    'toString',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3140
    'toLocaleString',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3141
    'valueOf'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3142
],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3144
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3145
 * `true` if this browser has the JScript enumeration bug that prevents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3146
 * enumeration of the properties named in the `_forceEnum` array, `false`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3147
 * otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3148
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3149
 * See:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3150
 *   - <https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3151
 *   - <http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3152
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3153
 * @property _hasEnumBug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3154
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3155
 * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3156
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3157
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3158
hasEnumBug = O._hasEnumBug = !{valueOf: 0}.propertyIsEnumerable('valueOf'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3160
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3161
 * `true` if this browser incorrectly considers the `prototype` property of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3162
 * functions to be enumerable. Currently known to affect Opera 11.50.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3163
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3164
 * @property _hasProtoEnumBug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3165
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3166
 * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3167
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3168
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3169
hasProtoEnumBug = O._hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3171
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3172
 * Returns `true` if _key_ exists on _obj_, `false` if _key_ doesn't exist or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3173
 * exists only on _obj_'s prototype. This is essentially a safer version of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3174
 * `obj.hasOwnProperty()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3175
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3176
 * @method owns
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3177
 * @param {Object} obj Object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3178
 * @param {String} key Property name to look for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3179
 * @return {Boolean} `true` if _key_ exists on _obj_, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3180
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3181
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3182
owns = O.owns = function (obj, key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3183
    return !!obj && hasOwn.call(obj, key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3184
}; // <-- End of var declarations.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3186
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3187
 * Alias for `owns()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3188
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3189
 * @method hasKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3190
 * @param {Object} obj Object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3191
 * @param {String} key Property name to look for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3192
 * @return {Boolean} `true` if _key_ exists on _obj_, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3193
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3194
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3195
O.hasKey = owns;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3197
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3198
 * Returns an array containing the object's enumerable keys. Does not include
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3199
 * prototype keys or non-enumerable keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3200
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3201
 * Note that keys are returned in enumeration order (that is, in the same order
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3202
 * that they would be enumerated by a `for-in` loop), which may not be the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3203
 * as the order in which they were defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3204
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3205
 * This method is an alias for the native ES5 `Object.keys()` method if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3206
 * available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3207
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3208
 * @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3209
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3210
 *     Y.Object.keys({a: 'foo', b: 'bar', c: 'baz'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3211
 *     // => ['a', 'b', 'c']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3212
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3213
 * @method keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3214
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3215
 * @return {String[]} Array of keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3216
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3217
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3218
O.keys = Lang._isNative(Object.keys) ? Object.keys : function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3219
    if (!Lang.isObject(obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3220
        throw new TypeError('Object.keys called on a non-object');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3221
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3223
    var keys = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3224
        i, key, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3226
    if (hasProtoEnumBug && typeof obj === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3227
        for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3228
            if (owns(obj, key) && key !== 'prototype') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3229
                keys.push(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3230
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3231
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3232
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3233
        for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3234
            if (owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3235
                keys.push(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3236
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3237
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3238
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3240
    if (hasEnumBug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3241
        for (i = 0, len = forceEnum.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3242
            key = forceEnum[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3244
            if (owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3245
                keys.push(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3246
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3247
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3248
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3250
    return keys;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3251
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3253
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3254
 * Returns an array containing the values of the object's enumerable keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3255
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3256
 * Note that values are returned in enumeration order (that is, in the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3257
 * order that they would be enumerated by a `for-in` loop), which may not be the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3258
 * same as the order in which they were defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3259
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3260
 * @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3261
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3262
 *     Y.Object.values({a: 'foo', b: 'bar', c: 'baz'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3263
 *     // => ['foo', 'bar', 'baz']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3264
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3265
 * @method values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3266
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3267
 * @return {Array} Array of values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3268
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3269
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3270
O.values = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3271
    var keys   = O.keys(obj),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3272
        i      = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3273
        len    = keys.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3274
        values = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3276
    for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3277
        values.push(obj[keys[i]]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3278
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3280
    return values;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3281
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3283
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3284
 * Returns the number of enumerable keys owned by an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3285
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3286
 * @method size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3287
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3288
 * @return {Number} The object's size.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3289
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3290
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3291
O.size = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3292
    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3293
        return O.keys(obj).length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3294
    } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3295
        return 0; // Legacy behavior for non-objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3296
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3297
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3299
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3300
 * Returns `true` if the object owns an enumerable property with the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3301
 * value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3302
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3303
 * @method hasValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3304
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3305
 * @param {any} value The value to search for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3306
 * @return {Boolean} `true` if _obj_ contains _value_, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3307
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3308
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3309
O.hasValue = function (obj, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3310
    return Y.Array.indexOf(O.values(obj), value) > -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3311
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3313
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3314
 * Executes a function on each enumerable property in _obj_. The function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3315
 * receives the value, the key, and the object itself as parameters (in that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3316
 * order).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3317
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3318
 * By default, only properties owned by _obj_ are enumerated. To include
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3319
 * prototype properties, set the _proto_ parameter to `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3320
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3321
 * @method each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3322
 * @param {Object} obj Object to enumerate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3323
 * @param {Function} fn Function to execute on each enumerable property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3324
 *   @param {mixed} fn.value Value of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3325
 *   @param {String} fn.key Key of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3326
 *   @param {Object} fn.obj Object being enumerated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3327
 * @param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3328
 * @param {Boolean} [proto=false] Include prototype properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3329
 * @return {YUI} the YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3330
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3331
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3332
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3333
O.each = function (obj, fn, thisObj, proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3334
    var key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3336
    for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3337
        if (proto || owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3338
            fn.call(thisObj || Y, obj[key], key, obj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3339
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3340
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3342
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3343
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3345
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3346
 * Executes a function on each enumerable property in _obj_, but halts if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3347
 * function returns a truthy value. The function receives the value, the key,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3348
 * and the object itself as paramters (in that order).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3349
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3350
 * By default, only properties owned by _obj_ are enumerated. To include
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3351
 * prototype properties, set the _proto_ parameter to `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3352
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3353
 * @method some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3354
 * @param {Object} obj Object to enumerate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3355
 * @param {Function} fn Function to execute on each enumerable property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3356
 *   @param {mixed} fn.value Value of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3357
 *   @param {String} fn.key Key of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3358
 *   @param {Object} fn.obj Object being enumerated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3359
 * @param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3360
 * @param {Boolean} [proto=false] Include prototype properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3361
 * @return {Boolean} `true` if any execution of _fn_ returns a truthy value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3362
 *   `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3363
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3364
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3365
O.some = function (obj, fn, thisObj, proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3366
    var key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3368
    for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3369
        if (proto || owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3370
            if (fn.call(thisObj || Y, obj[key], key, obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3371
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3372
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3373
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3374
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3376
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3377
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3379
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3380
 * Retrieves the sub value at the provided path,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3381
 * from the value object provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3382
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3383
 * @method getValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3384
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3385
 * @param o The object from which to extract the property value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3386
 * @param path {Array} A path array, specifying the object traversal path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3387
 * from which to obtain the sub value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3388
 * @return {Any} The value stored in the path, undefined if not found,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3389
 * undefined if the source is not an object.  Returns the source object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3390
 * if an empty path is provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3391
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3392
O.getValue = function(o, path) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3393
    if (!Lang.isObject(o)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3394
        return UNDEFINED;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3395
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3397
    var i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3398
        p = Y.Array(path),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3399
        l = p.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3400
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3401
    for (i = 0; o !== UNDEFINED && i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3402
        o = o[p[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3403
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3404
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3405
    return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3406
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3407
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3408
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3409
 * Sets the sub-attribute value at the provided path on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3410
 * value object.  Returns the modified value object, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3411
 * undefined if the path is invalid.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3412
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3413
 * @method setValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3414
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3415
 * @param o             The object on which to set the sub value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3416
 * @param path {Array}  A path array, specifying the object traversal path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3417
 *                      at which to set the sub value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3418
 * @param val {Any}     The new value for the sub-attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3419
 * @return {Object}     The modified object, with the new sub value set, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3420
 *                      undefined, if the path was invalid.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3421
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3422
O.setValue = function(o, path, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3423
    var i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3424
        p = Y.Array(path),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3425
        leafIdx = p.length - 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3426
        ref = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3428
    if (leafIdx >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3429
        for (i = 0; ref !== UNDEFINED && i < leafIdx; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3430
            ref = ref[p[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3431
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3433
        if (ref !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3434
            ref[p[i]] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3435
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3436
            return UNDEFINED;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3437
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3438
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3440
    return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3441
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3443
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3444
 * Returns `true` if the object has no enumerable properties of its own.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3445
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3446
 * @method isEmpty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3447
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3448
 * @return {Boolean} `true` if the object is empty.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3449
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3450
 * @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3451
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3452
O.isEmpty = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3453
    return !O.keys(Object(obj)).length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3454
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3455
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3456
 * The YUI module contains the components required for building the YUI seed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3457
 * file.  This includes the script loading mechanism, a simple queue, and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3458
 * core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3459
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3460
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3461
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3463
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3464
 * YUI user agent detection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3465
 * Do not fork for a browser if it can be avoided.  Use feature detection when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3466
 * you can.  Use the user agent as a last resort.  For all fields listed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3467
 * as @type float, UA stores a version number for the browser engine,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3468
 * 0 otherwise.  This value may or may not map to the version number of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3469
 * the browser using the engine.  The value is presented as a float so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3470
 * that it can easily be used for boolean evaluation as well as for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3471
 * looking for a particular range of versions.  Because of this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3472
 * some of the granularity of the version info may be lost.  The fields that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3473
 * are @type string default to null.  The API docs list the values that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3474
 * these fields can have.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3475
 * @class UA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3476
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3477
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3478
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3479
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3480
* Static method on `YUI.Env` for parsing a UA string.  Called at instantiation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3481
* to populate `Y.UA`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3482
*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3483
* @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3484
* @method parseUA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3485
* @param {String} [subUA=navigator.userAgent] UA string to parse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3486
* @return {Object} The Y.UA object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3487
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3488
YUI.Env.parseUA = function(subUA) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3490
    var numberify = function(s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3491
            var c = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3492
            return parseFloat(s.replace(/\./g, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3493
                return (c++ === 1) ? '' : '.';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3494
            }));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3495
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3497
        win = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3499
        nav = win && win.navigator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3501
        o = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3503
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3504
         * Internet Explorer version number or 0.  Example: 6
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3505
         * @property ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3506
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3507
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3508
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3509
        ie: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3511
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3512
         * Opera version number or 0.  Example: 9.2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3513
         * @property opera
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3514
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3515
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3516
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3517
        opera: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3519
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3520
         * Gecko engine revision number.  Will evaluate to 1 if Gecko
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3521
         * is detected but the revision could not be found. Other browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3522
         * will be 0.  Example: 1.8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3523
         * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3524
         * Firefox 1.0.0.4: 1.7.8   <-- Reports 1.7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3525
         * Firefox 1.5.0.9: 1.8.0.9 <-- 1.8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3526
         * Firefox 2.0.0.3: 1.8.1.3 <-- 1.81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3527
         * Firefox 3.0   <-- 1.9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3528
         * Firefox 3.5   <-- 1.91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3529
         * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3530
         * @property gecko
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3531
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3532
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3533
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3534
        gecko: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3536
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3537
         * AppleWebKit version.  KHTML browsers that are not WebKit browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3538
         * will evaluate to 1, other browsers 0.  Example: 418.9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3539
         * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3540
         * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3541
         *                                   latest available for Mac OSX 10.3.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3542
         * Safari 2.0.2:         416     <-- hasOwnProperty introduced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3543
         * Safari 2.0.4:         418     <-- preventDefault fixed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3544
         * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3545
         *                                   different versions of webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3546
         * Safari 2.0.4 (419.3): 419     <-- Tiger installations that have been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3547
         *                                   updated, but not updated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3548
         *                                   to the latest patch.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3549
         * Webkit 212 nightly:   522+    <-- Safari 3.0 precursor (with native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3550
         * SVG and many major issues fixed).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3551
         * Safari 3.0.4 (523.12) 523.12  <-- First Tiger release - automatic
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3552
         * update from 2.x via the 10.4.11 OS patch.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3553
         * Webkit nightly 1/2008:525+    <-- Supports DOMContentLoaded event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3554
         *                                   yahoo.com user agent hack removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3555
         * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3556
         * http://en.wikipedia.org/wiki/Safari_version_history
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3557
         * @property webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3558
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3559
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3560
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3561
        webkit: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3562
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3563
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3564
         * Safari will be detected as webkit, but this property will also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3565
         * be populated with the Safari version number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3566
         * @property safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3567
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3568
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3569
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3570
        safari: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3572
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3573
         * Chrome will be detected as webkit, but this property will also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3574
         * be populated with the Chrome version number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3575
         * @property chrome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3576
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3577
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3578
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3579
        chrome: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3581
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3582
         * The mobile property will be set to a string containing any relevant
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3583
         * user agent information when a modern mobile browser is detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3584
         * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3585
         * devices with the WebKit-based browser, and Opera Mini.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3586
         * @property mobile
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3587
         * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3588
         * @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3589
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3590
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3591
        mobile: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3593
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3594
         * Adobe AIR version number or 0.  Only populated if webkit is detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3595
         * Example: 1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3596
         * @property air
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3597
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3598
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3599
        air: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3600
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3601
         * PhantomJS version number or 0.  Only populated if webkit is detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3602
         * Example: 1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3603
         * @property phantomjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3604
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3605
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3606
        phantomjs: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3607
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3608
         * Detects Apple iPad's OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3609
         * @property ipad
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3610
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3611
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3612
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3613
        ipad: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3614
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3615
         * Detects Apple iPhone's OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3616
         * @property iphone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3617
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3618
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3619
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3620
        iphone: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3621
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3622
         * Detects Apples iPod's OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3623
         * @property ipod
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3624
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3625
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3626
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3627
        ipod: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3628
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3629
         * General truthy check for iPad, iPhone or iPod
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3630
         * @property ios
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3631
         * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3632
         * @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3633
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3634
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3635
        ios: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3636
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3637
         * Detects Googles Android OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3638
         * @property android
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3639
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3640
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3641
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3642
        android: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3643
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3644
         * Detects Kindle Silk
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3645
         * @property silk
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3646
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3647
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3648
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3649
        silk: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3650
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3651
         * Detects Kindle Silk Acceleration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3652
         * @property accel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3653
         * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3654
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3655
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3656
        accel: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3657
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3658
         * Detects Palms WebOS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3659
         * @property webos
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3660
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3661
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3662
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3663
        webos: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3665
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3666
         * Google Caja version number or 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3667
         * @property caja
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3668
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3669
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3670
        caja: nav && nav.cajaVersion,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3672
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3673
         * Set to true if the page appears to be in SSL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3674
         * @property secure
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3675
         * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3676
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3677
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3678
        secure: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3679
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3680
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3681
         * The operating system.  Currently only detecting windows or macintosh
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3682
         * @property os
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3683
         * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3684
         * @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3685
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3686
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3687
        os: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3689
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3690
         * The Nodejs Version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3691
         * @property nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3692
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3693
         * @default 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3694
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3695
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3696
        nodejs: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3697
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3698
        * Window8/IE10 Application host environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3699
        * @property winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3700
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3701
        * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3702
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3703
        winjs: !!((typeof Windows !== "undefined") && Windows.System),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3704
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3705
        * Are touch/msPointer events available on this device
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3706
        * @property touchEnabled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3707
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3708
        * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3709
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3710
        touchEnabled: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3711
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3713
    ua = subUA || nav && nav.userAgent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3715
    loc = win && win.location,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3717
    href = loc && loc.href,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3718
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3719
    m;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3721
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3722
    * The User Agent string that was parsed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3723
    * @property userAgent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3724
    * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3725
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3726
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3727
    o.userAgent = ua;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3728
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3730
    o.secure = href && (href.toLowerCase().indexOf('https') === 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3732
    if (ua) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3733
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3734
        if ((/windows|win32/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3735
            o.os = 'windows';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3736
        } else if ((/macintosh|mac_powerpc/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3737
            o.os = 'macintosh';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3738
        } else if ((/android/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3739
            o.os = 'android';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3740
        } else if ((/symbos/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3741
            o.os = 'symbos';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3742
        } else if ((/linux/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3743
            o.os = 'linux';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3744
        } else if ((/rhino/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3745
            o.os = 'rhino';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3746
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3748
        // Modern KHTML browsers should qualify as Safari X-Grade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3749
        if ((/KHTML/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3750
            o.webkit = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3751
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3752
        if ((/IEMobile|XBLWP7/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3753
            o.mobile = 'windows';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3754
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3755
        if ((/Fennec/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3756
            o.mobile = 'gecko';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3757
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3758
        // Modern WebKit browsers are at least X-Grade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3759
        m = ua.match(/AppleWebKit\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3760
        if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3761
            o.webkit = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3762
            o.safari = o.webkit;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3764
            if (/PhantomJS/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3765
                m = ua.match(/PhantomJS\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3766
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3767
                    o.phantomjs = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3768
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3769
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3770
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3771
            // Mobile browser check
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3772
            if (/ Mobile\//.test(ua) || (/iPad|iPod|iPhone/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3773
                o.mobile = 'Apple'; // iPhone or iPod Touch
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3775
                m = ua.match(/OS ([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3776
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3777
                    m = numberify(m[1].replace('_', '.'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3778
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3779
                o.ios = m;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3780
                o.os = 'ios';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3781
                o.ipad = o.ipod = o.iphone = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3783
                m = ua.match(/iPad|iPod|iPhone/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3784
                if (m && m[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3785
                    o[m[0].toLowerCase()] = o.ios;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3786
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3787
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3788
                m = ua.match(/NokiaN[^\/]*|webOS\/\d\.\d/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3789
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3790
                    // Nokia N-series, webOS, ex: NokiaN95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3791
                    o.mobile = m[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3792
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3793
                if (/webOS/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3794
                    o.mobile = 'WebOS';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3795
                    m = ua.match(/webOS\/([^\s]*);/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3796
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3797
                        o.webos = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3798
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3799
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3800
                if (/ Android/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3801
                    if (/Mobile/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3802
                        o.mobile = 'Android';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3803
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3804
                    m = ua.match(/Android ([^\s]*);/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3805
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3806
                        o.android = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3807
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3809
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3810
                if (/Silk/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3811
                    m = ua.match(/Silk\/([^\s]*)\)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3812
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3813
                        o.silk = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3814
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3815
                    if (!o.android) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3816
                        o.android = 2.34; //Hack for desktop mode in Kindle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3817
                        o.os = 'Android';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3818
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3819
                    if (/Accelerated=true/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3820
                        o.accel = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3821
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3822
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3823
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3824
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3825
            m = ua.match(/(Chrome|CrMo|CriOS)\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3826
            if (m && m[1] && m[2]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3827
                o.chrome = numberify(m[2]); // Chrome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3828
                o.safari = 0; //Reset safari back to 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3829
                if (m[1] === 'CrMo') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3830
                    o.mobile = 'chrome';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3831
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3832
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3833
                m = ua.match(/AdobeAIR\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3834
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3835
                    o.air = m[0]; // Adobe AIR 1.0 or better
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3836
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3837
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3838
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3840
        if (!o.webkit) { // not webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3841
// @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3842
            if (/Opera/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3843
                m = ua.match(/Opera[\s\/]([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3844
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3845
                    o.opera = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3846
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3847
                m = ua.match(/Version\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3848
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3849
                    o.opera = numberify(m[1]); // opera 10+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3850
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3852
                if (/Opera Mobi/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3853
                    o.mobile = 'opera';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3854
                    m = ua.replace('Opera Mobi', '').match(/Opera ([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3855
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3856
                        o.opera = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3857
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3858
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3859
                m = ua.match(/Opera Mini[^;]*/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3861
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3862
                    o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3863
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3864
            } else { // not opera or webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3865
                m = ua.match(/MSIE\s([^;]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3866
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3867
                    o.ie = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3868
                } else { // not opera, webkit, or ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3869
                    m = ua.match(/Gecko\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3870
                    if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3871
                        o.gecko = 1; // Gecko detected, look for revision
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3872
                        m = ua.match(/rv:([^\s\)]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3873
                        if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3874
                            o.gecko = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3875
                            if (/Mobile|Tablet/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3876
                                o.mobile = "ffos";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3877
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3878
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3879
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3880
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3881
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3882
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3883
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3884
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3885
    //Check for known properties to tell if touch events are enabled on this device or if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3886
    //the number of MSPointer touchpoints on this device is greater than 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3887
    if (win && nav && !(o.chrome && o.chrome < 6)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3888
        o.touchEnabled = (("ontouchstart" in win) || (("msMaxTouchPoints" in nav) && (nav.msMaxTouchPoints > 0)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3889
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3891
    //It was a parsed UA, do not assign the global value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3892
    if (!subUA) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3894
        if (typeof process === 'object') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3896
            if (process.versions && process.versions.node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3897
                //NodeJS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3898
                o.os = process.platform;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3899
                o.nodejs = numberify(process.versions.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3900
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3901
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3902
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3903
        YUI.Env.UA = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3904
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3905
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3907
    return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3908
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3911
Y.UA = YUI.Env.UA || YUI.Env.parseUA();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3913
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3914
Performs a simple comparison between two version numbers, accounting for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3915
standard versioning logic such as the fact that "535.8" is a lower version than
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3916
"535.24", even though a simple numerical comparison would indicate that it's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3917
greater. Also accounts for cases such as "1.1" vs. "1.1.0", which are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3918
considered equivalent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3919
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3920
Returns -1 if version _a_ is lower than version _b_, 0 if they're equivalent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3921
1 if _a_ is higher than _b_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3922
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3923
Versions may be numbers or strings containing numbers and dots. For example,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3924
both `535` and `"535.8.10"` are acceptable. A version string containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3925
non-numeric characters, like `"535.8.beta"`, may produce unexpected results.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3926
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3927
@method compareVersions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3928
@param {Number|String} a First version number to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3929
@param {Number|String} b Second version number to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3930
@return -1 if _a_ is lower than _b_, 0 if they're equivalent, 1 if _a_ is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3931
    higher than _b_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3932
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3933
Y.UA.compareVersions = function (a, b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3934
    var aPart, aParts, bPart, bParts, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3935
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3936
    if (a === b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3937
        return 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3938
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3939
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3940
    aParts = (a + '').split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3941
    bParts = (b + '').split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3943
    for (i = 0, len = Math.max(aParts.length, bParts.length); i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3944
        aPart = parseInt(aParts[i], 10);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3945
        bPart = parseInt(bParts[i], 10);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3947
        /*jshint expr: true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3948
        isNaN(aPart) && (aPart = 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3949
        isNaN(bPart) && (bPart = 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3950
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3951
        if (aPart < bPart) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3952
            return -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3953
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3954
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3955
        if (aPart > bPart) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3956
            return 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3957
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3958
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3960
    return 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3961
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3962
YUI.Env.aliases = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3963
    "anim": ["anim-base","anim-color","anim-curve","anim-easing","anim-node-plugin","anim-scroll","anim-xy"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3964
    "anim-shape-transform": ["anim-shape"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3965
    "app": ["app-base","app-content","app-transitions","lazy-model-list","model","model-list","model-sync-rest","router","view","view-node-map"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3966
    "attribute": ["attribute-base","attribute-complex"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3967
    "attribute-events": ["attribute-observable"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3968
    "autocomplete": ["autocomplete-base","autocomplete-sources","autocomplete-list","autocomplete-plugin"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3969
    "axes": ["axis-numeric","axis-category","axis-time","axis-stacked"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3970
    "axes-base": ["axis-numeric-base","axis-category-base","axis-time-base","axis-stacked-base"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3971
    "base": ["base-base","base-pluginhost","base-build"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3972
    "cache": ["cache-base","cache-offline","cache-plugin"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3973
    "charts": ["charts-base"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3974
    "collection": ["array-extras","arraylist","arraylist-add","arraylist-filter","array-invoke"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3975
    "color": ["color-base","color-hsl","color-harmony"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3976
    "controller": ["router"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3977
    "dataschema": ["dataschema-base","dataschema-json","dataschema-xml","dataschema-array","dataschema-text"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3978
    "datasource": ["datasource-local","datasource-io","datasource-get","datasource-function","datasource-cache","datasource-jsonschema","datasource-xmlschema","datasource-arrayschema","datasource-textschema","datasource-polling"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3979
    "datatable": ["datatable-core","datatable-table","datatable-head","datatable-body","datatable-base","datatable-column-widths","datatable-message","datatable-mutable","datatable-sort","datatable-datasource"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3980
    "datatype": ["datatype-date","datatype-number","datatype-xml"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3981
    "datatype-date": ["datatype-date-parse","datatype-date-format","datatype-date-math"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3982
    "datatype-number": ["datatype-number-parse","datatype-number-format"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3983
    "datatype-xml": ["datatype-xml-parse","datatype-xml-format"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3984
    "dd": ["dd-ddm-base","dd-ddm","dd-ddm-drop","dd-drag","dd-proxy","dd-constrain","dd-drop","dd-scroll","dd-delegate"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3985
    "dom": ["dom-base","dom-screen","dom-style","selector-native","selector"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3986
    "editor": ["frame","editor-selection","exec-command","editor-base","editor-para","editor-br","editor-bidi","editor-tab","createlink-base"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3987
    "event": ["event-base","event-delegate","event-synthetic","event-mousewheel","event-mouseenter","event-key","event-focus","event-resize","event-hover","event-outside","event-touch","event-move","event-flick","event-valuechange","event-tap"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3988
    "event-custom": ["event-custom-base","event-custom-complex"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3989
    "event-gestures": ["event-flick","event-move"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3990
    "handlebars": ["handlebars-compiler"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3991
    "highlight": ["highlight-base","highlight-accentfold"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3992
    "history": ["history-base","history-hash","history-hash-ie","history-html5"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3993
    "io": ["io-base","io-xdr","io-form","io-upload-iframe","io-queue"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3994
    "json": ["json-parse","json-stringify"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3995
    "loader": ["loader-base","loader-rollup","loader-yui3"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3996
    "node": ["node-base","node-event-delegate","node-pluginhost","node-screen","node-style"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3997
    "pluginhost": ["pluginhost-base","pluginhost-config"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3998
    "querystring": ["querystring-parse","querystring-stringify"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3999
    "recordset": ["recordset-base","recordset-sort","recordset-filter","recordset-indexer"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4000
    "resize": ["resize-base","resize-proxy","resize-constrain"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4001
    "slider": ["slider-base","slider-value-range","clickable-rail","range-slider"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4002
    "template": ["template-base","template-micro"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4003
    "text": ["text-accentfold","text-wordbreak"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4004
    "widget": ["widget-base","widget-htmlparser","widget-skin","widget-uievents"]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4005
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4006
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4008
}, '@VERSION@', {"use": ["get", "features", "intl-base", "yui-log", "yui-later"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4009
YUI.add('get', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4011
/*jslint boss:true, expr:true, laxbreak: true */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4012
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4013
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4014
Provides dynamic loading of remote JavaScript and CSS resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4015
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4016
@module get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4017
@class Get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4018
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4019
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4021
var Lang = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4022
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4023
    CUSTOM_ATTRS, // defined lazily in Y.Get.Transaction._createNode()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4025
    Get, Transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4026
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4027
Y.Get = Get = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4028
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4029
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4030
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4031
    Default options for CSS requests. Options specified here will override
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4032
    global defaults for CSS requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4033
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4034
    See the `options` property for all available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4035
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4036
    @property cssOptions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4037
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4038
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4039
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4040
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4041
    cssOptions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4042
        attributes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4043
            rel: 'stylesheet'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4044
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4045
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4046
        doc         : Y.config.linkDoc || Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4047
        pollInterval: 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4048
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4049
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4050
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4051
    Default options for JS requests. Options specified here will override global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4052
    defaults for JS requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4053
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4054
    See the `options` property for all available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4055
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4056
    @property jsOptions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4057
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4058
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4059
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4060
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4061
    jsOptions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4062
        autopurge: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4063
        doc      : Y.config.scriptDoc || Y.config.doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4064
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4065
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4066
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4067
    Default options to use for all requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4069
    Note that while all available options are documented here for ease of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4070
    discovery, some options (like callback functions) only make sense at the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4071
    transaction level.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4072
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4073
    Callback functions specified via the options object or the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4074
    parameter of the `css()`, `js()`, or `load()` methods will receive the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4075
    transaction object as a parameter. See `Y.Get.Transaction` for details on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4076
    the properties and methods available on transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4077
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4078
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4079
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4080
    @property {Object} options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4081
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4082
    @property {Boolean} [options.async=false] Whether or not to load scripts
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4083
        asynchronously, meaning they're requested in parallel and execution
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4084
        order is not guaranteed. Has no effect on CSS, since CSS is always
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4085
        loaded asynchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4086
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4087
    @property {Object} [options.attributes] HTML attribute name/value pairs that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4088
        should be added to inserted nodes. By default, the `charset` attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4089
        will be set to "utf-8" and nodes will be given an auto-generated `id`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4090
        attribute, but you can override these with your own values if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4092
    @property {Boolean} [options.autopurge] Whether or not to automatically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4093
        purge inserted nodes after the purge threshold is reached. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4094
        `true` by default for JavaScript, but `false` for CSS since purging a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4095
        CSS node will also remove any styling applied by the referenced file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4096
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4097
    @property {Object} [options.context] `this` object to use when calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4098
        callback functions. Defaults to the transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4100
    @property {Mixed} [options.data] Arbitrary data object to pass to "on*"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4101
        callbacks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4103
    @property {Document} [options.doc] Document into which nodes should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4104
        inserted. By default, the current document is used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4106
    @property {HTMLElement|String} [options.insertBefore] HTML element or id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4107
        string of an element before which all generated nodes should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4108
        inserted. If not specified, Get will automatically determine the best
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4109
        place to insert nodes for maximum compatibility.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4111
    @property {Function} [options.onEnd] Callback to execute after a transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4112
        is complete, regardless of whether it succeeded or failed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4114
    @property {Function} [options.onFailure] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4115
        transaction fails, times out, or is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4117
    @property {Function} [options.onProgress] Callback to execute after each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4118
        individual request in a transaction either succeeds or fails.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4120
    @property {Function} [options.onSuccess] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4121
        transaction completes successfully with no errors. Note that in browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4122
        that don't support the `error` event on CSS `<link>` nodes, a failed CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4123
        request may still be reported as a success because in these browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4124
        it can be difficult or impossible to distinguish between success and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4125
        failure for CSS resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4127
    @property {Function} [options.onTimeout] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4128
        transaction times out.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4130
    @property {Number} [options.pollInterval=50] Polling interval (in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4131
        milliseconds) for detecting CSS load completion in browsers that don't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4132
        support the `load` event on `<link>` nodes. This isn't used for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4133
        JavaScript.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4135
    @property {Number} [options.purgethreshold=20] Number of nodes to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4136
        before triggering an automatic purge when `autopurge` is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4138
    @property {Number} [options.timeout] Number of milliseconds to wait before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4139
        aborting a transaction. When a timeout occurs, the `onTimeout` callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4140
        is called, followed by `onFailure` and finally `onEnd`. By default,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4141
        there is no timeout.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4143
    @property {String} [options.type] Resource type ("css" or "js"). This option
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4144
        is set automatically by the `css()` and `js()` functions and will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4145
        ignored there, but may be useful when using the `load()` function. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4146
        not specified, the type will be inferred from the URL, defaulting to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4147
        "js" if the URL doesn't contain a recognizable file extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4148
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4149
    options: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4150
        attributes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4151
            charset: 'utf-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4152
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4154
        purgethreshold: 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4155
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4157
    // -- Protected Properties -------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4159
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4160
    Regex that matches a CSS URL. Used to guess the file type when it's not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4161
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4163
    @property REGEX_CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4164
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4165
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4166
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4167
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4168
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4169
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4170
    REGEX_CSS: /\.css(?:[?;].*)?$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4172
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4173
    Regex that matches a JS URL. Used to guess the file type when it's not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4174
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4176
    @property REGEX_JS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4177
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4178
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4179
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4180
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4181
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4182
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4183
    REGEX_JS : /\.js(?:[?;].*)?$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4185
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4186
    Contains information about the current environment, such as what script and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4187
    link injection features it supports.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4189
    This object is created and populated the first time the `_getEnv()` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4190
    is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4192
    @property _env
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4193
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4194
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4195
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4196
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4197
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4199
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4200
    Mapping of document _yuid strings to <head> or <base> node references so we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4201
    don't have to look the node up each time we want to insert a request node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4203
    @property _insertCache
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4204
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4205
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4206
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4207
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4208
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4209
    _insertCache: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4211
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4212
    Information about the currently pending transaction, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4214
    This is actually an object with two properties: `callback`, containing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4215
    optional callback passed to `css()`, `load()`, or `js()`; and `transaction`,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4216
    containing the actual transaction instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4218
    @property _pending
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4219
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4220
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4221
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4222
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4223
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4224
    _pending: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4226
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4227
    HTML nodes eligible to be purged next time autopurge is triggered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4229
    @property _purgeNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4230
    @type HTMLElement[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4231
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4232
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4233
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4234
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4235
    _purgeNodes: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4237
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4238
    Queued transactions and associated callbacks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4240
    @property _queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4241
    @type Object[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4242
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4243
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4244
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4245
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4246
    _queue: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4248
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4250
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4251
    Aborts the specified transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4253
    This will cause the transaction's `onFailure` callback to be called and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4254
    will prevent any new script and link nodes from being added to the document,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4255
    but any resources that have already been requested will continue loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4256
    (there's no safe way to prevent this, unfortunately).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4258
    *Note:* This method is deprecated as of 3.5.0, and will be removed in a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4259
    future version of YUI. Use the transaction-level `abort()` method instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4261
    @method abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4262
    @param {Get.Transaction} transaction Transaction to abort.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4263
    @deprecated Use the `abort()` method on the transaction instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4264
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4265
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4266
    abort: function (transaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4267
        var i, id, item, len, pending;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4269
        Y.log('`Y.Get.abort()` is deprecated as of 3.5.0. Use the `abort()` method on the transaction instead.', 'warn', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4271
        if (!transaction.abort) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4272
            id          = transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4273
            pending     = this._pending;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4274
            transaction = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4276
            if (pending && pending.transaction.id === id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4277
                transaction   = pending.transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4278
                this._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4279
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4280
                for (i = 0, len = this._queue.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4281
                    item = this._queue[i].transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4283
                    if (item.id === id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4284
                        transaction = item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4285
                        this._queue.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4286
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4287
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4288
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4289
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4290
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4292
        transaction && transaction.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4293
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4295
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4296
    Loads one or more CSS files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4298
    The _urls_ parameter may be provided as a URL string, a request object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4299
    or an array of URL strings and/or request objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4301
    A request object is just an object that contains a `url` property and zero
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4302
    or more options that should apply specifically to that request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4303
    Request-specific options take priority over transaction-level options and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4304
    default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4306
    URLs may be relative or absolute, and do not have to have the same origin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4307
    as the current page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4309
    The `options` parameter may be omitted completely and a callback passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4310
    its place, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4312
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4314
        // Load a single CSS file and log a message on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4315
        Y.Get.css('foo.css', function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4316
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4317
                Y.log('foo.css failed to load!');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4318
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4319
                Y.log('foo.css was loaded successfully');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4320
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4321
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4323
        // Load multiple CSS files and log a message when all have finished
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4324
        // loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4325
        var urls = ['foo.css', 'http://example.com/bar.css', 'baz/quux.css'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4327
        Y.Get.css(urls, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4328
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4329
                Y.log('one or more files failed to load!');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4330
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4331
                Y.log('all files loaded successfully');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4332
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4333
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4335
        // Specify transaction-level options, which will apply to all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4336
        // within the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4337
        Y.Get.css(urls, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4338
            attributes: {'class': 'my-css'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4339
            timeout   : 5000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4340
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4342
        // Specify per-request options, which override transaction-level and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4343
        // default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4344
        Y.Get.css([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4345
            {url: 'foo.css', attributes: {id: 'foo'}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4346
            {url: 'bar.css', attributes: {id: 'bar', charset: 'iso-8859-1'}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4347
        ]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4349
    @method css
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4350
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4351
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4352
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4353
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4354
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4355
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4356
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4357
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4358
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4359
        @param {Array|null} callback.err Array of errors that occurred during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4360
            the transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4361
        @param {Get.Transaction} callback.transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4362
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4363
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4364
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4365
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4366
    css: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4367
        return this._load('css', urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4368
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4369
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4370
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4371
    Loads one or more JavaScript resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4373
    The _urls_ parameter may be provided as a URL string, a request object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4374
    or an array of URL strings and/or request objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4376
    A request object is just an object that contains a `url` property and zero
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4377
    or more options that should apply specifically to that request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4378
    Request-specific options take priority over transaction-level options and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4379
    default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4381
    URLs may be relative or absolute, and do not have to have the same origin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4382
    as the current page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4384
    The `options` parameter may be omitted completely and a callback passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4385
    its place, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4387
    Scripts will be executed in the order they're specified unless the `async`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4388
    option is `true`, in which case they'll be loaded in parallel and executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4389
    in whatever order they finish loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4391
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4393
        // Load a single JS file and log a message on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4394
        Y.Get.js('foo.js', function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4395
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4396
                Y.log('foo.js failed to load!');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4397
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4398
                Y.log('foo.js was loaded successfully');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4399
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4400
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4402
        // Load multiple JS files, execute them in order, and log a message when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4403
        // all have finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4404
        var urls = ['foo.js', 'http://example.com/bar.js', 'baz/quux.js'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4406
        Y.Get.js(urls, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4407
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4408
                Y.log('one or more files failed to load!');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4409
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4410
                Y.log('all files loaded successfully');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4411
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4412
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4414
        // Specify transaction-level options, which will apply to all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4415
        // within the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4416
        Y.Get.js(urls, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4417
            attributes: {'class': 'my-js'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4418
            timeout   : 5000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4419
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4421
        // Specify per-request options, which override transaction-level and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4422
        // default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4423
        Y.Get.js([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4424
            {url: 'foo.js', attributes: {id: 'foo'}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4425
            {url: 'bar.js', attributes: {id: 'bar', charset: 'iso-8859-1'}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4426
        ]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4428
    @method js
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4429
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4430
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4431
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4432
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4433
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4434
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4435
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4436
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4438
        @param {Array|null} callback.err Array of errors that occurred during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4439
            the transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4440
        @param {Get.Transaction} callback.transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4442
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4443
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4444
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4445
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4446
    js: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4447
        return this._load('js', urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4448
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4450
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4451
    Loads one or more CSS and/or JavaScript resources in the same transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4452
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4453
    Use this method when you want to load both CSS and JavaScript in a single
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4454
    transaction and be notified when all requested URLs have finished loading,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4455
    regardless of type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4456
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4457
    Behavior and options are the same as for the `css()` and `js()` methods. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4458
    a resource type isn't specified in per-request options or transaction-level
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4459
    options, Get will guess the file type based on the URL's extension (`.css`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4460
    or `.js`, with or without a following query string). If the file type can't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4461
    be guessed from the URL, a warning will be logged and Get will assume the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4462
    URL is a JavaScript resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4464
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4465
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4466
        // Load both CSS and JS files in a single transaction, and log a message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4467
        // when all files have finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4468
        Y.Get.load(['foo.css', 'bar.js', 'baz.css'], function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4469
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4470
                Y.log('one or more files failed to load!');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4471
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4472
                Y.log('all files loaded successfully');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4473
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4474
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4475
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4476
    @method load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4477
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4478
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4479
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4480
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4481
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4482
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4483
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4484
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4486
        @param {Array|null} err Array of errors that occurred during the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4487
            transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4488
        @param {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4490
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4491
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4492
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4493
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4494
    load: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4495
        return this._load(null, urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4496
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4497
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4498
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4500
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4501
    Triggers an automatic purge if the purge threshold has been reached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4503
    @method _autoPurge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4504
    @param {Number} threshold Purge threshold to use, in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4505
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4506
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4507
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4508
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4509
    _autoPurge: function (threshold) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4510
        if (threshold && this._purgeNodes.length >= threshold) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4511
            Y.log('autopurge triggered after ' + this._purgeNodes.length + ' nodes', 'info', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4512
            this._purge(this._purgeNodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4513
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4514
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4515
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4516
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4517
    Populates the `_env` property with information about the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4518
    environment.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4520
    @method _getEnv
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4521
    @return {Object} Environment information.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4522
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4523
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4524
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4525
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4526
    _getEnv: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4527
        var doc = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4528
            ua  = Y.UA;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4530
        // Note: some of these checks require browser sniffs since it's not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4531
        // feasible to load test files on every pageview just to perform a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4532
        // feature test. I'm sorry if this makes you sad.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4533
        return (this._env = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4535
            // True if this is a browser that supports disabling async mode on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4536
            // dynamically created script nodes. See
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4537
            // https://developer.mozilla.org/En/HTML/Element/Script#Attributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4539
            // IE10 doesn't return true for the MDN feature test, so setting it explicitly,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4540
            // because it is async by default, and allows you to disable async by setting it to false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4541
            async: (doc && doc.createElement('script').async === true) || (ua.ie >= 10),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4542
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4543
            // True if this browser fires an event when a dynamically injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4544
            // link node fails to load. This is currently true for Firefox 9+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4545
            // and WebKit 535.24+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4546
            cssFail: ua.gecko >= 9 || ua.compareVersions(ua.webkit, 535.24) >= 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4548
            // True if this browser fires an event when a dynamically injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4549
            // link node finishes loading. This is currently true for IE, Opera,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4550
            // Firefox 9+, and WebKit 535.24+. Note that IE versions <9 fire the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4551
            // DOM 0 "onload" event, but not "load". All versions of IE fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4552
            // "onload".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4553
            // davglass: Seems that Chrome on Android needs this to be false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4554
            cssLoad: (
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4555
                    (!ua.gecko && !ua.webkit) || ua.gecko >= 9 ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4556
                    ua.compareVersions(ua.webkit, 535.24) >= 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4557
                ) && !(ua.chrome && ua.chrome <= 18),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4558
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4559
            // True if this browser preserves script execution order while
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4560
            // loading scripts in parallel as long as the script node's `async`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4561
            // attribute is set to false to explicitly disable async execution.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4562
            preservesScriptOrder: !!(ua.gecko || ua.opera || (ua.ie && ua.ie >= 10))
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4563
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4564
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4566
    _getTransaction: function (urls, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4567
        var requests = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4568
            i, len, req, url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4570
        if (!Lang.isArray(urls)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4571
            urls = [urls];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4572
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4574
        options = Y.merge(this.options, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4576
        // Clone the attributes object so we don't end up modifying it by ref.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4577
        options.attributes = Y.merge(this.options.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4578
                options.attributes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4580
        for (i = 0, len = urls.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4581
            url = urls[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4582
            req = {attributes: {}};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4584
            // If `url` is a string, we create a URL object for it, then mix in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4585
            // global options and request-specific options. If it's an object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4586
            // with a "url" property, we assume it's a request object containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4587
            // URL-specific options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4588
            if (typeof url === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4589
                req.url = url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4590
            } else if (url.url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4591
                // URL-specific options override both global defaults and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4592
                // request-specific options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4593
                Y.mix(req, url, false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4594
                url = url.url; // Make url a string so we can use it later.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4595
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4596
                Y.log('URL must be a string or an object with a `url` property.', 'error', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4597
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4598
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4600
            Y.mix(req, options, false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4602
            // If we didn't get an explicit type for this URL either in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4603
            // request options or the URL-specific options, try to determine
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4604
            // one from the file extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4605
            if (!req.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4606
                if (this.REGEX_CSS.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4607
                    req.type = 'css';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4608
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4609
                    if (!this.REGEX_JS.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4610
                        Y.log("Can't guess file type from URL. Assuming JS: " + url, 'warn', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4611
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4613
                    req.type = 'js';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4614
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4615
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4617
            // Mix in type-specific default options, but don't overwrite any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4618
            // options that have already been set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4619
            Y.mix(req, req.type === 'js' ? this.jsOptions : this.cssOptions,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4620
                false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4622
            // Give the node an id attribute if it doesn't already have one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4623
            req.attributes.id || (req.attributes.id = Y.guid());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4625
            // Backcompat for <3.5.0 behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4626
            if (req.win) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4627
                Y.log('The `win` option is deprecated as of 3.5.0. Use `doc` instead.', 'warn', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4628
                req.doc = req.win.document;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4629
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4630
                req.win = req.doc.defaultView || req.doc.parentWindow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4631
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4633
            if (req.charset) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4634
                Y.log('The `charset` option is deprecated as of 3.5.0. Set `attributes.charset` instead.', 'warn', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4635
                req.attributes.charset = req.charset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4636
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4638
            requests.push(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4639
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4641
        return new Transaction(requests, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4642
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4643
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4644
    _load: function (type, urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4645
        var transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4647
        // Allow callback as third param.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4648
        if (typeof options === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4649
            callback = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4650
            options  = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4651
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4653
        options || (options = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4654
        options.type = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4656
        options._onFinish = Get._onTransactionFinish;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4658
        if (!this._env) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4659
            this._getEnv();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4660
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4661
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4662
        transaction = this._getTransaction(urls, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4664
        this._queue.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4665
            callback   : callback,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4666
            transaction: transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4667
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4669
        this._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4671
        return transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4672
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4674
    _onTransactionFinish : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4675
        Get._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4676
        Get._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4677
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4679
    _next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4680
        var item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4682
        if (this._pending) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4683
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4684
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4686
        item = this._queue.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4687
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4688
        if (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4689
            this._pending = item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4690
            item.transaction.execute(item.callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4691
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4692
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4694
    _purge: function (nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4695
        var purgeNodes    = this._purgeNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4696
            isTransaction = nodes !== purgeNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4697
            index, node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4699
        while (node = nodes.pop()) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4700
            // Don't purge nodes that haven't finished loading (or errored out),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4701
            // since this can hang the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4702
            if (!node._yuiget_finished) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4703
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4704
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4706
            node.parentNode && node.parentNode.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4708
            // If this is a transaction-level purge and this node also exists in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4709
            // the Get-level _purgeNodes array, we need to remove it from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4710
            // _purgeNodes to avoid creating a memory leak. The indexOf lookup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4711
            // sucks, but until we get WeakMaps, this is the least troublesome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4712
            // way to do this (we can't just hold onto node ids because they may
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4713
            // not be in the same document).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4714
            if (isTransaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4715
                index = Y.Array.indexOf(purgeNodes, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4717
                if (index > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4718
                    purgeNodes.splice(index, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4719
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4720
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4721
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4722
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4723
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4724
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4725
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4726
Alias for `js()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4728
@method script
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4729
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4730
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4731
Get.script = Get.js;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4732
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4733
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4734
Represents a Get transaction, which may contain requests for one or more JS or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4735
CSS files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4737
This class should not be instantiated manually. Instances will be created and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4738
returned as needed by Y.Get's `css()`, `js()`, and `load()` methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4740
@class Get.Transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4741
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4742
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4743
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4744
Get.Transaction = Transaction = function (requests, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4745
    var self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4746
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4747
    self.id       = Transaction._lastId += 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4748
    self.data     = options.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4749
    self.errors   = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4750
    self.nodes    = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4751
    self.options  = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4752
    self.requests = requests;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4754
    self._callbacks = []; // callbacks to call after execution finishes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4755
    self._queue     = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4756
    self._reqsWaiting   = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4757
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4758
    // Deprecated pre-3.5.0 properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4759
    self.tId = self.id; // Use `id` instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4760
    self.win = options.win || Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4761
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4763
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4764
Arbitrary data object associated with this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4765
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4766
This object comes from the options passed to `Get.css()`, `Get.js()`, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4767
`Get.load()`, and will be `undefined` if no data object was specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4769
@property {Object} data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4770
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4772
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4773
Array of errors that have occurred during this transaction, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4775
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4776
@property {Object[]} errors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4777
@property {String} errors.error Error message.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4778
@property {Object} errors.request Request object related to the error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4779
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4781
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4782
Numeric id for this transaction, unique among all transactions within the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4783
YUI sandbox in the current pageview.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4785
@property {Number} id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4786
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4787
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4789
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4790
HTMLElement nodes (native ones, not YUI Node instances) that have been inserted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4791
during the current transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4793
@property {HTMLElement[]} nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4794
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4796
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4797
Options associated with this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4799
See `Get.options` for the full list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4801
@property {Object} options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4802
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4803
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4804
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4805
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4806
Request objects contained in this transaction. Each request object represents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4807
one CSS or JS URL that will be (or has been) requested and loaded into the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4809
@property {Object} requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4810
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4811
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4813
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4814
Id of the most recent transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4815
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4816
@property _lastId
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4817
@type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4818
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4819
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4820
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4821
Transaction._lastId = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4822
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4823
Transaction.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4824
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4825
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4826
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4827
    Current state of this transaction. One of "new", "executing", or "done".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4829
    @property _state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4830
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4831
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4832
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4833
    _state: 'new', // "new", "executing", or "done"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4834
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4835
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4836
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4837
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4838
    Aborts this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4840
    This will cause the transaction's `onFailure` callback to be called and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4841
    will prevent any new script and link nodes from being added to the document,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4842
    but any resources that have already been requested will continue loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4843
    (there's no safe way to prevent this, unfortunately).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4844
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4845
    @method abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4846
    @param {String} [msg="Aborted."] Optional message to use in the `errors`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4847
        array describing why the transaction was aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4848
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4849
    abort: function (msg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4850
        this._pending    = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4851
        this._pendingCSS = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4852
        this._pollTimer  = clearTimeout(this._pollTimer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4853
        this._queue      = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4854
        this._reqsWaiting    = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4856
        this.errors.push({error: msg || 'Aborted'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4857
        this._finish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4858
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4860
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4861
    Begins execting the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4863
    There's usually no reason to call this manually, since Get will call it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4864
    automatically when other pending transactions have finished. If you really
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4865
    want to execute your transaction before Get does, you can, but be aware that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4866
    this transaction's scripts may end up executing before the scripts in other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4867
    pending transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4868
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4869
    If the transaction is already executing, the specified callback (if any)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4870
    will be queued and called after execution finishes. If the transaction has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4871
    already finished, the callback will be called immediately (the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4872
    will not be executed again).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4873
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4874
    @method execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4875
    @param {Function} callback Callback function to execute after all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4876
        in the transaction are complete, or after the transaction is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4877
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4878
    execute: function (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4879
        var self     = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4880
            requests = self.requests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4881
            state    = self._state,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4882
            i, len, queue, req;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4884
        if (state === 'done') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4885
            callback && callback(self.errors.length ? self.errors : null, self);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4886
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4887
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4888
            callback && self._callbacks.push(callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4890
            if (state === 'executing') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4891
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4892
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4893
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4894
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4895
        self._state = 'executing';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4896
        self._queue = queue = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4898
        if (self.options.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4899
            self._timeout = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4900
                self.abort('Timeout');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4901
            }, self.options.timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4902
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4903
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4904
        self._reqsWaiting = requests.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4905
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4906
        for (i = 0, len = requests.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4907
            req = requests[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4909
            if (req.async || req.type === 'css') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4910
                // No need to queue CSS or fully async JS.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4911
                self._insert(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4912
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4913
                queue.push(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4914
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4915
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4916
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4917
        self._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4918
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4919
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4920
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4921
    Manually purges any `<script>` or `<link>` nodes this transaction has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4922
    created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4924
    Be careful when purging a transaction that contains CSS requests, since
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4925
    removing `<link>` nodes will also remove any styles they applied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4926
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4927
    @method purge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4928
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4929
    purge: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4930
        Get._purge(this.nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4931
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4933
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4934
    _createNode: function (name, attrs, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4935
        var node = doc.createElement(name),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4936
            attr, testEl;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4938
        if (!CUSTOM_ATTRS) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4939
            // IE6 and IE7 expect property names rather than attribute names for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4940
            // certain attributes. Rather than sniffing, we do a quick feature
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4941
            // test the first time _createNode() runs to determine whether we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4942
            // need to provide a workaround.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4943
            testEl = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4944
            testEl.setAttribute('class', 'a');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4946
            CUSTOM_ATTRS = testEl.className === 'a' ? {} : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4947
                'for'  : 'htmlFor',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4948
                'class': 'className'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4949
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4950
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4952
        for (attr in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4953
            if (attrs.hasOwnProperty(attr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4954
                node.setAttribute(CUSTOM_ATTRS[attr] || attr, attrs[attr]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4955
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4956
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4958
        return node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4959
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4961
    _finish: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4962
        var errors  = this.errors.length ? this.errors : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4963
            options = this.options,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4964
            thisObj = options.context || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4965
            data, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4966
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4967
        if (this._state === 'done') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4968
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4969
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4970
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4971
        this._state = 'done';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4972
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4973
        for (i = 0, len = this._callbacks.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4974
            this._callbacks[i].call(thisObj, errors, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4975
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4976
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4977
        data = this._getEventData();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4978
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4979
        if (errors) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4980
            if (options.onTimeout && errors[errors.length - 1].error === 'Timeout') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4981
                options.onTimeout.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4982
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4984
            if (options.onFailure) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4985
                options.onFailure.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4986
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4987
        } else if (options.onSuccess) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4988
            options.onSuccess.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4989
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4991
        if (options.onEnd) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4992
            options.onEnd.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4993
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4995
        if (options._onFinish) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4996
            options._onFinish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4997
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4998
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4999
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5000
    _getEventData: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5001
        if (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5002
            // This merge is necessary for backcompat. I hate it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5003
            return Y.merge(this, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5004
                abort  : this.abort, // have to copy these because the prototype isn't preserved
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5005
                purge  : this.purge,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5006
                request: req,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5007
                url    : req.url,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5008
                win    : req.win
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5009
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5010
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5011
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5012
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5013
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5014
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5015
    _getInsertBefore: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5016
        var doc = req.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5017
            el  = req.insertBefore,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5018
            cache, docStamp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5019
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5020
        if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5021
            return typeof el === 'string' ? doc.getElementById(el) : el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5022
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5023
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5024
        cache    = Get._insertCache;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5025
        docStamp = Y.stamp(doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5026
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5027
        if ((el = cache[docStamp])) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5028
            return el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5029
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5030
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5031
        // Inserting before a <base> tag apparently works around an IE bug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5032
        // (according to a comment from pre-3.5.0 Y.Get), but I'm not sure what
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5033
        // bug that is, exactly. Better safe than sorry?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5034
        if ((el = doc.getElementsByTagName('base')[0])) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5035
            return (cache[docStamp] = el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5036
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5037
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5038
        // Look for a <head> element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5039
        el = doc.head || doc.getElementsByTagName('head')[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5040
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5041
        if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5042
            // Create a marker node at the end of <head> to use as an insertion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5043
            // point. Inserting before this node will ensure that all our CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5044
            // gets inserted in the correct order, to maintain style precedence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5045
            el.appendChild(doc.createTextNode(''));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5046
            return (cache[docStamp] = el.lastChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5047
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5048
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5049
        // If all else fails, just insert before the first script node on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5050
        // page, which is virtually guaranteed to exist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5051
        return (cache[docStamp] = doc.getElementsByTagName('script')[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5052
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5053
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5054
    _insert: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5055
        var env          = Get._env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5056
            insertBefore = this._getInsertBefore(req),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5057
            isScript     = req.type === 'js',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5058
            node         = req.node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5059
            self         = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5060
            ua           = Y.UA,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5061
            cssTimeout, nodeType;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5062
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5063
        if (!node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5064
            if (isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5065
                nodeType = 'script';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5066
            } else if (!env.cssLoad && ua.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5067
                nodeType = 'style';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5068
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5069
                nodeType = 'link';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5070
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5071
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5072
            node = req.node = this._createNode(nodeType, req.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5073
                req.doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5074
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5075
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5076
        function onError() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5077
            self._progress('Failed to load ' + req.url, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5078
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5079
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5080
        function onLoad() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5081
            if (cssTimeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5082
                clearTimeout(cssTimeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5083
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5085
            self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5086
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5088
        // Deal with script asynchronicity.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5089
        if (isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5090
            node.setAttribute('src', req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5092
            if (req.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5093
                // Explicitly indicate that we want the browser to execute this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5094
                // script asynchronously. This is necessary for older browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5095
                // like Firefox <4.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5096
                node.async = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5097
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5098
                if (env.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5099
                    // This browser treats injected scripts as async by default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5100
                    // (standard HTML5 behavior) but asynchronous loading isn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5101
                    // desired, so tell the browser not to mark this script as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5102
                    // async.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5103
                    node.async = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5104
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5106
                // If this browser doesn't preserve script execution order based
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5107
                // on insertion order, we'll need to avoid inserting other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5108
                // scripts until this one finishes loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5109
                if (!env.preservesScriptOrder) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5110
                    this._pending = req;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5111
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5112
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5113
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5114
            if (!env.cssLoad && ua.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5115
                // In Firefox <9, we can import the requested URL into a <style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5116
                // node and poll for the existence of node.sheet.cssRules. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5117
                // gives us a reliable way to determine CSS load completion that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5118
                // also works for cross-domain stylesheets.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5119
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5120
                // Props to Zach Leatherman for calling my attention to this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5121
                // technique.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5122
                node.innerHTML = (req.attributes.charset ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5123
                    '@charset "' + req.attributes.charset + '";' : '') +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5124
                    '@import "' + req.url + '";';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5125
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5126
                node.setAttribute('href', req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5127
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5128
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5130
        // Inject the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5131
        if (isScript && ua.ie && (ua.ie < 9 || (document.documentMode && document.documentMode < 9))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5132
            // Script on IE < 9, and IE 9+ when in IE 8 or older modes, including quirks mode.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5133
            node.onreadystatechange = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5134
                if (/loaded|complete/.test(node.readyState)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5135
                    node.onreadystatechange = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5136
                    onLoad();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5137
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5138
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5139
        } else if (!isScript && !env.cssLoad) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5140
            // CSS on Firefox <9 or WebKit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5141
            this._poll(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5142
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5143
            // Script or CSS on everything else. Using DOM 0 events because that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5144
            // evens the playing field with older IEs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5146
            if (ua.ie >= 10) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5148
                // We currently need to introduce a timeout for IE10, since it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5149
                // calls onerror/onload synchronously for 304s - messing up existing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5150
                // program flow.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5151
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5152
                // Remove this block if the following bug gets fixed by GA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5153
                /*jshint maxlen: 1500 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5154
                // https://connect.microsoft.com/IE/feedback/details/763871/dynamically-loaded-scripts-with-304s-responses-interrupt-the-currently-executing-js-thread-onload
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5155
                node.onerror = function() { setTimeout(onError, 0); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5156
                node.onload  = function() { setTimeout(onLoad, 0); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5157
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5158
                node.onerror = onError;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5159
                node.onload  = onLoad;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5160
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5162
            // If this browser doesn't fire an event when CSS fails to load,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5163
            // fail after a timeout to avoid blocking the transaction queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5164
            if (!env.cssFail && !isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5165
                cssTimeout = setTimeout(onError, req.timeout || 3000);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5166
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5167
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5169
        this.nodes.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5170
        insertBefore.parentNode.insertBefore(node, insertBefore);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5171
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5173
    _next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5174
        if (this._pending) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5175
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5176
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5178
        // If there are requests in the queue, insert the next queued request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5179
        // Otherwise, if we're waiting on already-inserted requests to finish,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5180
        // wait longer. If there are no queued requests and we're not waiting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5181
        // for anything to load, then we're done!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5182
        if (this._queue.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5183
            this._insert(this._queue.shift());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5184
        } else if (!this._reqsWaiting) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5185
            this._finish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5186
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5187
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5189
    _poll: function (newReq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5190
        var self       = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5191
            pendingCSS = self._pendingCSS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5192
            isWebKit   = Y.UA.webkit,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5193
            i, hasRules, j, nodeHref, req, sheets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5195
        if (newReq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5196
            pendingCSS || (pendingCSS = self._pendingCSS = []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5197
            pendingCSS.push(newReq);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5199
            if (self._pollTimer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5200
                // A poll timeout is already pending, so no need to create a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5201
                // new one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5202
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5203
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5204
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5206
        self._pollTimer = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5208
        // Note: in both the WebKit and Gecko hacks below, a CSS URL that 404s
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5209
        // will still be treated as a success. There's no good workaround for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5210
        // this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5212
        for (i = 0; i < pendingCSS.length; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5213
            req = pendingCSS[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5215
            if (isWebKit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5216
                // Look for a stylesheet matching the pending URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5217
                sheets   = req.doc.styleSheets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5218
                j        = sheets.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5219
                nodeHref = req.node.href;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5221
                while (--j >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5222
                    if (sheets[j].href === nodeHref) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5223
                        pendingCSS.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5224
                        i -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5225
                        self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5226
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5227
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5228
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5229
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5230
                // Many thanks to Zach Leatherman for calling my attention to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5231
                // the @import-based cross-domain technique used here, and to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5232
                // Oleg Slobodskoi for an earlier same-domain implementation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5233
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5234
                // See Zach's blog for more details:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5235
                // http://www.zachleat.com/web/2010/07/29/load-css-dynamically/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5236
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5237
                    // We don't really need to store this value since we never
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5238
                    // use it again, but if we don't store it, Closure Compiler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5239
                    // assumes the code is useless and removes it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5240
                    hasRules = !!req.node.sheet.cssRules;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5242
                    // If we get here, the stylesheet has loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5243
                    pendingCSS.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5244
                    i -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5245
                    self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5246
                } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5247
                    // An exception means the stylesheet is still loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5248
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5249
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5250
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5252
        if (pendingCSS.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5253
            self._pollTimer = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5254
                self._poll.call(self);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5255
            }, self.options.pollInterval);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5256
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5257
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5259
    _progress: function (err, req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5260
        var options = this.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5262
        if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5263
            req.error = err;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5264
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5265
            this.errors.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5266
                error  : err,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5267
                request: req
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5268
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5270
            Y.log(err, 'error', 'get');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5271
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5273
        req.node._yuiget_finished = req.finished = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5275
        if (options.onProgress) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5276
            options.onProgress.call(options.context || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5277
                this._getEventData(req));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5278
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5280
        if (req.autopurge) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5281
            // Pre-3.5.0 Get always excludes the most recent node from an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5282
            // autopurge. I find this odd, but I'm keeping that behavior for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5283
            // the sake of backcompat.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5284
            Get._autoPurge(this.options.purgethreshold);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5285
            Get._purgeNodes.push(req.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5286
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5288
        if (this._pending === req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5289
            this._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5290
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5292
        this._reqsWaiting -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5294
        this._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5295
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5296
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5299
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5300
YUI.add('features', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5302
var feature_tests = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5304
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5305
Contains the core of YUI's feature test architecture.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5306
@module features
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5307
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5309
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5310
* Feature detection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5311
* @class Features
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5312
* @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5313
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5315
Y.mix(Y.namespace('Features'), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5317
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5318
    * Object hash of all registered feature tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5319
    * @property tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5320
    * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5321
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5322
    tests: feature_tests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5324
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5325
    * Add a test to the system
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5326
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5327
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5328
    *   Y.Features.add("load", "1", {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5329
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5330
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5331
    * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5332
    * @param {String} cat The category, right now only 'load' is supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5333
    * @param {String} name The number sequence of the test, how it's reported in the URL or config: 1, 2, 3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5334
    * @param {Object} o Object containing test properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5335
    * @param {String} o.name The name of the test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5336
    * @param {Function} o.test The test function to execute, the only argument to the function is the `Y` instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5337
    * @param {String} o.trigger The module that triggers this test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5338
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5339
    add: function(cat, name, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5340
        feature_tests[cat] = feature_tests[cat] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5341
        feature_tests[cat][name] = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5342
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5343
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5344
    * Execute all tests of a given category and return the serialized results
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5345
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5346
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5347
    *   caps=1:1;2:1;3:0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5348
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5349
    * @method all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5350
    * @param {String} cat The category to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5351
    * @param {Array} args The arguments to pass to the test function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5352
    * @return {String} A semi-colon separated string of tests and their success/failure: 1:1;2:1;3:0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5353
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5354
    all: function(cat, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5355
        var cat_o = feature_tests[cat],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5356
            // results = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5357
            result = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5358
        if (cat_o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5359
            Y.Object.each(cat_o, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5360
                result.push(k + ':' + (Y.Features.test(cat, k, args) ? 1 : 0));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5361
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5362
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5364
        return (result.length) ? result.join(';') : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5365
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5366
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5367
    * Run a sepecific test and return a Boolean response.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5368
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5369
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5370
    *   Y.Features.test("load", "1");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5371
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5372
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5373
    * @method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5374
    * @param {String} cat The category of the test to run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5375
    * @param {String} name The name of the test to run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5376
    * @param {Array} args The arguments to pass to the test function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5377
    * @return {Boolean} True or false if the test passed/failed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5378
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5379
    test: function(cat, name, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5380
        args = args || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5381
        var result, ua, test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5382
            cat_o = feature_tests[cat],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5383
            feature = cat_o && cat_o[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5384
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5385
        if (!feature) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5386
            Y.log('Feature test ' + cat + ', ' + name + ' not found');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5387
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5389
            result = feature.result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5391
            if (Y.Lang.isUndefined(result)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5393
                ua = feature.ua;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5394
                if (ua) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5395
                    result = (Y.UA[ua]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5396
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5398
                test = feature.test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5399
                if (test && ((!ua) || result)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5400
                    result = test.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5401
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5403
                feature.result = result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5404
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5405
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5407
        return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5408
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5409
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5410
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5411
// Y.Features.add("load", "1", {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5412
// Y.Features.test("load", "1");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5413
// caps=1:1;2:0;3:1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5415
/* This file is auto-generated by (yogi loader --yes --mix --start ../) */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5416
/*jshint maxlen:900, eqeqeq: false */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5417
var add = Y.Features.add;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5418
// app-transitions-native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5419
add('load', '0', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5420
    "name": "app-transitions-native",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5421
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5422
    var doc  = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5423
        node = doc ? doc.documentElement : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5425
    if (node && node.style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5426
        return ('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5427
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5429
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5430
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5431
    "trigger": "app-transitions"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5432
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5433
// autocomplete-list-keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5434
add('load', '1', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5435
    "name": "autocomplete-list-keys",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5436
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5437
    // Only add keyboard support to autocomplete-list if this doesn't appear to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5438
    // be an iOS or Android-based mobile device.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5439
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5440
    // There's currently no feasible way to actually detect whether a device has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5441
    // a hardware keyboard, so this sniff will have to do. It can easily be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5442
    // overridden by manually loading the autocomplete-list-keys module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5443
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5444
    // Worth noting: even though iOS supports bluetooth keyboards, Mobile Safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5445
    // doesn't fire the keyboard events used by AutoCompleteList, so there's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5446
    // no point loading the -keys module even when a bluetooth keyboard may be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5447
    // available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5448
    return !(Y.UA.ios || Y.UA.android);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5449
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5450
    "trigger": "autocomplete-list"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5451
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5452
// dd-gestures
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5453
add('load', '2', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5454
    "name": "dd-gestures",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5455
    "trigger": "dd-drag",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5456
    "ua": "touchEnabled"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5457
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5458
// dom-style-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5459
add('load', '3', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5460
    "name": "dom-style-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5461
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5463
    var testFeature = Y.Features.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5464
        addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5465
        WINDOW = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5466
        DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5467
        DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5468
        ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5470
    addFeature('style', 'computedStyle', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5471
        test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5472
            return WINDOW && 'getComputedStyle' in WINDOW;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5473
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5474
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5475
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5476
    addFeature('style', 'opacity', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5477
        test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5478
            return DOCUMENT && 'opacity' in DOCUMENT[DOCUMENT_ELEMENT].style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5479
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5480
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5482
    ret =  (!testFeature('style', 'opacity') &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5483
            !testFeature('style', 'computedStyle'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5485
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5486
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5487
    "trigger": "dom-style"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5488
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5489
// editor-para-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5490
add('load', '4', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5491
    "name": "editor-para-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5492
    "trigger": "editor-para",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5493
    "ua": "ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5494
    "when": "instead"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5495
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5496
// event-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5497
add('load', '5', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5498
    "name": "event-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5499
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5500
    var imp = Y.config.doc && Y.config.doc.implementation;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5501
    return (imp && (!imp.hasFeature('Events', '2.0')));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5502
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5503
    "trigger": "node-base"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5504
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5505
// graphics-canvas
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5506
add('load', '6', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5507
    "name": "graphics-canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5508
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5509
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5510
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5511
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5512
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5513
    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5514
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5515
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5516
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5517
// graphics-canvas-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5518
add('load', '7', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5519
    "name": "graphics-canvas-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5520
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5521
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5522
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5523
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5524
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5525
    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5526
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5527
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5528
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5529
// graphics-svg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5530
add('load', '8', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5531
    "name": "graphics-svg",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5532
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5533
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5534
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5535
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5536
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5537
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5538
    return svg && (useSVG || !canvas);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5539
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5540
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5541
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5542
// graphics-svg-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5543
add('load', '9', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5544
    "name": "graphics-svg-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5545
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5546
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5547
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5548
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5549
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5550
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5551
    return svg && (useSVG || !canvas);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5552
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5553
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5554
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5555
// graphics-vml
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5556
add('load', '10', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5557
    "name": "graphics-vml",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5558
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5559
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5560
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5561
    return (DOCUMENT && !DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (!canvas || !canvas.getContext || !canvas.getContext("2d")));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5562
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5563
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5564
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5565
// graphics-vml-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5566
add('load', '11', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5567
    "name": "graphics-vml-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5568
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5569
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5570
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5571
    return (DOCUMENT && !DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (!canvas || !canvas.getContext || !canvas.getContext("2d")));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5572
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5573
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5574
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5575
// history-hash-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5576
add('load', '12', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5577
    "name": "history-hash-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5578
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5579
    var docMode = Y.config.doc && Y.config.doc.documentMode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5581
    return Y.UA.ie && (!('onhashchange' in Y.config.win) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5582
            !docMode || docMode < 8);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5583
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5584
    "trigger": "history-hash"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5585
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5586
// io-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5587
add('load', '13', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5588
    "name": "io-nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5589
    "trigger": "io-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5590
    "ua": "nodejs"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5591
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5592
// json-parse-shim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5593
add('load', '14', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5594
    "name": "json-parse-shim",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5595
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5596
    var _JSON = Y.config.global.JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5597
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5598
        nativeSupport = Y.config.useNativeJSONParse !== false && !!Native;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5600
    function workingNative( k, v ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5601
        return k === "ok" ? true : v;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5602
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5603
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5604
    // Double check basic functionality.  This is mainly to catch early broken
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5605
    // implementations of the JSON API in Firefox 3.1 beta1 and beta2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5606
    if ( nativeSupport ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5607
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5608
            nativeSupport = ( Native.parse( '{"ok":false}', workingNative ) ).ok;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5609
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5610
        catch ( e ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5611
            nativeSupport = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5612
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5613
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5614
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5615
    return !nativeSupport;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5616
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5617
    "trigger": "json-parse"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5618
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5619
// json-stringify-shim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5620
add('load', '15', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5621
    "name": "json-stringify-shim",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5622
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5623
    var _JSON = Y.config.global.JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5624
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5625
        nativeSupport = Y.config.useNativeJSONStringify !== false && !!Native;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5627
    // Double check basic native functionality.  This is primarily to catch broken
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5628
    // early JSON API implementations in Firefox 3.1 beta1 and beta2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5629
    if ( nativeSupport ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5630
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5631
            nativeSupport = ( '0' === Native.stringify(0) );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5632
        } catch ( e ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5633
            nativeSupport = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5634
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5635
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5636
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5638
    return !nativeSupport;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5639
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5640
    "trigger": "json-stringify"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5641
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5642
// scrollview-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5643
add('load', '16', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5644
    "name": "scrollview-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5645
    "trigger": "scrollview-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5646
    "ua": "ie"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5647
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5648
// selector-css2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5649
add('load', '17', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5650
    "name": "selector-css2",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5651
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5652
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5653
        ret = DOCUMENT && !('querySelectorAll' in DOCUMENT);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5655
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5656
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5657
    "trigger": "selector"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5658
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5659
// transition-timer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5660
add('load', '18', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5661
    "name": "transition-timer",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5662
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5663
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5664
        node = (DOCUMENT) ? DOCUMENT.documentElement: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5665
        ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5666
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5667
    if (node && node.style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5668
        ret = !('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5669
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5671
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5672
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5673
    "trigger": "transition"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5674
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5675
// widget-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5676
add('load', '19', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5677
    "name": "widget-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5678
    "trigger": "widget-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5679
    "ua": "ie"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5680
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5681
// yql-jsonp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5682
add('load', '20', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5683
    "name": "yql-jsonp",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5684
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5685
    /* Only load the JSONP module when not in nodejs or winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5686
    TODO Make the winjs module a CORS module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5687
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5688
    return (!Y.UA.nodejs && !Y.UA.winjs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5689
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5690
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5691
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5692
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5693
// yql-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5694
add('load', '21', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5695
    "name": "yql-nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5696
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5697
    "ua": "nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5698
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5699
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5700
// yql-winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5701
add('load', '22', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5702
    "name": "yql-winjs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5703
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5704
    "ua": "winjs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5705
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5706
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5708
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5709
YUI.add('intl-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5711
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5712
 * The Intl utility provides a central location for managing sets of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5713
 * localized resources (strings and formatting patterns).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5714
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5715
 * @class Intl
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5716
 * @uses EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5717
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5718
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5720
var SPLIT_REGEX = /[, ]/;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5721
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5722
Y.mix(Y.namespace('Intl'), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5724
 /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5725
    * Returns the language among those available that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5726
    * best matches the preferred language list, using the Lookup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5727
    * algorithm of BCP 47.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5728
    * If none of the available languages meets the user's preferences,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5729
    * then "" is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5730
    * Extended language ranges are not supported.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5731
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5732
    * @method lookupBestLang
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5733
    * @param {String[] | String} preferredLanguages The list of preferred
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5734
    * languages in descending preference order, represented as BCP 47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5735
    * language tags. A string array or a comma-separated list.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5736
    * @param {String[]} availableLanguages The list of languages
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5737
    * that the application supports, represented as BCP 47 language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5738
    * tags.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5739
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5740
    * @return {String} The available language that best matches the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5741
    * preferred language list, or "".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5742
    * @since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5743
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5744
    lookupBestLang: function(preferredLanguages, availableLanguages) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5746
        var i, language, result, index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5748
        // check whether the list of available languages contains language;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5749
        // if so return it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5750
        function scan(language) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5751
            var i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5752
            for (i = 0; i < availableLanguages.length; i += 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5753
                if (language.toLowerCase() ===
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5754
                            availableLanguages[i].toLowerCase()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5755
                    return availableLanguages[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5756
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5757
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5758
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5760
        if (Y.Lang.isString(preferredLanguages)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5761
            preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5762
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5764
        for (i = 0; i < preferredLanguages.length; i += 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5765
            language = preferredLanguages[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5766
            if (!language || language === '*') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5767
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5768
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5769
            // check the fallback sequence for one language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5770
            while (language.length > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5771
                result = scan(language);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5772
                if (result) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5773
                    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5774
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5775
                    index = language.lastIndexOf('-');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5776
                    if (index >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5777
                        language = language.substring(0, index);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5778
                        // one-character subtags get cut along with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5779
                        // following subtag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5780
                        if (index >= 2 && language.charAt(index - 2) === '-') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5781
                            language = language.substring(0, index - 2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5782
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5783
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5784
                        // nothing available for this language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5785
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5786
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5787
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5788
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5789
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5791
        return '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5792
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5793
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5794
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5796
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5797
YUI.add('yui-log', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5799
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5800
 * Provides console log capability and exposes a custom event for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5801
 * console implementations. This module is a `core` YUI module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5802
 * <a href="../classes/YUI.html#method_log">it's documentation is located under the YUI class</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5803
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5804
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5805
 * @submodule yui-log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5806
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5807
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5808
var INSTANCE = Y,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5809
    LOGEVENT = 'yui:log',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5810
    UNDEFINED = 'undefined',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5811
    LEVELS = { debug: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5812
               info: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5813
               warn: 4,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5814
               error: 8 };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5815
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5816
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5817
 * If the 'debug' config is true, a 'yui:log' event will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5818
 * dispatched, which the Console widget and anything else
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5819
 * can consume.  If the 'useBrowserConsole' config is true, it will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5820
 * write to the browser console if available.  YUI-specific log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5821
 * messages will only be present in the -debug versions of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5822
 * JS files.  The build system is supposed to remove log statements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5823
 * from the raw and minified versions of the files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5824
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5825
 * @method log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5826
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5827
 * @param  {String}  msg  The message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5828
 * @param  {String}  cat  The log category for the message.  Default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5829
 *                        categories are "info", "warn", "error", time".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5830
 *                        Custom categories can be used as well. (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5831
 * @param  {String}  src  The source of the the message (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5832
 * @param  {boolean} silent If true, the log event won't fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5833
 * @return {YUI}      YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5834
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5835
INSTANCE.log = function(msg, cat, src, silent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5836
    var bail, excl, incl, m, f, minlevel,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5837
        Y = INSTANCE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5838
        c = Y.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5839
        publisher = (Y.fire) ? Y : YUI.Env.globalEvents;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5840
    // suppress log message if the config is off or the event stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5841
    // or the event call stack contains a consumer of the yui:log event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5842
    if (c.debug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5843
        // apply source filters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5844
        src = src || "";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5845
        if (typeof src !== "undefined") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5846
            excl = c.logExclude;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5847
            incl = c.logInclude;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5848
            if (incl && !(src in incl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5849
                bail = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5850
            } else if (incl && (src in incl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5851
                bail = !incl[src];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5852
            } else if (excl && (src in excl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5853
                bail = excl[src];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5854
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5856
            // Determine the current minlevel as defined in configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5857
            Y.config.logLevel = Y.config.logLevel || 'debug';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5858
            minlevel = LEVELS[Y.config.logLevel.toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5860
            if (cat in LEVELS && LEVELS[cat] < minlevel) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5861
                // Skip this message if the we don't meet the defined minlevel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5862
                bail = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5863
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5864
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5865
        if (!bail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5866
            if (c.useBrowserConsole) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5867
                m = (src) ? src + ': ' + msg : msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5868
                if (Y.Lang.isFunction(c.logFn)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5869
                    c.logFn.call(Y, msg, cat, src);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5870
                } else if (typeof console !== UNDEFINED && console.log) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5871
                    f = (cat && console[cat] && (cat in LEVELS)) ? cat : 'log';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5872
                    console[f](m);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5873
                } else if (typeof opera !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5874
                    opera.postError(m);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5875
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5876
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5877
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5878
            if (publisher && !silent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5879
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5880
                if (publisher === Y && (!publisher.getEvent(LOGEVENT))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5881
                    publisher.publish(LOGEVENT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5882
                        broadcast: 2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5883
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5884
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5886
                publisher.fire(LOGEVENT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5887
                    msg: msg,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5888
                    cat: cat,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5889
                    src: src
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5890
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5891
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5892
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5893
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5894
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5895
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5896
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5898
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5899
 * Write a system message.  This message will be preserved in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5900
 * minified and raw versions of the YUI files, unlike log statements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5901
 * @method message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5902
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5903
 * @param  {String}  msg  The message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5904
 * @param  {String}  cat  The log category for the message.  Default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5905
 *                        categories are "info", "warn", "error", time".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5906
 *                        Custom categories can be used as well. (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5907
 * @param  {String}  src  The source of the the message (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5908
 * @param  {boolean} silent If true, the log event won't fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5909
 * @return {YUI}      YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5910
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5911
INSTANCE.message = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5912
    return INSTANCE.log.apply(INSTANCE, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5913
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5914
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5916
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5917
YUI.add('yui-later', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5918
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5919
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5920
 * Provides a setTimeout/setInterval wrapper. This module is a `core` YUI module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5921
 * <a href="../classes/YUI.html#method_later">it's documentation is located under the YUI class</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5922
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5923
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5924
 * @submodule yui-later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5925
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5926
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5927
var NO_ARGS = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5929
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5930
 * Executes the supplied function in the context of the supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5931
 * object 'when' milliseconds later.  Executes the function a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5932
 * single time unless periodic is set to true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5933
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5934
 * @method later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5935
 * @param when {int} the number of milliseconds to wait until the fn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5936
 * is executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5937
 * @param o the context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5938
 * @param fn {Function|String} the function to execute or the name of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5939
 * the method in the 'o' object to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5940
 * @param data [Array] data that is provided to the function.  This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5941
 * accepts either a single item or an array.  If an array is provided,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5942
 * the function is executed with one parameter for each array item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5943
 * If you need to pass a single array parameter, it needs to be wrapped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5944
 * in an array [myarray].
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5945
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5946
 * Note: native methods in IE may not have the call and apply methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5947
 * In this case, it will work, but you are limited to four arguments.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5948
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5949
 * @param periodic {boolean} if true, executes continuously at supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5950
 * interval until canceled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5951
 * @return {object} a timer object. Call the cancel() method on this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5952
 * object to stop the timer.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5953
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5954
Y.later = function(when, o, fn, data, periodic) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5955
    when = when || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5956
    data = (!Y.Lang.isUndefined(data)) ? Y.Array(data) : NO_ARGS;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5957
    o = o || Y.config.win || Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5958
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5959
    var cancelled = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5960
        method = (o && Y.Lang.isString(fn)) ? o[fn] : fn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5961
        wrapper = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5962
            // IE 8- may execute a setInterval callback one last time
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5963
            // after clearInterval was called, so in order to preserve
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5964
            // the cancel() === no more runny-run, we have to jump through
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5965
            // an extra hoop.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5966
            if (!cancelled) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5967
                if (!method.apply) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5968
                    method(data[0], data[1], data[2], data[3]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5969
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5970
                    method.apply(o, data || NO_ARGS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5971
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5972
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5973
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5974
        id = (periodic) ? setInterval(wrapper, when) : setTimeout(wrapper, when);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5975
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5976
    return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5977
        id: id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5978
        interval: periodic,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5979
        cancel: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5980
            cancelled = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5981
            if (this.interval) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5982
                clearInterval(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5983
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5984
                clearTimeout(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5985
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5986
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5987
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5988
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5990
Y.Lang.later = Y.later;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5992
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5993
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5994
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5995
YUI.add('yui', function (Y, NAME) {}, '@VERSION@', {"use": ["get", "features", "intl-base", "yui-log", "yui-later"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5996
YUI.add('oop', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5998
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5999
Adds object inheritance and manipulation utilities to the YUI instance. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6000
module is required by most YUI components.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6001
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6002
@module oop
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6003
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6004
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6005
var L            = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6006
    A            = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6007
    OP           = Object.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6008
    CLONE_MARKER = '_~yuim~_',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6009
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6010
    hasOwn   = OP.hasOwnProperty,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6011
    toString = OP.toString;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6012
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6013
function dispatch(o, f, c, proto, action) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6014
    if (o && o[action] && o !== Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6015
        return o[action].call(o, f, c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6016
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6017
        switch (A.test(o)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6018
            case 1:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6019
                return A[action](o, f, c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6020
            case 2:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6021
                return A[action](Y.Array(o, 0, true), f, c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6022
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6023
                return Y.Object[action](o, f, c, proto);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6024
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6025
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6026
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6028
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6029
Augments the _receiver_ with prototype properties from the _supplier_. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6030
receiver may be a constructor function or an object. The supplier must be a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6031
constructor function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6033
If the _receiver_ is an object, then the _supplier_ constructor will be called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6034
immediately after _receiver_ is augmented, with _receiver_ as the `this` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6035
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6036
If the _receiver_ is a constructor function, then all prototype methods of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6037
_supplier_ that are copied to _receiver_ will be sequestered, and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6038
_supplier_ constructor will not be called immediately. The first time any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6039
sequestered method is called on the _receiver_'s prototype, all sequestered
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6040
methods will be immediately copied to the _receiver_'s prototype, the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6041
_supplier_'s constructor will be executed, and finally the newly unsequestered
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6042
method that was called will be executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6043
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6044
This sequestering logic sounds like a bunch of complicated voodoo, but it makes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6045
it cheap to perform frequent augmentation by ensuring that suppliers'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6046
constructors are only called if a supplied method is actually used. If none of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6047
the supplied methods is ever used, then there's no need to take the performance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6048
hit of calling the _supplier_'s constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6049
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6050
@method augment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6051
@param {Function|Object} receiver Object or function to be augmented.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6052
@param {Function} supplier Function that supplies the prototype properties with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6053
  which to augment the _receiver_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6054
@param {Boolean} [overwrite=false] If `true`, properties already on the receiver
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6055
  will be overwritten if found on the supplier's prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6056
@param {String[]} [whitelist] An array of property names. If specified,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6057
  only the whitelisted prototype properties will be applied to the receiver, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6058
  all others will be ignored.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6059
@param {Array|any} [args] Argument or array of arguments to pass to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6060
  supplier's constructor when initializing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6061
@return {Function} Augmented object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6062
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6063
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6064
Y.augment = function (receiver, supplier, overwrite, whitelist, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6065
    var rProto    = receiver.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6066
        sequester = rProto && supplier,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6067
        sProto    = supplier.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6068
        to        = rProto || receiver,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6069
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6070
        copy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6071
        newPrototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6072
        replacements,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6073
        sequestered,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6074
        unsequester;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6075
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6076
    args = args ? Y.Array(args) : [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6077
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6078
    if (sequester) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6079
        newPrototype = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6080
        replacements = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6081
        sequestered  = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6082
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6083
        copy = function (value, key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6084
            if (overwrite || !(key in rProto)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6085
                if (toString.call(value) === '[object Function]') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6086
                    sequestered[key] = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6088
                    newPrototype[key] = replacements[key] = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6089
                        return unsequester(this, value, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6090
                    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6091
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6092
                    newPrototype[key] = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6093
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6094
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6095
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6096
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6097
        unsequester = function (instance, fn, fnArgs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6098
            // Unsequester all sequestered functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6099
            for (var key in sequestered) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6100
                if (hasOwn.call(sequestered, key)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6101
                        && instance[key] === replacements[key]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6103
                    instance[key] = sequestered[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6104
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6105
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6107
            // Execute the supplier constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6108
            supplier.apply(instance, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6110
            // Finally, execute the original sequestered function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6111
            return fn.apply(instance, fnArgs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6112
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6114
        if (whitelist) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6115
            Y.Array.each(whitelist, function (name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6116
                if (name in sProto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6117
                    copy(sProto[name], name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6118
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6119
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6120
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6121
            Y.Object.each(sProto, copy, null, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6122
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6123
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6125
    Y.mix(to, newPrototype || sProto, overwrite, whitelist);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6126
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6127
    if (!sequester) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6128
        supplier.apply(to, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6129
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6131
    return receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6132
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6134
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6135
 * Copies object properties from the supplier to the receiver. If the target has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6136
 * the property, and the property is an object, the target object will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6137
 * augmented with the supplier's value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6138
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6139
 * @method aggregate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6140
 * @param {Object} receiver Object to receive the augmentation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6141
 * @param {Object} supplier Object that supplies the properties with which to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6142
 *     augment the receiver.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6143
 * @param {Boolean} [overwrite=false] If `true`, properties already on the receiver
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6144
 *     will be overwritten if found on the supplier.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6145
 * @param {String[]} [whitelist] Whitelist. If supplied, only properties in this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6146
 *     list will be applied to the receiver.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6147
 * @return {Object} Augmented object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6148
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6149
Y.aggregate = function(r, s, ov, wl) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6150
    return Y.mix(r, s, ov, wl, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6151
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6153
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6154
 * Utility to set up the prototype, constructor and superclass properties to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6155
 * support an inheritance strategy that can chain constructors and methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6156
 * Static members will not be inherited.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6157
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6158
 * @method extend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6159
 * @param {function} r   the object to modify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6160
 * @param {function} s the object to inherit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6161
 * @param {object} px prototype properties to add/override.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6162
 * @param {object} sx static properties to add/override.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6163
 * @return {object} the extended object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6164
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6165
Y.extend = function(r, s, px, sx) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6166
    if (!s || !r) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6167
        Y.error('extend failed, verify dependencies');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6168
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6170
    var sp = s.prototype, rp = Y.Object(sp);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6171
    r.prototype = rp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6173
    rp.constructor = r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6174
    r.superclass = sp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6176
    // assign constructor property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6177
    if (s != Object && sp.constructor == OP.constructor) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6178
        sp.constructor = s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6179
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6181
    // add prototype overrides
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6182
    if (px) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6183
        Y.mix(rp, px, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6184
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6186
    // add object overrides
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6187
    if (sx) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6188
        Y.mix(r, sx, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6189
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6190
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6191
    return r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6192
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6194
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6195
 * Executes the supplied function for each item in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6196
 * a collection.  Supports arrays, objects, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6197
 * NodeLists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6198
 * @method each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6199
 * @param {object} o the object to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6200
 * @param {function} f the function to execute.  This function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6201
 * receives the value, key, and object as parameters.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6202
 * @param {object} c the execution context for the function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6203
 * @param {boolean} proto if true, prototype properties are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6204
 * iterated on objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6205
 * @return {YUI} the YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6206
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6207
Y.each = function(o, f, c, proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6208
    return dispatch(o, f, c, proto, 'each');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6209
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6211
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6212
 * Executes the supplied function for each item in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6213
 * a collection.  The operation stops if the function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6214
 * returns true. Supports arrays, objects, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6215
 * NodeLists.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6216
 * @method some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6217
 * @param {object} o the object to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6218
 * @param {function} f the function to execute.  This function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6219
 * receives the value, key, and object as parameters.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6220
 * @param {object} c the execution context for the function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6221
 * @param {boolean} proto if true, prototype properties are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6222
 * iterated on objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6223
 * @return {boolean} true if the function ever returns true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6224
 * false otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6225
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6226
Y.some = function(o, f, c, proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6227
    return dispatch(o, f, c, proto, 'some');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6228
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6230
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6231
Deep object/array copy. Function clones are actually wrappers around the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6232
original function. Array-like objects are treated as arrays. Primitives are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6233
returned untouched. Optionally, a function can be provided to handle other data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6234
types, filter keys, validate values, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6236
**Note:** Cloning a non-trivial object is a reasonably heavy operation, due to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6237
the need to recursively iterate down non-primitive properties. Clone should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6238
used only when a deep clone down to leaf level properties is explicitly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6239
required. This method will also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6241
In many cases (for example, when trying to isolate objects used as hashes for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6242
configuration properties), a shallow copy, using `Y.merge()` is normally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6243
sufficient. If more than one level of isolation is required, `Y.merge()` can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6244
used selectively at each level which needs to be isolated from the original
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6245
without going all the way to leaf properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6246
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6247
@method clone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6248
@param {object} o what to clone.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6249
@param {boolean} safe if true, objects will not have prototype items from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6250
    source. If false, they will. In this case, the original is initially
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6251
    protected, but the clone is not completely immune from changes to the source
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6252
    object prototype. Also, cloned prototype items that are deleted from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6253
    clone will result in the value of the source prototype being exposed. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6254
    operating on a non-safe clone, items should be nulled out rather than
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6255
    deleted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6256
@param {function} f optional function to apply to each item in a collection; it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6257
    will be executed prior to applying the value to the new object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6258
    Return false to prevent the copy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6259
@param {object} c optional execution context for f.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6260
@param {object} owner Owner object passed when clone is iterating an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6261
    Used to set up context for cloned functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6262
@param {object} cloned hash of previously cloned objects to avoid multiple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6263
    clones.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6264
@return {Array|Object} the cloned object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6265
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6266
Y.clone = function(o, safe, f, c, owner, cloned) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6267
    var o2, marked, stamp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6269
    // Does not attempt to clone:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6270
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6271
    // * Non-typeof-object values, "primitive" values don't need cloning.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6272
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6273
    // * YUI instances, cloning complex object like YUI instances is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6274
    //   advised, this is like cloning the world.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6275
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6276
    // * DOM nodes (#2528250), common host objects like DOM nodes cannot be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6277
    //   "subclassed" in Firefox and old versions of IE. Trying to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6278
    //   `Object.create()` or `Y.extend()` on a DOM node will throw an error in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6279
    //   these browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6280
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6281
    // Instad, the passed-in `o` will be return as-is when it matches one of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6282
    // above criteria.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6283
    if (!L.isObject(o) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6284
            Y.instanceOf(o, YUI) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6285
            (o.addEventListener || o.attachEvent)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6287
        return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6288
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6290
    marked = cloned || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6292
    switch (L.type(o)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6293
        case 'date':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6294
            return new Date(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6295
        case 'regexp':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6296
            // if we do this we need to set the flags too
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6297
            // return new RegExp(o.source);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6298
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6299
        case 'function':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6300
            // o2 = Y.bind(o, owner);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6301
            // break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6302
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6303
        case 'array':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6304
            o2 = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6305
            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6306
        default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6308
            // #2528250 only one clone of a given object should be created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6309
            if (o[CLONE_MARKER]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6310
                return marked[o[CLONE_MARKER]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6311
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6313
            stamp = Y.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6315
            o2 = (safe) ? {} : Y.Object(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6317
            o[CLONE_MARKER] = stamp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6318
            marked[stamp] = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6319
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6321
    Y.each(o, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6322
        if ((k || k === 0) && (!f || (f.call(c || this, v, k, this, o) !== false))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6323
            if (k !== CLONE_MARKER) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6324
                if (k == 'prototype') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6325
                    // skip the prototype
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6326
                // } else if (o[k] === o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6327
                //     this[k] = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6328
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6329
                    this[k] =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6330
                        Y.clone(v, safe, f, c, owner || o, marked);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6331
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6332
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6333
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6334
    }, o2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6336
    if (!cloned) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6337
        Y.Object.each(marked, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6338
            if (v[CLONE_MARKER]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6339
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6340
                    delete v[CLONE_MARKER];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6341
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6342
                    v[CLONE_MARKER] = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6343
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6344
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6345
        }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6346
        marked = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6347
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6349
    return o2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6350
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6352
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6353
 * Returns a function that will execute the supplied function in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6354
 * supplied object's context, optionally adding any additional
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6355
 * supplied parameters to the beginning of the arguments collection the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6356
 * supplied to the function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6357
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6358
 * @method bind
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6359
 * @param {Function|String} f the function to bind, or a function name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6360
 * to execute on the context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6361
 * @param {object} c the execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6362
 * @param {any} args* 0..n arguments to include before the arguments the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6363
 * function is executed with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6364
 * @return {function} the wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6365
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6366
Y.bind = function(f, c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6367
    var xargs = arguments.length > 2 ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6368
            Y.Array(arguments, 2, true) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6369
    return function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6370
        var fn = L.isString(f) ? c[f] : f,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6371
            args = (xargs) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6372
                xargs.concat(Y.Array(arguments, 0, true)) : arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6373
        return fn.apply(c || fn, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6374
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6375
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6377
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6378
 * Returns a function that will execute the supplied function in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6379
 * supplied object's context, optionally adding any additional
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6380
 * supplied parameters to the end of the arguments the function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6381
 * is executed with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6382
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6383
 * @method rbind
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6384
 * @param {Function|String} f the function to bind, or a function name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6385
 * to execute on the context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6386
 * @param {object} c the execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6387
 * @param {any} args* 0..n arguments to append to the end of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6388
 * arguments collection supplied to the function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6389
 * @return {function} the wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6390
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6391
Y.rbind = function(f, c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6392
    var xargs = arguments.length > 2 ? Y.Array(arguments, 2, true) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6393
    return function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6394
        var fn = L.isString(f) ? c[f] : f,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6395
            args = (xargs) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6396
                Y.Array(arguments, 0, true).concat(xargs) : arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6397
        return fn.apply(c || fn, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6398
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6399
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6400
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6402
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6403
YUI.add('features', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6404
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6405
var feature_tests = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6407
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6408
Contains the core of YUI's feature test architecture.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6409
@module features
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6410
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6412
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6413
* Feature detection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6414
* @class Features
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6415
* @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6416
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6418
Y.mix(Y.namespace('Features'), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6420
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6421
    * Object hash of all registered feature tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6422
    * @property tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6423
    * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6424
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6425
    tests: feature_tests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6427
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6428
    * Add a test to the system
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6429
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6430
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6431
    *   Y.Features.add("load", "1", {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6432
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6433
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6434
    * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6435
    * @param {String} cat The category, right now only 'load' is supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6436
    * @param {String} name The number sequence of the test, how it's reported in the URL or config: 1, 2, 3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6437
    * @param {Object} o Object containing test properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6438
    * @param {String} o.name The name of the test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6439
    * @param {Function} o.test The test function to execute, the only argument to the function is the `Y` instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6440
    * @param {String} o.trigger The module that triggers this test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6441
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6442
    add: function(cat, name, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6443
        feature_tests[cat] = feature_tests[cat] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6444
        feature_tests[cat][name] = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6445
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6446
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6447
    * Execute all tests of a given category and return the serialized results
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6448
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6449
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6450
    *   caps=1:1;2:1;3:0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6451
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6452
    * @method all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6453
    * @param {String} cat The category to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6454
    * @param {Array} args The arguments to pass to the test function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6455
    * @return {String} A semi-colon separated string of tests and their success/failure: 1:1;2:1;3:0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6456
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6457
    all: function(cat, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6458
        var cat_o = feature_tests[cat],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6459
            // results = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6460
            result = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6461
        if (cat_o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6462
            Y.Object.each(cat_o, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6463
                result.push(k + ':' + (Y.Features.test(cat, k, args) ? 1 : 0));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6464
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6465
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6467
        return (result.length) ? result.join(';') : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6468
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6469
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6470
    * Run a sepecific test and return a Boolean response.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6471
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6472
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6473
    *   Y.Features.test("load", "1");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6474
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6475
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6476
    * @method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6477
    * @param {String} cat The category of the test to run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6478
    * @param {String} name The name of the test to run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6479
    * @param {Array} args The arguments to pass to the test function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6480
    * @return {Boolean} True or false if the test passed/failed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6481
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6482
    test: function(cat, name, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6483
        args = args || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6484
        var result, ua, test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6485
            cat_o = feature_tests[cat],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6486
            feature = cat_o && cat_o[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6488
        if (!feature) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6489
            Y.log('Feature test ' + cat + ', ' + name + ' not found');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6490
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6492
            result = feature.result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6493
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6494
            if (Y.Lang.isUndefined(result)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6495
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6496
                ua = feature.ua;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6497
                if (ua) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6498
                    result = (Y.UA[ua]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6499
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6501
                test = feature.test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6502
                if (test && ((!ua) || result)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6503
                    result = test.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6504
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6506
                feature.result = result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6507
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6508
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6510
        return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6511
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6512
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6513
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6514
// Y.Features.add("load", "1", {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6515
// Y.Features.test("load", "1");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6516
// caps=1:1;2:0;3:1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6517
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6518
/* This file is auto-generated by (yogi loader --yes --mix --start ../) */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6519
/*jshint maxlen:900, eqeqeq: false */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6520
var add = Y.Features.add;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6521
// app-transitions-native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6522
add('load', '0', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6523
    "name": "app-transitions-native",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6524
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6525
    var doc  = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6526
        node = doc ? doc.documentElement : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6528
    if (node && node.style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6529
        return ('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6530
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6532
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6533
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6534
    "trigger": "app-transitions"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6535
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6536
// autocomplete-list-keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6537
add('load', '1', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6538
    "name": "autocomplete-list-keys",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6539
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6540
    // Only add keyboard support to autocomplete-list if this doesn't appear to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6541
    // be an iOS or Android-based mobile device.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6542
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6543
    // There's currently no feasible way to actually detect whether a device has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6544
    // a hardware keyboard, so this sniff will have to do. It can easily be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6545
    // overridden by manually loading the autocomplete-list-keys module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6546
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6547
    // Worth noting: even though iOS supports bluetooth keyboards, Mobile Safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6548
    // doesn't fire the keyboard events used by AutoCompleteList, so there's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6549
    // no point loading the -keys module even when a bluetooth keyboard may be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6550
    // available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6551
    return !(Y.UA.ios || Y.UA.android);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6552
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6553
    "trigger": "autocomplete-list"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6554
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6555
// dd-gestures
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6556
add('load', '2', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6557
    "name": "dd-gestures",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6558
    "trigger": "dd-drag",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6559
    "ua": "touchEnabled"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6560
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6561
// dom-style-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6562
add('load', '3', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6563
    "name": "dom-style-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6564
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6566
    var testFeature = Y.Features.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6567
        addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6568
        WINDOW = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6569
        DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6570
        DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6571
        ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6573
    addFeature('style', 'computedStyle', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6574
        test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6575
            return WINDOW && 'getComputedStyle' in WINDOW;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6576
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6577
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6579
    addFeature('style', 'opacity', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6580
        test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6581
            return DOCUMENT && 'opacity' in DOCUMENT[DOCUMENT_ELEMENT].style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6582
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6583
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6585
    ret =  (!testFeature('style', 'opacity') &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6586
            !testFeature('style', 'computedStyle'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6588
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6589
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6590
    "trigger": "dom-style"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6591
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6592
// editor-para-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6593
add('load', '4', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6594
    "name": "editor-para-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6595
    "trigger": "editor-para",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6596
    "ua": "ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6597
    "when": "instead"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6598
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6599
// event-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6600
add('load', '5', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6601
    "name": "event-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6602
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6603
    var imp = Y.config.doc && Y.config.doc.implementation;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6604
    return (imp && (!imp.hasFeature('Events', '2.0')));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6605
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6606
    "trigger": "node-base"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6607
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6608
// graphics-canvas
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6609
add('load', '6', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6610
    "name": "graphics-canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6611
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6612
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6613
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6614
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6615
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6616
    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6617
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6618
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6619
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6620
// graphics-canvas-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6621
add('load', '7', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6622
    "name": "graphics-canvas-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6623
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6624
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6625
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6626
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6627
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6628
    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6629
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6630
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6631
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6632
// graphics-svg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6633
add('load', '8', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6634
    "name": "graphics-svg",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6635
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6636
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6637
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6638
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6639
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6640
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6641
    return svg && (useSVG || !canvas);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6642
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6643
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6644
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6645
// graphics-svg-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6646
add('load', '9', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6647
    "name": "graphics-svg-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6648
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6649
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6650
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6651
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6652
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6653
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6654
    return svg && (useSVG || !canvas);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6655
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6656
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6657
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6658
// graphics-vml
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6659
add('load', '10', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6660
    "name": "graphics-vml",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6661
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6662
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6663
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6664
    return (DOCUMENT && !DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (!canvas || !canvas.getContext || !canvas.getContext("2d")));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6665
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6666
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6667
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6668
// graphics-vml-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6669
add('load', '11', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6670
    "name": "graphics-vml-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6671
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6672
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6673
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6674
    return (DOCUMENT && !DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (!canvas || !canvas.getContext || !canvas.getContext("2d")));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6675
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6676
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6677
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6678
// history-hash-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6679
add('load', '12', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6680
    "name": "history-hash-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6681
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6682
    var docMode = Y.config.doc && Y.config.doc.documentMode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6683
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6684
    return Y.UA.ie && (!('onhashchange' in Y.config.win) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6685
            !docMode || docMode < 8);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6686
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6687
    "trigger": "history-hash"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6688
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6689
// io-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6690
add('load', '13', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6691
    "name": "io-nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6692
    "trigger": "io-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6693
    "ua": "nodejs"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6694
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6695
// json-parse-shim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6696
add('load', '14', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6697
    "name": "json-parse-shim",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6698
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6699
    var _JSON = Y.config.global.JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6700
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6701
        nativeSupport = Y.config.useNativeJSONParse !== false && !!Native;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6702
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6703
    function workingNative( k, v ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6704
        return k === "ok" ? true : v;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6705
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6706
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6707
    // Double check basic functionality.  This is mainly to catch early broken
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6708
    // implementations of the JSON API in Firefox 3.1 beta1 and beta2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6709
    if ( nativeSupport ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6710
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6711
            nativeSupport = ( Native.parse( '{"ok":false}', workingNative ) ).ok;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6712
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6713
        catch ( e ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6714
            nativeSupport = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6715
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6716
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6718
    return !nativeSupport;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6719
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6720
    "trigger": "json-parse"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6721
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6722
// json-stringify-shim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6723
add('load', '15', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6724
    "name": "json-stringify-shim",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6725
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6726
    var _JSON = Y.config.global.JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6727
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6728
        nativeSupport = Y.config.useNativeJSONStringify !== false && !!Native;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6730
    // Double check basic native functionality.  This is primarily to catch broken
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6731
    // early JSON API implementations in Firefox 3.1 beta1 and beta2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6732
    if ( nativeSupport ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6733
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6734
            nativeSupport = ( '0' === Native.stringify(0) );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6735
        } catch ( e ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6736
            nativeSupport = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6737
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6738
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6740
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6741
    return !nativeSupport;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6742
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6743
    "trigger": "json-stringify"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6744
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6745
// scrollview-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6746
add('load', '16', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6747
    "name": "scrollview-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6748
    "trigger": "scrollview-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6749
    "ua": "ie"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6750
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6751
// selector-css2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6752
add('load', '17', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6753
    "name": "selector-css2",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6754
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6755
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6756
        ret = DOCUMENT && !('querySelectorAll' in DOCUMENT);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6757
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6758
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6759
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6760
    "trigger": "selector"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6761
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6762
// transition-timer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6763
add('load', '18', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6764
    "name": "transition-timer",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6765
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6766
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6767
        node = (DOCUMENT) ? DOCUMENT.documentElement: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6768
        ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6770
    if (node && node.style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6771
        ret = !('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6772
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6773
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6774
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6775
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6776
    "trigger": "transition"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6777
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6778
// widget-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6779
add('load', '19', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6780
    "name": "widget-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6781
    "trigger": "widget-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6782
    "ua": "ie"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6783
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6784
// yql-jsonp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6785
add('load', '20', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6786
    "name": "yql-jsonp",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6787
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6788
    /* Only load the JSONP module when not in nodejs or winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6789
    TODO Make the winjs module a CORS module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6790
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6791
    return (!Y.UA.nodejs && !Y.UA.winjs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6792
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6793
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6794
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6795
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6796
// yql-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6797
add('load', '21', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6798
    "name": "yql-nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6799
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6800
    "ua": "nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6801
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6802
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6803
// yql-winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6804
add('load', '22', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6805
    "name": "yql-winjs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6806
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6807
    "ua": "winjs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6808
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6809
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6810
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6811
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6812
YUI.add('dom-core', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6814
var NODE_TYPE = 'nodeType',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6815
    OWNER_DOCUMENT = 'ownerDocument',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6816
    DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6817
    DEFAULT_VIEW = 'defaultView',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6818
    PARENT_WINDOW = 'parentWindow',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6819
    TAG_NAME = 'tagName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6820
    PARENT_NODE = 'parentNode',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6821
    PREVIOUS_SIBLING = 'previousSibling',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6822
    NEXT_SIBLING = 'nextSibling',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6823
    CONTAINS = 'contains',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6824
    COMPARE_DOCUMENT_POSITION = 'compareDocumentPosition',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6825
    EMPTY_ARRAY = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6826
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6827
    // IE < 8 throws on node.contains(textNode)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6828
    supportsContainsTextNode = (function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6829
        var node = Y.config.doc.createElement('div'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6830
            textNode = node.appendChild(Y.config.doc.createTextNode('')),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6831
            result = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6832
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6833
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6834
            result = node.contains(textNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6835
        } catch(e) {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6836
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6837
        return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6838
    })(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6840
/** 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6841
 * The DOM utility provides a cross-browser abtraction layer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6842
 * normalizing DOM tasks, and adds extra helper functionality
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6843
 * for other common tasks. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6844
 * @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6845
 * @main dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6846
 * @submodule dom-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6847
 * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6848
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6849
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6851
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6852
 * Provides DOM helper methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6853
 * @class DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6854
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6855
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6856
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6857
Y_DOM = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6858
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6859
     * Returns the HTMLElement with the given ID (Wrapper for document.getElementById).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6860
     * @method byId         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6861
     * @param {String} id the id attribute 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6862
     * @param {Object} doc optional The document to search. Defaults to current document 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6863
     * @return {HTMLElement | null} The HTMLElement with the id, or null if none found. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6864
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6865
    byId: function(id, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6866
        // handle dupe IDs and IE name collision
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6867
        return Y_DOM.allById(id, doc)[0] || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6868
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6869
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6870
    getId: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6871
        var id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6872
        // HTMLElement returned from FORM when INPUT name === "id"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6873
        // IE < 8: HTMLCollection returned when INPUT id === "id"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6874
        // via both getAttribute and form.id 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6875
        if (node.id && !node.id.tagName && !node.id.item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6876
            id = node.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6877
        } else if (node.attributes && node.attributes.id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6878
            id = node.attributes.id.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6879
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6881
        return id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6882
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6884
    setId: function(node, id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6885
        if (node.setAttribute) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6886
            node.setAttribute('id', id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6887
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6888
            node.id = id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6889
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6890
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6892
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6893
     * Finds the ancestor of the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6894
     * @method ancestor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6895
     * @param {HTMLElement} element The html element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6896
     * @param {Function} fn optional An optional boolean test to apply.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6897
     * The optional function is passed the current DOM node being tested as its only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6898
     * If no function is given, the parentNode is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6899
     * @param {Boolean} testSelf optional Whether or not to include the element in the scan 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6900
     * @return {HTMLElement | null} The matching DOM node or null if none found. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6901
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6902
    ancestor: function(element, fn, testSelf, stopFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6903
        var ret = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6904
        if (testSelf) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6905
            ret = (!fn || fn(element)) ? element : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6907
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6908
        return ret || Y_DOM.elementByAxis(element, PARENT_NODE, fn, null, stopFn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6909
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6911
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6912
     * Finds the ancestors of the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6913
     * @method ancestors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6914
     * @param {HTMLElement} element The html element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6915
     * @param {Function} fn optional An optional boolean test to apply.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6916
     * The optional function is passed the current DOM node being tested as its only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6917
     * If no function is given, all ancestors are returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6918
     * @param {Boolean} testSelf optional Whether or not to include the element in the scan 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6919
     * @return {Array} An array containing all matching DOM nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6920
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6921
    ancestors: function(element, fn, testSelf, stopFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6922
        var ancestor = element,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6923
            ret = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6925
        while ((ancestor = Y_DOM.ancestor(ancestor, fn, testSelf, stopFn))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6926
            testSelf = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6927
            if (ancestor) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6928
                ret.unshift(ancestor);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6930
                if (stopFn && stopFn(ancestor)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6931
                    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6932
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6933
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6934
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6935
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6936
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6937
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6938
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6939
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6940
     * Searches the element by the given axis for the first matching element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6941
     * @method elementByAxis
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6942
     * @param {HTMLElement} element The html element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6943
     * @param {String} axis The axis to search (parentNode, nextSibling, previousSibling).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6944
     * @param {Function} fn optional An optional boolean test to apply.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6945
     * @param {Boolean} all optional Whether all node types should be returned, or just element nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6946
     * The optional function is passed the current HTMLElement being tested as its only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6947
     * If no function is given, the first element is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6948
     * @return {HTMLElement | null} The matching element or null if none found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6949
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6950
    elementByAxis: function(element, axis, fn, all, stopAt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6951
        while (element && (element = element[axis])) { // NOTE: assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6952
                if ( (all || element[TAG_NAME]) && (!fn || fn(element)) ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6953
                    return element;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6954
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6955
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6956
                if (stopAt && stopAt(element)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6957
                    return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6958
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6959
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6960
        return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6961
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6962
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6963
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6964
     * Determines whether or not one HTMLElement is or contains another HTMLElement.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6965
     * @method contains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6966
     * @param {HTMLElement} element The containing html element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6967
     * @param {HTMLElement} needle The html element that may be contained.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6968
     * @return {Boolean} Whether or not the element is or contains the needle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6969
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6970
    contains: function(element, needle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6971
        var ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6972
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6973
        if ( !needle || !element || !needle[NODE_TYPE] || !element[NODE_TYPE]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6974
            ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6975
        } else if (element[CONTAINS] &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6976
                // IE < 8 throws on node.contains(textNode) so fall back to brute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6977
                // Falling back for other nodeTypes as well.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6978
                (needle[NODE_TYPE] === 1 || supportsContainsTextNode)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6979
                ret = element[CONTAINS](needle);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6980
        } else if (element[COMPARE_DOCUMENT_POSITION]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6981
            // Match contains behavior (node.contains(node) === true).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6982
            // Needed for Firefox < 4.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6983
            if (element === needle || !!(element[COMPARE_DOCUMENT_POSITION](needle) & 16)) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6984
                ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6985
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6986
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6987
            ret = Y_DOM._bruteContains(element, needle);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6988
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6990
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6991
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6992
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6993
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6994
     * Determines whether or not the HTMLElement is part of the document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6995
     * @method inDoc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6996
     * @param {HTMLElement} element The containing html element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6997
     * @param {HTMLElement} doc optional The document to check.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6998
     * @return {Boolean} Whether or not the element is attached to the document. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  6999
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7000
    inDoc: function(element, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7001
        var ret = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7002
            rootNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7003
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7004
        if (element && element.nodeType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7005
            (doc) || (doc = element[OWNER_DOCUMENT]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7006
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7007
            rootNode = doc[DOCUMENT_ELEMENT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7008
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7009
            // contains only works with HTML_ELEMENT
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7010
            if (rootNode && rootNode.contains && element.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7011
                ret = rootNode.contains(element);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7012
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7013
                ret = Y_DOM.contains(rootNode, element);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7014
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7015
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7016
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7017
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7019
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7021
   allById: function(id, root) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7022
        root = root || Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7023
        var nodes = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7024
            ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7025
            i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7026
            node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7028
        if (root.querySelectorAll) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7029
            ret = root.querySelectorAll('[id="' + id + '"]');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7030
        } else if (root.all) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7031
            nodes = root.all(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7033
            if (nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7034
                // root.all may return HTMLElement or HTMLCollection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7035
                // some elements are also HTMLCollection (FORM, SELECT).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7036
                if (nodes.nodeName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7037
                    if (nodes.id === id) { // avoid false positive on name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7038
                        ret.push(nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7039
                        nodes = EMPTY_ARRAY; // done, no need to filter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7040
                    } else { //  prep for filtering
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7041
                        nodes = [nodes];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7042
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7043
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7044
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7045
                if (nodes.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7046
                    // filter out matches on node.name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7047
                    // and element.id as reference to element with id === 'id'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7048
                    for (i = 0; node = nodes[i++];) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7049
                        if (node.id === id  || 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7050
                                (node.attributes && node.attributes.id &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7051
                                node.attributes.id.value === id)) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7052
                            ret.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7053
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7054
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7055
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7056
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7057
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7058
            ret = [Y_DOM._getDoc(root).getElementById(id)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7059
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7060
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7061
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7062
   },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7063
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7064
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7065
    isWindow: function(obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7066
        return !!(obj && obj.scrollTo && obj.document);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7067
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7069
    _removeChildNodes: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7070
        while (node.firstChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7071
            node.removeChild(node.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7072
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7073
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7074
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7075
    siblings: function(node, fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7076
        var nodes = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7077
            sibling = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7078
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7079
        while ((sibling = sibling[PREVIOUS_SIBLING])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7080
            if (sibling[TAG_NAME] && (!fn || fn(sibling))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7081
                nodes.unshift(sibling);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7082
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7083
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7085
        sibling = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7086
        while ((sibling = sibling[NEXT_SIBLING])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7087
            if (sibling[TAG_NAME] && (!fn || fn(sibling))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7088
                nodes.push(sibling);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7089
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7090
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7092
        return nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7093
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7094
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7095
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7096
     * Brute force version of contains.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7097
     * Used for browsers without contains support for non-HTMLElement Nodes (textNodes, etc).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7098
     * @method _bruteContains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7099
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7100
     * @param {HTMLElement} element The containing html element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7101
     * @param {HTMLElement} needle The html element that may be contained.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7102
     * @return {Boolean} Whether or not the element is or contains the needle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7103
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7104
    _bruteContains: function(element, needle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7105
        while (needle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7106
            if (element === needle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7107
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7108
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7109
            needle = needle.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7110
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7111
        return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7112
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7114
// TODO: move to Lang?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7115
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7116
     * Memoizes dynamic regular expressions to boost runtime performance. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7117
     * @method _getRegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7118
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7119
     * @param {String} str The string to convert to a regular expression.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7120
     * @param {String} flags optional An optinal string of flags.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7121
     * @return {RegExp} An instance of RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7122
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7123
    _getRegExp: function(str, flags) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7124
        flags = flags || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7125
        Y_DOM._regexCache = Y_DOM._regexCache || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7126
        if (!Y_DOM._regexCache[str + flags]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7127
            Y_DOM._regexCache[str + flags] = new RegExp(str, flags);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7128
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7129
        return Y_DOM._regexCache[str + flags];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7130
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7132
// TODO: make getDoc/Win true privates?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7133
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7134
     * returns the appropriate document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7135
     * @method _getDoc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7136
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7137
     * @param {HTMLElement} element optional Target element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7138
     * @return {Object} The document for the given element or the default document. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7139
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7140
    _getDoc: function(element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7141
        var doc = Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7142
        if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7143
            doc = (element[NODE_TYPE] === 9) ? element : // element === document
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7144
                element[OWNER_DOCUMENT] || // element === DOM node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7145
                element.document || // element === window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7146
                Y.config.doc; // default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7147
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7148
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7149
        return doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7150
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7151
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7152
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7153
     * returns the appropriate window.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7154
     * @method _getWin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7155
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7156
     * @param {HTMLElement} element optional Target element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7157
     * @return {Object} The window for the given element or the default window. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7158
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7159
    _getWin: function(element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7160
        var doc = Y_DOM._getDoc(element);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7161
        return doc[DEFAULT_VIEW] || doc[PARENT_WINDOW] || Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7162
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7164
    _batch: function(nodes, fn, arg1, arg2, arg3, etc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7165
        fn = (typeof fn === 'string') ? Y_DOM[fn] : fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7166
        var result,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7167
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7168
            node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7169
            ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7171
        if (fn && nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7172
            while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7173
                result = result = fn.call(Y_DOM, node, arg1, arg2, arg3, etc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7174
                if (typeof result !== 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7175
                    (ret) || (ret = []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7176
                    ret.push(result);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7177
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7178
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7179
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7181
        return (typeof ret !== 'undefined') ? ret : nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7182
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7184
    generateID: function(el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7185
        var id = el.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7186
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7187
        if (!id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7188
            id = Y.stamp(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7189
            el.id = id; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7190
        }   
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7192
        return id; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7193
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7194
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7195
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7197
Y.DOM = Y_DOM;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7200
}, '@VERSION@', {"requires": ["oop", "features"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7201
YUI.add('dom-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7203
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7204
* @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7205
* @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7206
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7207
var documentElement = Y.config.doc.documentElement,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7208
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7209
    TAG_NAME = 'tagName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7210
    OWNER_DOCUMENT = 'ownerDocument',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7211
    EMPTY_STRING = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7212
    addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7213
    testFeature = Y.Features.test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7215
Y.mix(Y_DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7216
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7217
     * Returns the text content of the HTMLElement. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7218
     * @method getText         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7219
     * @param {HTMLElement} element The html element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7220
     * @return {String} The text content of the element (includes text of any descending elements).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7221
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7222
    getText: (documentElement.textContent !== undefined) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7223
        function(element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7224
            var ret = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7225
            if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7226
                ret = element.textContent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7227
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7228
            return ret || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7229
        } : function(element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7230
            var ret = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7231
            if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7232
                ret = element.innerText || element.nodeValue; // might be a textNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7233
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7234
            return ret || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7235
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7237
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7238
     * Sets the text content of the HTMLElement. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7239
     * @method setText         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7240
     * @param {HTMLElement} element The html element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7241
     * @param {String} content The content to add. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7242
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7243
    setText: (documentElement.textContent !== undefined) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7244
        function(element, content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7245
            if (element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7246
                element.textContent = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7247
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7248
        } : function(element, content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7249
            if ('innerText' in element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7250
                element.innerText = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7251
            } else if ('nodeValue' in element) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7252
                element.nodeValue = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7253
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7254
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7256
    CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7257
        'for': 'htmlFor',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7258
        'class': 'className'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7259
    } : { // w3c
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7260
        'htmlFor': 'for',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7261
        'className': 'class'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7262
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7264
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7265
     * Provides a normalized attribute interface. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7266
     * @method setAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7267
     * @param {HTMLElement} el The target element for the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7268
     * @param {String} attr The attribute to set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7269
     * @param {String} val The value of the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7270
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7271
    setAttribute: function(el, attr, val, ieAttr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7272
        if (el && attr && el.setAttribute) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7273
            attr = Y_DOM.CUSTOM_ATTRIBUTES[attr] || attr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7274
            el.setAttribute(attr, val, ieAttr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7275
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7276
        else { Y.log('bad input to setAttribute', 'warn', 'dom'); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7277
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7280
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7281
     * Provides a normalized attribute interface. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7282
     * @method getAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7283
     * @param {HTMLElement} el The target element for the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7284
     * @param {String} attr The attribute to get.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7285
     * @return {String} The current value of the attribute. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7286
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7287
    getAttribute: function(el, attr, ieAttr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7288
        ieAttr = (ieAttr !== undefined) ? ieAttr : 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7289
        var ret = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7290
        if (el && attr && el.getAttribute) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7291
            attr = Y_DOM.CUSTOM_ATTRIBUTES[attr] || attr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7292
            ret = el.getAttribute(attr, ieAttr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7294
            if (ret === null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7295
                ret = ''; // per DOM spec
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7296
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7297
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7298
        else { Y.log('bad input to getAttribute', 'warn', 'dom'); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7299
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7300
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7302
    VALUE_SETTERS: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7304
    VALUE_GETTERS: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7306
    getValue: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7307
        var ret = '', // TODO: return null?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7308
            getter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7310
        if (node && node[TAG_NAME]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7311
            getter = Y_DOM.VALUE_GETTERS[node[TAG_NAME].toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7312
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7313
            if (getter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7314
                ret = getter(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7315
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7316
                ret = node.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7317
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7318
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7319
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7320
        // workaround for IE8 JSON stringify bug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7321
        // which converts empty string values to null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7322
        if (ret === EMPTY_STRING) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7323
            ret = EMPTY_STRING; // for real
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7324
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7326
        return (typeof ret === 'string') ? ret : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7327
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7329
    setValue: function(node, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7330
        var setter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7331
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7332
        if (node && node[TAG_NAME]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7333
            setter = Y_DOM.VALUE_SETTERS[node[TAG_NAME].toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7335
            if (setter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7336
                setter(node, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7337
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7338
                node.value = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7339
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7340
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7341
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7342
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7343
    creators: {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7344
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7346
addFeature('value-set', 'select', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7347
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7348
        var node = Y.config.doc.createElement('select');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7349
        node.innerHTML = '<option>1</option><option>2</option>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7350
        node.value = '2';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7351
        return (node.value && node.value === '2');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7352
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7353
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7355
if (!testFeature('value-set', 'select')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7356
    Y_DOM.VALUE_SETTERS.select = function(node, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7357
        for (var i = 0, options = node.getElementsByTagName('option'), option;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7358
                option = options[i++];) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7359
            if (Y_DOM.getValue(option) === val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7360
                option.selected = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7361
                //Y_DOM.setAttribute(option, 'selected', 'selected');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7362
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7363
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7364
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7365
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7366
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7368
Y.mix(Y_DOM.VALUE_GETTERS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7369
    button: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7370
        return (node.attributes && node.attributes.value) ? node.attributes.value.value : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7371
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7372
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7374
Y.mix(Y_DOM.VALUE_SETTERS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7375
    // IE: node.value changes the button text, which should be handled via innerHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7376
    button: function(node, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7377
        var attr = node.attributes.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7378
        if (!attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7379
            attr = node[OWNER_DOCUMENT].createAttribute('value');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7380
            node.setAttributeNode(attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7381
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7383
        attr.value = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7384
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7385
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7388
Y.mix(Y_DOM.VALUE_GETTERS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7389
    option: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7390
        var attrs = node.attributes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7391
        return (attrs.value && attrs.value.specified) ? node.value : node.text;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7392
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7394
    select: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7395
        var val = node.value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7396
            options = node.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7398
        if (options && options.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7399
            // TODO: implement multipe select
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7400
            if (node.multiple) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7401
                Y.log('multiple select normalization not implemented', 'warn', 'DOM');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7402
            } else if (node.selectedIndex > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7403
                val = Y_DOM.getValue(options[node.selectedIndex]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7404
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7405
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7407
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7408
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7409
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7410
var addClass, hasClass, removeClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7412
Y.mix(Y.DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7413
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7414
     * Determines whether a DOM element has the given className.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7415
     * @method hasClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7416
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7417
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7418
     * @param {String} className the class name to search for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7419
     * @return {Boolean} Whether or not the element has the given class. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7420
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7421
    hasClass: function(node, className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7422
        var re = Y.DOM._getRegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7423
        return re.test(node.className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7424
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7426
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7427
     * Adds a class name to a given DOM element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7428
     * @method addClass         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7429
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7430
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7431
     * @param {String} className the class name to add to the class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7432
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7433
    addClass: function(node, className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7434
        if (!Y.DOM.hasClass(node, className)) { // skip if already present 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7435
            node.className = Y.Lang.trim([node.className, className].join(' '));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7436
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7437
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7439
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7440
     * Removes a class name from a given element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7441
     * @method removeClass         
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7442
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7443
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7444
     * @param {String} className the class name to remove from the class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7445
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7446
    removeClass: function(node, className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7447
        if (className && hasClass(node, className)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7448
            node.className = Y.Lang.trim(node.className.replace(Y.DOM._getRegExp('(?:^|\\s+)' +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7449
                            className + '(?:\\s+|$)'), ' '));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7450
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7451
            if ( hasClass(node, className) ) { // in case of multiple adjacent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7452
                removeClass(node, className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7453
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7454
        }                 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7455
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7456
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7457
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7458
     * Replace a class with another class for a given element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7459
     * If no oldClassName is present, the newClassName is simply added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7460
     * @method replaceClass  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7461
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7462
     * @param {HTMLElement} element The DOM element 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7463
     * @param {String} oldClassName the class name to be replaced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7464
     * @param {String} newClassName the class name that will be replacing the old class name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7465
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7466
    replaceClass: function(node, oldC, newC) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7467
        //Y.log('replaceClass replacing ' + oldC + ' with ' + newC, 'info', 'Node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7468
        removeClass(node, oldC); // remove first in case oldC === newC
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7469
        addClass(node, newC);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7470
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7471
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7472
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7473
     * If the className exists on the node it is removed, if it doesn't exist it is added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7474
     * @method toggleClass  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7475
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7476
     * @param {HTMLElement} element The DOM element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7477
     * @param {String} className the class name to be toggled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7478
     * @param {Boolean} addClass optional boolean to indicate whether class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7479
     * should be added or removed regardless of current state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7480
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7481
    toggleClass: function(node, className, force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7482
        var add = (force !== undefined) ? force :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7483
                !(hasClass(node, className));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7485
        if (add) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7486
            addClass(node, className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7487
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7488
            removeClass(node, className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7489
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7490
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7491
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7493
hasClass = Y.DOM.hasClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7494
removeClass = Y.DOM.removeClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7495
addClass = Y.DOM.addClass;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7497
var re_tag = /<([a-z]+)/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7499
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7501
    addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7502
    testFeature = Y.Features.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7504
    creators = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7506
    createFromDIV = function(html, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7507
        var div = Y.config.doc.createElement('div'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7508
            ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7510
        div.innerHTML = html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7511
        if (!div.firstChild || div.firstChild.tagName !== tag.toUpperCase()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7512
            ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7513
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7514
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7515
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7516
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7517
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7518
    re_tbody = /(?:\/(?:thead|tfoot|tbody|caption|col|colgroup)>)+\s*<tbody/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7520
    TABLE_OPEN = '<table>',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7521
    TABLE_CLOSE = '</table>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7523
Y.mix(Y.DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7524
    _fragClones: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7526
    _create: function(html, doc, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7527
        tag = tag || 'div';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7529
        var frag = Y_DOM._fragClones[tag];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7530
        if (frag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7531
            frag = frag.cloneNode(false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7532
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7533
            frag = Y_DOM._fragClones[tag] = doc.createElement(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7534
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7535
        frag.innerHTML = html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7536
        return frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7537
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7539
    _children: function(node, tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7540
            var i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7541
            children = node.children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7542
            childNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7543
            hasComments,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7544
            child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7545
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7546
        if (children && children.tags) { // use tags filter when possible
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7547
            if (tag) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7548
                children = node.children.tags(tag);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7549
            } else { // IE leaks comments into children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7550
                hasComments = children.tags('!').length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7551
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7552
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7553
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7554
        if (!children || (!children.tags && tag) || hasComments) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7555
            childNodes = children || node.childNodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7556
            children = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7557
            while ((child = childNodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7558
                if (child.nodeType === 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7559
                    if (!tag || tag === child.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7560
                        children.push(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7561
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7562
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7563
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7564
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7566
        return children || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7567
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7569
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7570
     * Creates a new dom node using the provided markup string. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7571
     * @method create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7572
     * @param {String} html The markup used to create the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7573
     * @param {HTMLDocument} doc An optional document context 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7574
     * @return {HTMLElement|DocumentFragment} returns a single HTMLElement 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7575
     * when creating one node, and a documentFragment when creating
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7576
     * multiple nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7577
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7578
    create: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7579
        if (typeof html === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7580
            html = Y.Lang.trim(html); // match IE which trims whitespace from innerHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7582
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7584
        doc = doc || Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7585
        var m = re_tag.exec(html),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7586
            create = Y_DOM._create,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7587
            custom = creators,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7588
            ret = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7589
            creator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7590
            tag, nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7592
        if (html != undefined) { // not undefined or null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7593
            if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7594
                creator = custom[m[1].toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7595
                if (typeof creator === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7596
                    create = creator; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7597
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7598
                    tag = creator;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7599
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7600
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7602
            nodes = create(html, doc, tag).childNodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7604
            if (nodes.length === 1) { // return single node, breaking parentNode ref from "fragment"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7605
                ret = nodes[0].parentNode.removeChild(nodes[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7606
            } else if (nodes[0] && nodes[0].className === 'yui3-big-dummy') { // using dummy node to preserve some attributes (e.g. OPTION not selected)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7607
                if (nodes.length === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7608
                    ret = nodes[0].nextSibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7609
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7610
                    nodes[0].parentNode.removeChild(nodes[0]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7611
                    ret = Y_DOM._nl2frag(nodes, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7612
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7613
            } else { // return multiple nodes as a fragment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7614
                 ret = Y_DOM._nl2frag(nodes, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7615
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7617
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7619
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7620
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7622
    _nl2frag: function(nodes, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7623
        var ret = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7624
            i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7625
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7626
        if (nodes && (nodes.push || nodes.item) && nodes[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7627
            doc = doc || nodes[0].ownerDocument; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7628
            ret = doc.createDocumentFragment();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7630
            if (nodes.item) { // convert live list to static array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7631
                nodes = Y.Array(nodes, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7632
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7633
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7634
            for (i = 0, len = nodes.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7635
                ret.appendChild(nodes[i]); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7636
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7637
        } // else inline with log for minification
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7638
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7639
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7641
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7642
     * Inserts content in a node at the given location 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7643
     * @method addHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7644
     * @param {HTMLElement} node The node to insert into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7645
     * @param {HTMLElement | Array | HTMLCollection} content The content to be inserted 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7646
     * @param {HTMLElement} where Where to insert the content
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7647
     * If no "where" is given, content is appended to the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7648
     * Possible values for "where"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7649
     * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7650
     * <dt>HTMLElement</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7651
     * <dd>The element to insert before</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7652
     * <dt>"replace"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7653
     * <dd>Replaces the existing HTML</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7654
     * <dt>"before"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7655
     * <dd>Inserts before the existing HTML</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7656
     * <dt>"before"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7657
     * <dd>Inserts content before the node</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7658
     * <dt>"after"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7659
     * <dd>Inserts content after the node</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7660
     * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7661
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7662
    addHTML: function(node, content, where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7663
        var nodeParent = node.parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7664
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7665
            item,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7666
            ret = content,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7667
            newNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7668
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7670
        if (content != undefined) { // not null or undefined (maybe 0)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7671
            if (content.nodeType) { // DOM node, just add it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7672
                newNode = content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7673
            } else if (typeof content == 'string' || typeof content == 'number') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7674
                ret = newNode = Y_DOM.create(content);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7675
            } else if (content[0] && content[0].nodeType) { // array or collection 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7676
                newNode = Y.config.doc.createDocumentFragment();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7677
                while ((item = content[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7678
                    newNode.appendChild(item); // append to fragment for insertion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7679
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7680
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7681
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7683
        if (where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7684
            if (newNode && where.parentNode) { // insert regardless of relationship to node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7685
                where.parentNode.insertBefore(newNode, where);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7686
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7687
                switch (where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7688
                    case 'replace':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7689
                        while (node.firstChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7690
                            node.removeChild(node.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7691
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7692
                        if (newNode) { // allow empty content to clear node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7693
                            node.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7694
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7695
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7696
                    case 'before':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7697
                        if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7698
                            nodeParent.insertBefore(newNode, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7699
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7700
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7701
                    case 'after':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7702
                        if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7703
                            if (node.nextSibling) { // IE errors if refNode is null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7704
                                nodeParent.insertBefore(newNode, node.nextSibling);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7705
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7706
                                nodeParent.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7707
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7708
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7709
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7710
                    default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7711
                        if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7712
                            node.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7713
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7714
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7715
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7716
        } else if (newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7717
            node.appendChild(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7718
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7720
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7721
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7722
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7723
    wrap: function(node, html) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7724
        var parent = (html && html.nodeType) ? html : Y.DOM.create(html),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7725
            nodes = parent.getElementsByTagName('*');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7726
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7727
        if (nodes.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7728
            parent = nodes[nodes.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7729
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7731
        if (node.parentNode) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7732
            node.parentNode.replaceChild(parent, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7733
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7734
        parent.appendChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7735
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7737
    unwrap: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7738
        var parent = node.parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7739
            lastChild = parent.lastChild,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7740
            next = node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7741
            grandparent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7742
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7743
        if (parent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7744
            grandparent = parent.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7745
            if (grandparent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7746
                node = parent.firstChild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7747
                while (node !== lastChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7748
                    next = node.nextSibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7749
                    grandparent.insertBefore(node, parent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7750
                    node = next;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7751
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7752
                grandparent.replaceChild(lastChild, parent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7753
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7754
                parent.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7755
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7756
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7757
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7758
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7760
addFeature('innerhtml', 'table', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7761
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7762
        var node = Y.config.doc.createElement('table');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7763
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7764
            node.innerHTML = '<tbody></tbody>';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7765
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7766
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7767
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7768
        return (node.firstChild && node.firstChild.nodeName === 'TBODY');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7769
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7770
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7772
addFeature('innerhtml-div', 'tr', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7773
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7774
        return createFromDIV('<tr></tr>', 'tr');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7775
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7776
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7777
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7778
addFeature('innerhtml-div', 'script', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7779
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7780
        return createFromDIV('<script></script>', 'script');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7781
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7782
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7784
if (!testFeature('innerhtml', 'table')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7785
    // TODO: thead/tfoot with nested tbody
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7786
        // IE adds TBODY when creating TABLE elements (which may share this impl)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7787
    creators.tbody = function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7788
        var frag = Y_DOM.create(TABLE_OPEN + html + TABLE_CLOSE, doc),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7789
            tb = Y.DOM._children(frag, 'tbody')[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7791
        if (frag.children.length > 1 && tb && !re_tbody.test(html)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7792
            tb.parentNode.removeChild(tb); // strip extraneous tbody
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7793
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7794
        return frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7795
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7796
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7798
if (!testFeature('innerhtml-div', 'script')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7799
    creators.script = function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7800
        var frag = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7802
        frag.innerHTML = '-' + html;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7803
        frag.removeChild(frag.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7804
        return frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7805
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7807
    creators.link = creators.style = creators.script;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7808
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7810
if (!testFeature('innerhtml-div', 'tr')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7811
    Y.mix(creators, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7812
        option: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7813
            return Y_DOM.create('<select><option class="yui3-big-dummy" selected></option>' + html + '</select>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7814
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7815
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7816
        tr: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7817
            return Y_DOM.create('<tbody>' + html + '</tbody>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7818
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7819
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7820
        td: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7821
            return Y_DOM.create('<tr>' + html + '</tr>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7822
        }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7823
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7824
        col: function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7825
            return Y_DOM.create('<colgroup>' + html + '</colgroup>', doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7826
        }, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7828
        tbody: 'table'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7829
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7830
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7831
    Y.mix(creators, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7832
        legend: 'fieldset',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7833
        th: creators.td,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7834
        thead: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7835
        tfoot: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7836
        caption: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7837
        colgroup: creators.tbody,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7838
        optgroup: creators.option
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7839
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7840
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7841
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7842
Y_DOM.creators = creators;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7843
Y.mix(Y.DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7844
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7845
     * Sets the width of the element to the given size, regardless
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7846
     * of box model, border, padding, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7847
     * @method setWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7848
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7849
     * @param {String|Number} size The pixel height to size to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7850
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7852
    setWidth: function(node, size) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7853
        Y.DOM._setSize(node, 'width', size);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7854
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7856
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7857
     * Sets the height of the element to the given size, regardless
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7858
     * of box model, border, padding, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7859
     * @method setHeight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7860
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7861
     * @param {String|Number} size The pixel height to size to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7862
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7863
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7864
    setHeight: function(node, size) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7865
        Y.DOM._setSize(node, 'height', size);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7866
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7867
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7868
    _setSize: function(node, prop, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7869
        val = (val > 0) ? val : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7870
        var size = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7872
        node.style[prop] = val + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7873
        size = (prop === 'height') ? node.offsetHeight : node.offsetWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7874
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7875
        if (size > val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7876
            val = val - (size - val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7877
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7878
            if (val < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7879
                val = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7880
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7881
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7882
            node.style[prop] = val + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7883
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7884
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7885
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7887
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7888
}, '@VERSION@', {"requires": ["dom-core"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7889
YUI.add('color-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7891
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7892
Color provides static methods for color conversion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7894
    Y.Color.toRGB('f00'); // rgb(255, 0, 0)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7896
    Y.Color.toHex('rgb(255, 255, 0)'); // #ffff00
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7898
@module color
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7899
@submodule color-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7900
@class Color
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7901
@since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7902
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7903
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7904
var REGEX_HEX = /^#?([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})(\ufffe)?/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7905
    REGEX_HEX3 = /^#?([\da-fA-F]{1})([\da-fA-F]{1})([\da-fA-F]{1})(\ufffe)?/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7906
    REGEX_RGB = /rgba?\(([\d]{1,3}), ?([\d]{1,3}), ?([\d]{1,3}),? ?([.\d]*)?\)/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7907
    TYPES = { 'HEX': 'hex', 'RGB': 'rgb', 'RGBA': 'rgba' },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7908
    CONVERTS = { 'hex': 'toHex', 'rgb': 'toRGB', 'rgba': 'toRGBA' };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7911
Y.Color = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7912
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7913
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7914
    @property KEYWORDS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7915
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7916
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7917
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7918
    KEYWORDS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7919
        'black': '000', 'silver': 'c0c0c0', 'gray': '808080', 'white': 'fff',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7920
        'maroon': '800000', 'red': 'f00', 'purple': '800080', 'fuchsia': 'f0f',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7921
        'green': '008000', 'lime': '0f0', 'olive': '808000', 'yellow': 'ff0',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7922
        'navy': '000080', 'blue': '00f', 'teal': '008080', 'aqua': '0ff'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7923
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7925
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7926
        NOTE: `(\ufffe)?` is added to the Regular Expression to carve out a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7927
        place for the alpha channel that is returned from toArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7928
        without compromising any usage of the Regular Expression
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7930
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7931
    @property REGEX_HEX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7932
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7933
    @default /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})(\ufffe)?/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7934
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7935
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7936
    REGEX_HEX: REGEX_HEX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7938
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7939
        NOTE: `(\ufffe)?` is added to the Regular Expression to carve out a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7940
        place for the alpha channel that is returned from toArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7941
        without compromising any usage of the Regular Expression
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7943
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7944
    @property REGEX_HEX3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7945
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7946
    @default /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})(\ufffe)?/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7947
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7948
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7949
    REGEX_HEX3: REGEX_HEX3,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7950
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7951
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7952
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7953
    @property REGEX_RGB
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7954
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7955
    @default /rgba?\(([0-9]{1,3}), ?([0-9]{1,3}), ?([0-9]{1,3}),? ?([.0-9]{1,3})?\)/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7956
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7957
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7958
    REGEX_RGB: REGEX_RGB,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7960
    re_RGB: REGEX_RGB,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7962
    re_hex: REGEX_HEX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7963
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7964
    re_hex3: REGEX_HEX3,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7965
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7966
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7967
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7968
    @property STR_HEX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7969
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7970
    @default #{*}{*}{*}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7971
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7972
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7973
    STR_HEX: '#{*}{*}{*}',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7975
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7976
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7977
    @property STR_RGB
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7978
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7979
    @default rgb({*}, {*}, {*})
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7980
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7981
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7982
    STR_RGB: 'rgb({*}, {*}, {*})',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7984
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7985
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7986
    @property STR_RGBA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7987
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7988
    @default rgba({*}, {*}, {*}, {*})
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7989
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7990
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7991
    STR_RGBA: 'rgba({*}, {*}, {*}, {*})',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7992
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7993
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7994
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7995
    @property TYPES
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7996
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7997
    @default {'rgb':'rgb', 'rgba':'rgba'}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7998
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  7999
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8000
    TYPES: TYPES,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8001
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8002
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8003
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8004
    @property CONVERTS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8005
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8006
    @default {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8007
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8008
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8009
    CONVERTS: CONVERTS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8011
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8012
     Converts the provided string to the provided type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8013
     You can use the `Y.Color.TYPES` to get a valid `to` type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8014
     If the color cannot be converted, the original color will be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8015
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8016
     @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8017
     @method convert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8018
     @param {String} str
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8019
     @param {String} to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8020
     @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8021
     @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8022
     **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8023
    convert: function (str, to) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8024
        var convert = Y.Color.CONVERTS[to.toLowerCase()],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8025
            clr = str;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8026
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8027
        if (convert && Y.Color[convert]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8028
            clr = Y.Color[convert](str);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8029
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8030
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8031
        return clr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8032
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8033
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8034
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8035
    Converts provided color value to a hex value string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8037
    @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8038
    @method toHex
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8039
    @param {String} str Hex or RGB value string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8040
    @return {String} returns array of values or CSS string if options.css is true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8041
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8042
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8043
    toHex: function (str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8044
        var clr = Y.Color._convertTo(str, 'hex'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8045
            isTransparent = clr.toLowerCase() === 'transparent';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8047
        if (clr.charAt(0) !== '#' && !isTransparent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8048
            clr = '#' + clr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8049
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8050
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8051
        return isTransparent ? clr.toLowerCase() : clr.toUpperCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8052
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8053
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8054
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8055
    Converts provided color value to an RGB value string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8056
    @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8057
    @method toRGB
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8058
    @param {String} str Hex or RGB value string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8059
    @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8060
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8061
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8062
    toRGB: function (str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8063
        var clr = Y.Color._convertTo(str, 'rgb');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8064
        return clr.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8065
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8066
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8067
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8068
    Converts provided color value to an RGB value string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8069
    @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8070
    @method toRGBA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8071
    @param {String} str Hex or RGB value string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8072
    @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8073
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8074
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8075
    toRGBA: function (str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8076
        var clr = Y.Color._convertTo(str, 'rgba' );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8077
        return clr.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8078
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8079
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8080
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8081
    Converts the provided color string to an array of values where the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8082
        last value is the alpha value. Will return an empty array if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8083
        the provided string is not able to be parsed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8085
        NOTE: `(\ufffe)?` is added to `HEX` and `HEX3` Regular Expressions to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8086
        carve out a place for the alpha channel that is returned from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8087
        toArray without compromising any usage of the Regular Expression
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8088
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8089
        Y.Color.toArray('fff');              // ['ff', 'ff', 'ff', 1]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8090
        Y.Color.toArray('rgb(0, 0, 0)');     // ['0', '0', '0', 1]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8091
        Y.Color.toArray('rgba(0, 0, 0, 0)'); // ['0', '0', '0', 1]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8092
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8094
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8095
    @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8096
    @method toArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8097
    @param {String} str
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8098
    @return {Array}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8099
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8100
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8101
    toArray: function(str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8102
        // parse with regex and return "matches" array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8103
        var type = Y.Color.findType(str).toUpperCase(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8104
            regex,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8105
            arr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8106
            length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8107
            lastItem;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8109
        if (type === 'HEX' && str.length < 5) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8110
            type = 'HEX3';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8111
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8113
        if (type.charAt(type.length - 1) === 'A') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8114
            type = type.slice(0, -1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8115
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8117
        regex = Y.Color['REGEX_' + type];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8119
        if (regex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8120
            arr = regex.exec(str) || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8121
            length = arr.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8123
            if (length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8125
                arr.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8126
                length--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8128
                if (type === 'HEX3') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8129
                    arr[0] += arr[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8130
                    arr[1] += arr[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8131
                    arr[2] += arr[2];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8132
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8134
                lastItem = arr[length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8135
                if (!lastItem) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8136
                    arr[length - 1] = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8137
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8138
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8139
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8141
        return arr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8143
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8145
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8146
    Converts the array of values to a string based on the provided template.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8147
    @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8148
    @method fromArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8149
    @param {Array} arr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8150
    @param {String} template
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8151
    @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8152
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8153
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8154
    fromArray: function(arr, template) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8155
        arr = arr.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8157
        if (typeof template === 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8158
            return arr.join(', ');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8159
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8161
        var replace = '{*}';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8163
        template = Y.Color['STR_' + template.toUpperCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8165
        if (arr.length === 3 && template.match(/\{\*\}/g).length === 4) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8166
            arr.push(1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8167
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8169
        while ( template.indexOf(replace) >= 0 && arr.length > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8170
            template = template.replace(replace, arr.shift());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8171
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8173
        return template;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8174
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8176
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8177
    Finds the value type based on the str value provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8178
    @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8179
    @method findType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8180
    @param {String} str
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8181
    @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8182
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8183
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8184
    findType: function (str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8185
        if (Y.Color.KEYWORDS[str]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8186
            return 'keyword';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8187
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8189
        var index = str.indexOf('('),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8190
            key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8192
        if (index > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8193
            key = str.substr(0, index);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8194
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8195
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8196
        if (key && Y.Color.TYPES[key.toUpperCase()]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8197
            return Y.Color.TYPES[key.toUpperCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8198
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8200
        return 'hex';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8202
    }, // return 'keyword', 'hex', 'rgb'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8203
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8204
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8205
    Retrives the alpha channel from the provided string. If no alpha
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8206
        channel is present, `1` will be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8207
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8208
    @method _getAlpha
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8209
    @param {String} clr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8210
    @return {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8211
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8212
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8213
    _getAlpha: function (clr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8214
        var alpha,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8215
            arr = Y.Color.toArray(clr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8216
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8217
        if (arr.length > 3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8218
            alpha = arr.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8219
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8221
        return +alpha || 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8222
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8224
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8225
    Returns the hex value string if found in the KEYWORDS object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8226
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8227
    @method _keywordToHex
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8228
    @param {String} clr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8229
    @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8230
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8231
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8232
    _keywordToHex: function (clr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8233
        var keyword = Y.Color.KEYWORDS[clr];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8235
        if (keyword) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8236
            return keyword;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8237
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8238
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8239
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8240
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8241
    Converts the provided color string to the value type provided as `to`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8242
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8243
    @method _convertTo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8244
    @param {String} clr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8245
    @param {String} to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8246
    @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8247
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8248
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8249
    _convertTo: function(clr, to) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8250
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8251
        if (clr === 'transparent') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8252
            return clr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8253
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8255
        var from = Y.Color.findType(clr),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8256
            originalTo = to,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8257
            needsAlpha,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8258
            alpha,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8259
            method,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8260
            ucTo;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8262
        if (from === 'keyword') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8263
            clr = Y.Color._keywordToHex(clr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8264
            from = 'hex';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8265
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8267
        if (from === 'hex' && clr.length < 5) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8268
            if (clr.charAt(0) === '#') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8269
                clr = clr.substr(1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8270
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8271
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8272
            clr = '#' + clr.charAt(0) + clr.charAt(0) +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8273
                        clr.charAt(1) + clr.charAt(1) +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8274
                        clr.charAt(2) + clr.charAt(2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8275
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8277
        if (from === to) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8278
            return clr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8279
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8281
        if (from.charAt(from.length - 1) === 'a') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8282
            from = from.slice(0, -1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8283
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8285
        needsAlpha = (to.charAt(to.length - 1) === 'a');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8286
        if (needsAlpha) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8287
            to = to.slice(0, -1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8288
            alpha = Y.Color._getAlpha(clr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8289
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8291
        ucTo = to.charAt(0).toUpperCase() + to.substr(1).toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8292
        method = Y.Color['_' + from + 'To' + ucTo ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8294
        // check to see if need conversion to rgb first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8295
        // check to see if there is a direct conversion method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8296
        // convertions are: hex <-> rgb <-> hsl
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8297
        if (!method) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8298
            if (from !== 'rgb' && to !== 'rgb') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8299
                clr = Y.Color['_' + from + 'ToRgb'](clr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8300
                from = 'rgb';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8301
                method = Y.Color['_' + from + 'To' + ucTo ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8302
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8303
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8305
        if (method) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8306
            clr = ((method)(clr, needsAlpha));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8307
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8309
        // process clr from arrays to strings after conversions if alpha is needed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8310
        if (needsAlpha) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8311
            if (!Y.Lang.isArray(clr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8312
                clr = Y.Color.toArray(clr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8313
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8314
            clr.push(alpha);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8315
            clr = Y.Color.fromArray(clr, originalTo.toUpperCase());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8316
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8317
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8318
        return clr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8319
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8321
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8322
    Processes the hex string into r, g, b values. Will return values as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8323
        an array, or as an rgb string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8324
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8325
    @method _hexToRgb
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8326
    @param {String} str
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8327
    @param {Boolean} [toArray]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8328
    @return {String|Array}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8329
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8330
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8331
    _hexToRgb: function (str, toArray) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8332
        var r, g, b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8334
        /*jshint bitwise:false*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8335
        if (str.charAt(0) === '#') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8336
            str = str.substr(1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8337
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8339
        str = parseInt(str, 16);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8340
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8341
        r = str >> 16;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8342
        g = str >> 8 & 0xFF;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8343
        b = str & 0xFF;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8345
        if (toArray) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8346
            return [r, g, b];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8347
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8349
        return 'rgb(' + r + ', ' + g + ', ' + b + ')';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8350
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8352
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8353
    Processes the rgb string into r, g, b values. Will return values as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8354
        an array, or as a hex string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8355
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8356
    @method _rgbToHex
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8357
    @param {String} str
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8358
    @param {Boolean} [toArray]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8359
    @return {String|Array}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8360
    @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8361
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8362
    _rgbToHex: function (str) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8363
        /*jshint bitwise:false*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8364
        var rgb = Y.Color.toArray(str),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8365
            hex = rgb[2] | (rgb[1] << 8) | (rgb[0] << 16);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8366
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8367
        hex = (+hex).toString(16);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8368
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8369
        while (hex.length < 6) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8370
            hex = '0' + hex;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8371
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8373
        return '#' + hex;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8374
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8376
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8380
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8381
YUI.add('dom-style', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8383
(function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8384
/** 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8385
 * Add style management functionality to DOM.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8386
 * @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8387
 * @submodule dom-style
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8388
 * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8389
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8391
var DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8392
    DEFAULT_VIEW = 'defaultView',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8393
    OWNER_DOCUMENT = 'ownerDocument',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8394
    STYLE = 'style',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8395
    FLOAT = 'float',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8396
    CSS_FLOAT = 'cssFloat',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8397
    STYLE_FLOAT = 'styleFloat',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8398
    TRANSPARENT = 'transparent',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8399
    GET_COMPUTED_STYLE = 'getComputedStyle',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8400
    GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8402
    WINDOW = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8403
    DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8404
    UNDEFINED = undefined,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8406
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8407
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8408
    TRANSFORM = 'transform',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8409
    TRANSFORMORIGIN = 'transformOrigin',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8410
    VENDOR_TRANSFORM = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8411
        'WebkitTransform',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8412
        'MozTransform',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8413
        'OTransform',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8414
        'msTransform'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8415
    ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8417
    re_color = /color$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8418
    re_unit = /width|height|top|left|right|bottom|margin|padding/i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8420
Y.Array.each(VENDOR_TRANSFORM, function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8421
    if (val in DOCUMENT[DOCUMENT_ELEMENT].style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8422
        TRANSFORM = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8423
        TRANSFORMORIGIN = val + "Origin";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8424
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8425
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8427
Y.mix(Y_DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8428
    DEFAULT_UNIT: 'px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8430
    CUSTOM_STYLES: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8431
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8434
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8435
     * Sets a style property for a given element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8436
     * @method setStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8437
     * @param {HTMLElement} An HTMLElement to apply the style to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8438
     * @param {String} att The style property to set. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8439
     * @param {String|Number} val The value. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8440
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8441
    setStyle: function(node, att, val, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8442
        style = style || node.style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8443
        var CUSTOM_STYLES = Y_DOM.CUSTOM_STYLES;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8445
        if (style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8446
            if (val === null || val === '') { // normalize unsetting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8447
                val = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8448
            } else if (!isNaN(new Number(val)) && re_unit.test(att)) { // number values may need a unit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8449
                val += Y_DOM.DEFAULT_UNIT;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8450
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8452
            if (att in CUSTOM_STYLES) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8453
                if (CUSTOM_STYLES[att].set) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8454
                    CUSTOM_STYLES[att].set(node, val, style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8455
                    return; // NOTE: return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8456
                } else if (typeof CUSTOM_STYLES[att] === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8457
                    att = CUSTOM_STYLES[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8458
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8459
            } else if (att === '') { // unset inline styles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8460
                att = 'cssText';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8461
                val = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8462
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8463
            style[att] = val; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8464
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8465
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8467
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8468
     * Returns the current style value for the given property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8469
     * @method getStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8470
     * @param {HTMLElement} An HTMLElement to get the style from.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8471
     * @param {String} att The style property to get. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8472
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8473
    getStyle: function(node, att, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8474
        style = style || node.style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8475
        var CUSTOM_STYLES = Y_DOM.CUSTOM_STYLES,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8476
            val = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8478
        if (style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8479
            if (att in CUSTOM_STYLES) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8480
                if (CUSTOM_STYLES[att].get) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8481
                    return CUSTOM_STYLES[att].get(node, att, style); // NOTE: return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8482
                } else if (typeof CUSTOM_STYLES[att] === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8483
                    att = CUSTOM_STYLES[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8484
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8485
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8486
            val = style[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8487
            if (val === '') { // TODO: is empty string sufficient?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8488
                val = Y_DOM[GET_COMPUTED_STYLE](node, att);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8489
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8490
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8492
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8493
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8494
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8495
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8496
     * Sets multiple style properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8497
     * @method setStyles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8498
     * @param {HTMLElement} node An HTMLElement to apply the styles to. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8499
     * @param {Object} hash An object literal of property:value pairs. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8500
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8501
    setStyles: function(node, hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8502
        var style = node.style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8503
        Y.each(hash, function(v, n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8504
            Y_DOM.setStyle(node, n, v, style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8505
        }, Y_DOM);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8506
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8508
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8509
     * Returns the computed style for the given node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8510
     * @method getComputedStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8511
     * @param {HTMLElement} An HTMLElement to get the style from.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8512
     * @param {String} att The style property to get. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8513
     * @return {String} The computed value of the style property. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8514
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8515
    getComputedStyle: function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8516
        var val = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8517
            doc = node[OWNER_DOCUMENT],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8518
            computed;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8520
        if (node[STYLE] && doc[DEFAULT_VIEW] && doc[DEFAULT_VIEW][GET_COMPUTED_STYLE]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8521
            computed = doc[DEFAULT_VIEW][GET_COMPUTED_STYLE](node, null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8522
            if (computed) { // FF may be null in some cases (ticket #2530548)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8523
                val = computed[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8524
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8525
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8526
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8527
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8528
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8530
// normalize reserved word float alternatives ("cssFloat" or "styleFloat")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8531
if (DOCUMENT[DOCUMENT_ELEMENT][STYLE][CSS_FLOAT] !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8532
    Y_DOM.CUSTOM_STYLES[FLOAT] = CSS_FLOAT;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8533
} else if (DOCUMENT[DOCUMENT_ELEMENT][STYLE][STYLE_FLOAT] !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8534
    Y_DOM.CUSTOM_STYLES[FLOAT] = STYLE_FLOAT;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8535
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8537
// fix opera computedStyle default color unit (convert to rgb)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8538
if (Y.UA.opera) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8539
    Y_DOM[GET_COMPUTED_STYLE] = function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8540
        var view = node[OWNER_DOCUMENT][DEFAULT_VIEW],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8541
            val = view[GET_COMPUTED_STYLE](node, '')[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8542
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8543
        if (re_color.test(att)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8544
            val = Y.Color.toRGB(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8545
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8547
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8548
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8549
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8550
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8551
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8552
// safari converts transparent to rgba(), others use "transparent"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8553
if (Y.UA.webkit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8554
    Y_DOM[GET_COMPUTED_STYLE] = function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8555
        var view = node[OWNER_DOCUMENT][DEFAULT_VIEW],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8556
            val = view[GET_COMPUTED_STYLE](node, '')[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8558
        if (val === 'rgba(0, 0, 0, 0)') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8559
            val = TRANSPARENT; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8560
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8562
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8563
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8565
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8567
Y.DOM._getAttrOffset = function(node, attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8568
    var val = Y.DOM[GET_COMPUTED_STYLE](node, attr),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8569
        offsetParent = node.offsetParent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8570
        position,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8571
        parentOffset,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8572
        offset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8574
    if (val === 'auto') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8575
        position = Y.DOM.getStyle(node, 'position');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8576
        if (position === 'static' || position === 'relative') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8577
            val = 0;    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8578
        } else if (offsetParent && offsetParent[GET_BOUNDING_CLIENT_RECT]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8579
            parentOffset = offsetParent[GET_BOUNDING_CLIENT_RECT]()[attr];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8580
            offset = node[GET_BOUNDING_CLIENT_RECT]()[attr];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8581
            if (attr === 'left' || attr === 'top') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8582
                val = offset - parentOffset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8583
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8584
                val = parentOffset - node[GET_BOUNDING_CLIENT_RECT]()[attr];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8585
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8586
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8587
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8588
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8589
    return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8590
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8592
Y.DOM._getOffset = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8593
    var pos,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8594
        xy = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8596
    if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8597
        pos = Y_DOM.getStyle(node, 'position');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8598
        xy = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8599
            parseInt(Y_DOM[GET_COMPUTED_STYLE](node, 'left'), 10),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8600
            parseInt(Y_DOM[GET_COMPUTED_STYLE](node, 'top'), 10)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8601
        ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8603
        if ( isNaN(xy[0]) ) { // in case of 'auto'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8604
            xy[0] = parseInt(Y_DOM.getStyle(node, 'left'), 10); // try inline
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8605
            if ( isNaN(xy[0]) ) { // default to offset value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8606
                xy[0] = (pos === 'relative') ? 0 : node.offsetLeft || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8607
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8608
        } 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8609
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8610
        if ( isNaN(xy[1]) ) { // in case of 'auto'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8611
            xy[1] = parseInt(Y_DOM.getStyle(node, 'top'), 10); // try inline
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8612
            if ( isNaN(xy[1]) ) { // default to offset value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8613
                xy[1] = (pos === 'relative') ? 0 : node.offsetTop || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8614
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8615
        } 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8616
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8617
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8618
    return xy;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8619
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8620
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8622
Y_DOM.CUSTOM_STYLES.transform = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8623
    set: function(node, val, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8624
        style[TRANSFORM] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8625
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8627
    get: function(node, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8628
        return Y_DOM[GET_COMPUTED_STYLE](node, TRANSFORM);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8629
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8630
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8632
Y_DOM.CUSTOM_STYLES.transformOrigin = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8633
    set: function(node, val, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8634
        style[TRANSFORMORIGIN] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8635
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8636
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8637
    get: function(node, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8638
        return Y_DOM[GET_COMPUTED_STYLE](node, TRANSFORMORIGIN);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8639
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8640
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8641
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8643
})(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8644
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8645
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8646
}, '@VERSION@', {"requires": ["dom-base", "color-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8647
YUI.add('dom-style-ie', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8649
(function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8650
var HAS_LAYOUT = 'hasLayout',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8651
    PX = 'px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8652
    FILTER = 'filter',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8653
    FILTERS = 'filters',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8654
    OPACITY = 'opacity',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8655
    AUTO = 'auto',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8657
    BORDER_WIDTH = 'borderWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8658
    BORDER_TOP_WIDTH = 'borderTopWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8659
    BORDER_RIGHT_WIDTH = 'borderRightWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8660
    BORDER_BOTTOM_WIDTH = 'borderBottomWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8661
    BORDER_LEFT_WIDTH = 'borderLeftWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8662
    WIDTH = 'width',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8663
    HEIGHT = 'height',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8664
    TRANSPARENT = 'transparent',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8665
    VISIBLE = 'visible',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8666
    GET_COMPUTED_STYLE = 'getComputedStyle',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8667
    UNDEFINED = undefined,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8668
    documentElement = Y.config.doc.documentElement,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8670
    testFeature = Y.Features.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8671
    addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8672
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8673
    // TODO: unit-less lineHeight (e.g. 1.22)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8674
    re_unit = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8676
    isIE8 = (Y.UA.ie >= 8),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8678
    _getStyleObj = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8679
        return node.currentStyle || node.style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8680
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8682
    ComputedStyle = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8683
        CUSTOM_STYLES: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8684
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8685
        get: function(el, property) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8686
            var value = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8687
                current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8689
            if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8690
                    current = _getStyleObj(el)[property];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8692
                if (property === OPACITY && Y.DOM.CUSTOM_STYLES[OPACITY]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8693
                    value = Y.DOM.CUSTOM_STYLES[OPACITY].get(el);        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8694
                } else if (!current || (current.indexOf && current.indexOf(PX) > -1)) { // no need to convert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8695
                    value = current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8696
                } else if (Y.DOM.IE.COMPUTED[property]) { // use compute function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8697
                    value = Y.DOM.IE.COMPUTED[property](el, property);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8698
                } else if (re_unit.test(current)) { // convert to pixel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8699
                    value = ComputedStyle.getPixel(el, property) + PX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8700
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8701
                    value = current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8702
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8703
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8705
            return value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8706
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8708
        sizeOffsets: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8709
            width: ['Left', 'Right'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8710
            height: ['Top', 'Bottom'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8711
            top: ['Top'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8712
            bottom: ['Bottom']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8713
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8715
        getOffset: function(el, prop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8716
            var current = _getStyleObj(el)[prop],                     // value of "width", "top", etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8717
                capped = prop.charAt(0).toUpperCase() + prop.substr(1), // "Width", "Top", etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8718
                offset = 'offset' + capped,                             // "offsetWidth", "offsetTop", etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8719
                pixel = 'pixel' + capped,                               // "pixelWidth", "pixelTop", etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8720
                sizeOffsets = ComputedStyle.sizeOffsets[prop], 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8721
                mode = el.ownerDocument.compatMode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8722
                value = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8724
            // IE pixelWidth incorrect for percent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8725
            // manually compute by subtracting padding and border from offset size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8726
            // NOTE: clientWidth/Height (size minus border) is 0 when current === AUTO so offsetHeight is used
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8727
            // reverting to auto from auto causes position stacking issues (old impl)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8728
            if (current === AUTO || current.indexOf('%') > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8729
                value = el['offset' + capped];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8731
                if (mode !== 'BackCompat') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8732
                    if (sizeOffsets[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8733
                        value -= ComputedStyle.getPixel(el, 'padding' + sizeOffsets[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8734
                        value -= ComputedStyle.getBorderWidth(el, 'border' + sizeOffsets[0] + 'Width', 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8735
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8737
                    if (sizeOffsets[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8738
                        value -= ComputedStyle.getPixel(el, 'padding' + sizeOffsets[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8739
                        value -= ComputedStyle.getBorderWidth(el, 'border' + sizeOffsets[1] + 'Width', 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8740
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8741
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8742
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8743
            } else { // use style.pixelWidth, etc. to convert to pixels
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8744
                // need to map style.width to currentStyle (no currentStyle.pixelWidth)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8745
                if (!el.style[pixel] && !el.style[prop]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8746
                    el.style[prop] = current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8747
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8748
                value = el.style[pixel];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8749
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8750
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8751
            return value + PX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8752
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8754
        borderMap: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8755
            thin: (isIE8) ? '1px' : '2px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8756
            medium: (isIE8) ? '3px': '4px', 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8757
            thick: (isIE8) ? '5px' : '6px'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8758
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8760
        getBorderWidth: function(el, property, omitUnit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8761
            var unit = omitUnit ? '' : PX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8762
                current = el.currentStyle[property];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8764
            if (current.indexOf(PX) < 0) { // look up keywords if a border exists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8765
                if (ComputedStyle.borderMap[current] &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8766
                        el.currentStyle.borderStyle !== 'none') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8767
                    current = ComputedStyle.borderMap[current];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8768
                } else { // otherwise no border (default is "medium")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8769
                    current = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8770
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8771
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8772
            return (omitUnit) ? parseFloat(current) : current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8773
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8775
        getPixel: function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8776
            // use pixelRight to convert to px
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8777
            var val = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8778
                style = _getStyleObj(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8779
                styleRight = style.right,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8780
                current = style[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8782
            node.style.right = current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8783
            val = node.style.pixelRight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8784
            node.style.right = styleRight; // revert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8785
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8786
            return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8787
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8789
        getMargin: function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8790
            var val,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8791
                style = _getStyleObj(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8793
            if (style[att] == AUTO) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8794
                val = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8795
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8796
                val = ComputedStyle.getPixel(node, att);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8797
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8798
            return val + PX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8799
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8801
        getVisibility: function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8802
            var current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8803
            while ( (current = node.currentStyle) && current[att] == 'inherit') { // NOTE: assignment in test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8804
                node = node.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8805
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8806
            return (current) ? current[att] : VISIBLE;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8807
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8809
        getColor: function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8810
            var current = _getStyleObj(node)[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8811
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8812
            if (!current || current === TRANSPARENT) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8813
                Y.DOM.elementByAxis(node, 'parentNode', null, function(parent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8814
                    current = _getStyleObj(parent)[att];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8815
                    if (current && current !== TRANSPARENT) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8816
                        node = parent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8817
                        return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8818
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8819
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8820
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8822
            return Y.Color.toRGB(current);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8823
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8824
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8825
        getBorderColor: function(node, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8826
            var current = _getStyleObj(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8827
                val = current[att] || current.color;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8828
            return Y.Color.toRGB(Y.Color.toHex(val));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8829
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8830
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8831
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8832
    //fontSize: getPixelFont,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8833
    IEComputed = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8834
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8835
addFeature('style', 'computedStyle', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8836
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8837
        return 'getComputedStyle' in Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8838
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8839
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8840
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8841
addFeature('style', 'opacity', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8842
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8843
        return 'opacity' in documentElement.style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8844
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8845
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8847
addFeature('style', 'filter', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8848
    test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8849
        return 'filters' in documentElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8850
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8851
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8852
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8853
// use alpha filter for IE opacity
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8854
if (!testFeature('style', 'opacity') && testFeature('style', 'filter')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8855
    Y.DOM.CUSTOM_STYLES[OPACITY] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8856
        get: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8857
            var val = 100;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8858
            try { // will error if no DXImageTransform
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8859
                val = node[FILTERS]['DXImageTransform.Microsoft.Alpha'][OPACITY];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8861
            } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8862
                try { // make sure its in the document
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8863
                    val = node[FILTERS]('alpha')[OPACITY];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8864
                } catch(err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8865
                    Y.log('getStyle: IE opacity filter not found; returning 1', 'warn', 'dom-style');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8866
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8867
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8868
            return val / 100;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8869
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8871
        set: function(node, val, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8872
            var current,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8873
                styleObj = _getStyleObj(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8874
                currentFilter = styleObj[FILTER];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8876
            style = style || node.style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8877
            if (val === '') { // normalize inline style behavior
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8878
                current = (OPACITY in styleObj) ? styleObj[OPACITY] : 1; // revert to original opacity
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8879
                val = current;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8880
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8881
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8882
            if (typeof currentFilter == 'string') { // in case not appended
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8883
                style[FILTER] = currentFilter.replace(/alpha([^)]*\))/gi, '') +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8884
                        ((val < 1) ? 'alpha(' + OPACITY + '=' + val * 100 + ')' : '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8886
                if (!style[FILTER]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8887
                    style.removeAttribute(FILTER);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8888
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8890
                if (!styleObj[HAS_LAYOUT]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8891
                    style.zoom = 1; // needs layout 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8892
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8893
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8894
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8895
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8896
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8898
try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8899
    Y.config.doc.createElement('div').style.height = '-1px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8900
} catch(e) { // IE throws error on invalid style set; trap common cases
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8901
    Y.DOM.CUSTOM_STYLES.height = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8902
        set: function(node, val, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8903
            var floatVal = parseFloat(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8904
            if (floatVal >= 0 || val === 'auto' || val === '') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8905
                style.height = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8906
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8907
                Y.log('invalid style value for height: ' + val, 'warn', 'dom-style');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8908
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8909
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8910
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8911
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8912
    Y.DOM.CUSTOM_STYLES.width = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8913
        set: function(node, val, style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8914
            var floatVal = parseFloat(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8915
            if (floatVal >= 0 || val === 'auto' || val === '') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8916
                style.width = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8917
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8918
                Y.log('invalid style value for width: ' + val, 'warn', 'dom-style');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8919
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8920
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8921
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8922
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8924
if (!testFeature('style', 'computedStyle')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8925
    // TODO: top, right, bottom, left
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8926
    IEComputed[WIDTH] = IEComputed[HEIGHT] = ComputedStyle.getOffset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8927
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8928
    IEComputed.color = IEComputed.backgroundColor = ComputedStyle.getColor;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8930
    IEComputed[BORDER_WIDTH] = IEComputed[BORDER_TOP_WIDTH] = IEComputed[BORDER_RIGHT_WIDTH] =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8931
            IEComputed[BORDER_BOTTOM_WIDTH] = IEComputed[BORDER_LEFT_WIDTH] =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8932
            ComputedStyle.getBorderWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8934
    IEComputed.marginTop = IEComputed.marginRight = IEComputed.marginBottom =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8935
            IEComputed.marginLeft = ComputedStyle.getMargin;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8936
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8937
    IEComputed.visibility = ComputedStyle.getVisibility;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8938
    IEComputed.borderColor = IEComputed.borderTopColor =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8939
            IEComputed.borderRightColor = IEComputed.borderBottomColor =
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8940
            IEComputed.borderLeftColor = ComputedStyle.getBorderColor;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8942
    Y.DOM[GET_COMPUTED_STYLE] = ComputedStyle.get; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8944
    Y.namespace('DOM.IE');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8945
    Y.DOM.IE.COMPUTED = IEComputed;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8946
    Y.DOM.IE.ComputedStyle = ComputedStyle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8947
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8948
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8949
})(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8950
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8952
}, '@VERSION@', {"requires": ["dom-style"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8953
YUI.add('dom-screen', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8954
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8955
(function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8956
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8957
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8958
 * Adds position and region management functionality to DOM.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8959
 * @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8960
 * @submodule dom-screen
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8961
 * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8962
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8963
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8964
var DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8965
    COMPAT_MODE = 'compatMode',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8966
    POSITION = 'position',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8967
    FIXED = 'fixed',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8968
    RELATIVE = 'relative',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8969
    LEFT = 'left',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8970
    TOP = 'top',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8971
    _BACK_COMPAT = 'BackCompat',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8972
    MEDIUM = 'medium',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8973
    BORDER_LEFT_WIDTH = 'borderLeftWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8974
    BORDER_TOP_WIDTH = 'borderTopWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8975
    GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8976
    GET_COMPUTED_STYLE = 'getComputedStyle',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8977
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8978
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8979
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8980
    // TODO: how about thead/tbody/tfoot/tr?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8981
    // TODO: does caption matter?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8982
    RE_TABLE = /^t(?:able|d|h)$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8984
    SCROLL_NODE;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8985
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8986
if (Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8987
    if (Y.config.doc[COMPAT_MODE] !== 'BackCompat') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8988
        SCROLL_NODE = DOCUMENT_ELEMENT; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8989
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8990
        SCROLL_NODE = 'body';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8991
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8992
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8993
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8994
Y.mix(Y_DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8995
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8996
     * Returns the inner height of the viewport (exludes scrollbar). 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8997
     * @method winHeight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8998
     * @return {Number} The current height of the viewport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  8999
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9000
    winHeight: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9001
        var h = Y_DOM._getWinSize(node).height;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9002
        Y.log('winHeight returning ' + h, 'info', 'dom-screen');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9003
        return h;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9004
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9006
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9007
     * Returns the inner width of the viewport (exludes scrollbar). 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9008
     * @method winWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9009
     * @return {Number} The current width of the viewport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9010
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9011
    winWidth: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9012
        var w = Y_DOM._getWinSize(node).width;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9013
        Y.log('winWidth returning ' + w, 'info', 'dom-screen');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9014
        return w;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9015
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9016
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9017
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9018
     * Document height 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9019
     * @method docHeight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9020
     * @return {Number} The current height of the document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9021
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9022
    docHeight:  function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9023
        var h = Y_DOM._getDocSize(node).height;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9024
        Y.log('docHeight returning ' + h, 'info', 'dom-screen');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9025
        return Math.max(h, Y_DOM._getWinSize(node).height);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9026
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9028
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9029
     * Document width 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9030
     * @method docWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9031
     * @return {Number} The current width of the document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9032
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9033
    docWidth:  function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9034
        var w = Y_DOM._getDocSize(node).width;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9035
        Y.log('docWidth returning ' + w, 'info', 'dom-screen');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9036
        return Math.max(w, Y_DOM._getWinSize(node).width);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9037
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9038
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9039
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9040
     * Amount page has been scroll horizontally 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9041
     * @method docScrollX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9042
     * @return {Number} The current amount the screen is scrolled horizontally.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9043
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9044
    docScrollX: function(node, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9045
        doc = doc || (node) ? Y_DOM._getDoc(node) : Y.config.doc; // perf optimization
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9046
        var dv = doc.defaultView,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9047
            pageOffset = (dv) ? dv.pageXOffset : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9048
        return Math.max(doc[DOCUMENT_ELEMENT].scrollLeft, doc.body.scrollLeft, pageOffset);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9049
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9050
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9051
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9052
     * Amount page has been scroll vertically 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9053
     * @method docScrollY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9054
     * @return {Number} The current amount the screen is scrolled vertically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9055
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9056
    docScrollY:  function(node, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9057
        doc = doc || (node) ? Y_DOM._getDoc(node) : Y.config.doc; // perf optimization
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9058
        var dv = doc.defaultView,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9059
            pageOffset = (dv) ? dv.pageYOffset : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9060
        return Math.max(doc[DOCUMENT_ELEMENT].scrollTop, doc.body.scrollTop, pageOffset);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9061
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9062
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9063
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9064
     * Gets the current position of an element based on page coordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9065
     * Element must be part of the DOM tree to have page coordinates
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9066
     * (display:none or elements not appended return false).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9067
     * @method getXY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9068
     * @param element The target element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9069
     * @return {Array} The XY position of the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9070
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9071
     TODO: test inDocument/display?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9072
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9073
    getXY: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9074
        if (Y.config.doc[DOCUMENT_ELEMENT][GET_BOUNDING_CLIENT_RECT]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9075
            return function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9076
                var xy = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9077
                    scrollLeft,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9078
                    scrollTop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9079
                    mode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9080
                    box,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9081
                    offX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9082
                    offY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9083
                    doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9084
                    win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9085
                    inDoc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9086
                    rootNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9088
                if (node && node.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9089
                    doc = node.ownerDocument;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9090
                    mode = doc[COMPAT_MODE];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9092
                    if (mode !== _BACK_COMPAT) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9093
                        rootNode = doc[DOCUMENT_ELEMENT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9094
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9095
                        rootNode = doc.body;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9096
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9098
                    // inline inDoc check for perf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9099
                    if (rootNode.contains) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9100
                        inDoc = rootNode.contains(node); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9101
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9102
                        inDoc = Y.DOM.contains(rootNode, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9103
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9105
                    if (inDoc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9106
                        win = doc.defaultView;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9108
                        // inline scroll calc for perf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9109
                        if (win && 'pageXOffset' in win) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9110
                            scrollLeft = win.pageXOffset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9111
                            scrollTop = win.pageYOffset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9112
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9113
                            scrollLeft = (SCROLL_NODE) ? doc[SCROLL_NODE].scrollLeft : Y_DOM.docScrollX(node, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9114
                            scrollTop = (SCROLL_NODE) ? doc[SCROLL_NODE].scrollTop : Y_DOM.docScrollY(node, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9115
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9117
                        if (Y.UA.ie) { // IE < 8, quirks, or compatMode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9118
                            if (!doc.documentMode || doc.documentMode < 8 || mode === _BACK_COMPAT) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9119
                                offX = rootNode.clientLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9120
                                offY = rootNode.clientTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9121
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9122
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9123
                        box = node[GET_BOUNDING_CLIENT_RECT]();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9124
                        xy = [box.left, box.top];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9126
                        if (offX || offY) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9127
                                xy[0] -= offX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9128
                                xy[1] -= offY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9129
                            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9130
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9131
                        if ((scrollTop || scrollLeft)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9132
                            if (!Y.UA.ios || (Y.UA.ios >= 4.2)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9133
                                xy[0] += scrollLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9134
                                xy[1] += scrollTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9135
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9136
                            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9137
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9138
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9139
                        xy = Y_DOM._getOffset(node);       
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9140
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9141
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9142
                return xy;                   
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9143
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9144
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9145
            return function(node) { // manually calculate by crawling up offsetParents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9146
                //Calculate the Top and Left border sizes (assumes pixels)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9147
                var xy = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9148
                    doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9149
                    parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9150
                    bCheck,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9151
                    scrollTop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9152
                    scrollLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9154
                if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9155
                    if (Y_DOM.inDoc(node)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9156
                        xy = [node.offsetLeft, node.offsetTop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9157
                        doc = node.ownerDocument;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9158
                        parentNode = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9159
                        // TODO: refactor with !! or just falsey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9160
                        bCheck = ((Y.UA.gecko || Y.UA.webkit > 519) ? true : false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9162
                        // TODO: worth refactoring for TOP/LEFT only?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9163
                        while ((parentNode = parentNode.offsetParent)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9164
                            xy[0] += parentNode.offsetLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9165
                            xy[1] += parentNode.offsetTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9166
                            if (bCheck) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9167
                                xy = Y_DOM._calcBorders(parentNode, xy);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9168
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9169
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9171
                        // account for any scrolled ancestors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9172
                        if (Y_DOM.getStyle(node, POSITION) != FIXED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9173
                            parentNode = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9175
                            while ((parentNode = parentNode.parentNode)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9176
                                scrollTop = parentNode.scrollTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9177
                                scrollLeft = parentNode.scrollLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9179
                                //Firefox does something funky with borders when overflow is not visible.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9180
                                if (Y.UA.gecko && (Y_DOM.getStyle(parentNode, 'overflow') !== 'visible')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9181
                                        xy = Y_DOM._calcBorders(parentNode, xy);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9182
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9183
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9185
                                if (scrollTop || scrollLeft) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9186
                                    xy[0] -= scrollLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9187
                                    xy[1] -= scrollTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9188
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9189
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9190
                            xy[0] += Y_DOM.docScrollX(node, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9191
                            xy[1] += Y_DOM.docScrollY(node, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9193
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9194
                            //Fix FIXED position -- add scrollbars
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9195
                            xy[0] += Y_DOM.docScrollX(node, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9196
                            xy[1] += Y_DOM.docScrollY(node, doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9197
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9198
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9199
                        xy = Y_DOM._getOffset(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9200
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9201
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9203
                return xy;                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9204
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9205
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9206
    }(),// NOTE: Executing for loadtime branching
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9208
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9209
    Gets the width of vertical scrollbars on overflowed containers in the body
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9210
    content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9212
    @method getScrollbarWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9213
    @return {Number} Pixel width of a scrollbar in the current browser
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9214
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9215
    getScrollbarWidth: Y.cached(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9216
        var doc      = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9217
            testNode = doc.createElement('div'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9218
            body     = doc.getElementsByTagName('body')[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9219
            // 0.1 because cached doesn't support falsy refetch values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9220
            width    = 0.1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9221
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9222
        if (body) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9223
            testNode.style.cssText = "position:absolute;visibility:hidden;overflow:scroll;width:20px;";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9224
            testNode.appendChild(doc.createElement('p')).style.height = '1px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9225
            body.insertBefore(testNode, body.firstChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9226
            width = testNode.offsetWidth - testNode.clientWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9228
            body.removeChild(testNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9229
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9231
        return width;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9232
    }, null, 0.1),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9234
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9235
     * Gets the current X position of an element based on page coordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9236
     * Element must be part of the DOM tree to have page coordinates
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9237
     * (display:none or elements not appended return false).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9238
     * @method getX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9239
     * @param element The target element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9240
     * @return {Number} The X position of the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9241
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9243
    getX: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9244
        return Y_DOM.getXY(node)[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9245
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9246
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9247
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9248
     * Gets the current Y position of an element based on page coordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9249
     * Element must be part of the DOM tree to have page coordinates
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9250
     * (display:none or elements not appended return false).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9251
     * @method getY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9252
     * @param element The target element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9253
     * @return {Number} The Y position of the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9254
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9256
    getY: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9257
        return Y_DOM.getXY(node)[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9258
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9260
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9261
     * Set the position of an html element in page coordinates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9262
     * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9263
     * @method setXY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9264
     * @param element The target element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9265
     * @param {Array} xy Contains X & Y values for new position (coordinates are page-based)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9266
     * @param {Boolean} noRetry By default we try and set the position a second time if the first fails
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9267
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9268
    setXY: function(node, xy, noRetry) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9269
        var setStyle = Y_DOM.setStyle,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9270
            pos,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9271
            delta,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9272
            newXY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9273
            currentXY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9275
        if (node && xy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9276
            pos = Y_DOM.getStyle(node, POSITION);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9277
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9278
            delta = Y_DOM._getOffset(node);       
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9279
            if (pos == 'static') { // default to relative
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9280
                pos = RELATIVE;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9281
                setStyle(node, POSITION, pos);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9282
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9283
            currentXY = Y_DOM.getXY(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9285
            if (xy[0] !== null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9286
                setStyle(node, LEFT, xy[0] - currentXY[0] + delta[0] + 'px');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9287
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9288
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9289
            if (xy[1] !== null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9290
                setStyle(node, TOP, xy[1] - currentXY[1] + delta[1] + 'px');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9291
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9293
            if (!noRetry) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9294
                newXY = Y_DOM.getXY(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9295
                if (newXY[0] !== xy[0] || newXY[1] !== xy[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9296
                    Y_DOM.setXY(node, xy, true); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9297
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9298
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9299
          
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9300
            Y.log('setXY setting position to ' + xy, 'info', 'dom-screen');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9301
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9302
            Y.log('setXY failed to set ' + node + ' to ' + xy, 'info', 'dom-screen');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9303
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9304
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9306
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9307
     * Set the X position of an html element in page coordinates, regardless of how the element is positioned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9308
     * The element(s) must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9309
     * @method setX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9310
     * @param element The target element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9311
     * @param {Number} x The X values for new position (coordinates are page-based)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9312
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9313
    setX: function(node, x) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9314
        return Y_DOM.setXY(node, [x, null]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9315
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9317
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9318
     * Set the Y position of an html element in page coordinates, regardless of how the element is positioned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9319
     * The element(s) must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9320
     * @method setY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9321
     * @param element The target element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9322
     * @param {Number} y The Y values for new position (coordinates are page-based)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9323
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9324
    setY: function(node, y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9325
        return Y_DOM.setXY(node, [null, y]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9326
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9327
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9328
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9329
     * @method swapXY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9330
     * @description Swap the xy position with another node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9331
     * @param {Node} node The node to swap with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9332
     * @param {Node} otherNode The other node to swap with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9333
     * @return {Node}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9334
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9335
    swapXY: function(node, otherNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9336
        var xy = Y_DOM.getXY(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9337
        Y_DOM.setXY(node, Y_DOM.getXY(otherNode));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9338
        Y_DOM.setXY(otherNode, xy);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9339
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9340
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9341
    _calcBorders: function(node, xy2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9342
        var t = parseInt(Y_DOM[GET_COMPUTED_STYLE](node, BORDER_TOP_WIDTH), 10) || 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9343
            l = parseInt(Y_DOM[GET_COMPUTED_STYLE](node, BORDER_LEFT_WIDTH), 10) || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9344
        if (Y.UA.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9345
            if (RE_TABLE.test(node.tagName)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9346
                t = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9347
                l = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9348
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9349
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9350
        xy2[0] += l;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9351
        xy2[1] += t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9352
        return xy2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9353
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9355
    _getWinSize: function(node, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9356
        doc  = doc || (node) ? Y_DOM._getDoc(node) : Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9357
        var win = doc.defaultView || doc.parentWindow,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9358
            mode = doc[COMPAT_MODE],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9359
            h = win.innerHeight,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9360
            w = win.innerWidth,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9361
            root = doc[DOCUMENT_ELEMENT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9362
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9363
        if ( mode && !Y.UA.opera ) { // IE, Gecko
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9364
            if (mode != 'CSS1Compat') { // Quirks
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9365
                root = doc.body; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9366
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9367
            h = root.clientHeight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9368
            w = root.clientWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9369
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9370
        return { height: h, width: w };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9371
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9373
    _getDocSize: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9374
        var doc = (node) ? Y_DOM._getDoc(node) : Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9375
            root = doc[DOCUMENT_ELEMENT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9377
        if (doc[COMPAT_MODE] != 'CSS1Compat') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9378
            root = doc.body;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9379
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9381
        return { height: root.scrollHeight, width: root.scrollWidth };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9382
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9383
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9384
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9385
})(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9386
(function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9387
var TOP = 'top',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9388
    RIGHT = 'right',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9389
    BOTTOM = 'bottom',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9390
    LEFT = 'left',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9392
    getOffsets = function(r1, r2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9393
        var t = Math.max(r1[TOP], r2[TOP]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9394
            r = Math.min(r1[RIGHT], r2[RIGHT]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9395
            b = Math.min(r1[BOTTOM], r2[BOTTOM]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9396
            l = Math.max(r1[LEFT], r2[LEFT]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9397
            ret = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9398
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9399
        ret[TOP] = t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9400
        ret[RIGHT] = r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9401
        ret[BOTTOM] = b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9402
        ret[LEFT] = l;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9403
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9404
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9406
    DOM = Y.DOM;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9407
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9408
Y.mix(DOM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9409
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9410
     * Returns an Object literal containing the following about this element: (top, right, bottom, left)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9411
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9412
     * @method region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9413
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9414
     * @return {Object} Object literal containing the following about this element: (top, right, bottom, left)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9415
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9416
    region: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9417
        var xy = DOM.getXY(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9418
            ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9419
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9420
        if (node && xy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9421
            ret = DOM._getRegion(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9422
                xy[1], // top
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9423
                xy[0] + node.offsetWidth, // right
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9424
                xy[1] + node.offsetHeight, // bottom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9425
                xy[0] // left
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9426
            );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9427
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9429
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9430
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9432
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9433
     * Find the intersect information for the passed nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9434
     * @method intersect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9435
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9436
     * @param {HTMLElement} element The first element 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9437
     * @param {HTMLElement | Object} element2 The element or region to check the interect with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9438
     * @param {Object} altRegion An object literal containing the region for the first element if we already have the data (for performance e.g. DragDrop)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9439
     * @return {Object} Object literal containing the following intersection data: (top, right, bottom, left, area, yoff, xoff, inRegion)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9440
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9441
    intersect: function(node, node2, altRegion) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9442
        var r = altRegion || DOM.region(node), region = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9443
            n = node2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9444
            off;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9446
        if (n.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9447
            region = DOM.region(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9448
        } else if (Y.Lang.isObject(node2)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9449
            region = node2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9450
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9451
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9452
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9453
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9454
        off = getOffsets(region, r);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9455
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9456
            top: off[TOP],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9457
            right: off[RIGHT],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9458
            bottom: off[BOTTOM],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9459
            left: off[LEFT],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9460
            area: ((off[BOTTOM] - off[TOP]) * (off[RIGHT] - off[LEFT])),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9461
            yoff: ((off[BOTTOM] - off[TOP])),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9462
            xoff: (off[RIGHT] - off[LEFT]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9463
            inRegion: DOM.inRegion(node, node2, false, altRegion)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9464
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9465
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9466
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9467
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9468
     * Check if any part of this node is in the passed region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9469
     * @method inRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9470
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9471
     * @param {Object} node The node to get the region from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9472
     * @param {Object} node2 The second node to get the region from or an Object literal of the region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9473
     * @param {Boolean} all Should all of the node be inside the region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9474
     * @param {Object} altRegion An object literal containing the region for this node if we already have the data (for performance e.g. DragDrop)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9475
     * @return {Boolean} True if in region, false if not.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9476
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9477
    inRegion: function(node, node2, all, altRegion) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9478
        var region = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9479
            r = altRegion || DOM.region(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9480
            n = node2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9481
            off;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9483
        if (n.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9484
            region = DOM.region(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9485
        } else if (Y.Lang.isObject(node2)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9486
            region = node2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9487
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9488
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9489
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9490
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9491
        if (all) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9492
            return (
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9493
                r[LEFT]   >= region[LEFT]   &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9494
                r[RIGHT]  <= region[RIGHT]  && 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9495
                r[TOP]    >= region[TOP]    && 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9496
                r[BOTTOM] <= region[BOTTOM]  );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9497
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9498
            off = getOffsets(region, r);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9499
            if (off[BOTTOM] >= off[TOP] && off[RIGHT] >= off[LEFT]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9500
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9501
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9502
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9503
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9504
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9505
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9506
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9508
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9509
     * Check if any part of this element is in the viewport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9510
     * @method inViewportRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9511
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9512
     * @param {HTMLElement} element The DOM element. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9513
     * @param {Boolean} all Should all of the node be inside the region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9514
     * @param {Object} altRegion An object literal containing the region for this node if we already have the data (for performance e.g. DragDrop)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9515
     * @return {Boolean} True if in region, false if not.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9516
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9517
    inViewportRegion: function(node, all, altRegion) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9518
        return DOM.inRegion(node, DOM.viewportRegion(node), all, altRegion);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9519
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9520
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9522
    _getRegion: function(t, r, b, l) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9523
        var region = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9525
        region[TOP] = region[1] = t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9526
        region[LEFT] = region[0] = l;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9527
        region[BOTTOM] = b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9528
        region[RIGHT] = r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9529
        region.width = region[RIGHT] - region[LEFT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9530
        region.height = region[BOTTOM] - region[TOP];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9532
        return region;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9533
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9535
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9536
     * Returns an Object literal containing the following about the visible region of viewport: (top, right, bottom, left)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9537
     * @method viewportRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9538
     * @for DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9539
     * @return {Object} Object literal containing the following about the visible region of the viewport: (top, right, bottom, left)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9540
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9541
    viewportRegion: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9542
        node = node || Y.config.doc.documentElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9543
        var ret = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9544
            scrollX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9545
            scrollY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9547
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9548
            scrollX = DOM.docScrollX(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9549
            scrollY = DOM.docScrollY(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9551
            ret = DOM._getRegion(scrollY, // top
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9552
                DOM.winWidth(node) + scrollX, // right
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9553
                scrollY + DOM.winHeight(node), // bottom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9554
                scrollX); // left
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9555
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9556
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9557
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9558
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9559
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9560
})(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9562
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9563
}, '@VERSION@', {"requires": ["dom-base", "dom-style"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9564
YUI.add('selector-native', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9566
(function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9567
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9568
 * The selector-native module provides support for native querySelector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9569
 * @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9570
 * @submodule selector-native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9571
 * @for Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9572
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9574
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9575
 * Provides support for using CSS selectors to query the DOM 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9576
 * @class Selector 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9577
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9578
 * @for Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9579
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9581
Y.namespace('Selector'); // allow native module to standalone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9582
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9583
var COMPARE_DOCUMENT_POSITION = 'compareDocumentPosition',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9584
    OWNER_DOCUMENT = 'ownerDocument';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9586
var Selector = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9587
    _types: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9588
        esc: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9589
            token: '\uE000',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9590
            re: /\\[:\[\]\(\)#\.\'\>+~"]/gi
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9591
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9593
        attr: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9594
            token: '\uE001',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9595
            re: /(\[[^\]]*\])/g
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9596
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9598
        pseudo: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9599
            token: '\uE002',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9600
            re: /(\([^\)]*\))/g
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9601
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9602
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9604
    useNative: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9605
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9606
    _escapeId: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9607
        if (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9608
            id = id.replace(/([:\[\]\(\)#\.'<>+~"])/g,'\\$1');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9609
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9610
        return id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9611
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9613
    _compare: ('sourceIndex' in Y.config.doc.documentElement) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9614
        function(nodeA, nodeB) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9615
            var a = nodeA.sourceIndex,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9616
                b = nodeB.sourceIndex;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9617
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9618
            if (a === b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9619
                return 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9620
            } else if (a > b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9621
                return 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9622
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9624
            return -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9625
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9626
        } : (Y.config.doc.documentElement[COMPARE_DOCUMENT_POSITION] ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9627
        function(nodeA, nodeB) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9628
            if (nodeA[COMPARE_DOCUMENT_POSITION](nodeB) & 4) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9629
                return -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9630
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9631
                return 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9632
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9633
        } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9634
        function(nodeA, nodeB) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9635
            var rangeA, rangeB, compare;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9636
            if (nodeA && nodeB) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9637
                rangeA = nodeA[OWNER_DOCUMENT].createRange();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9638
                rangeA.setStart(nodeA, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9639
                rangeB = nodeB[OWNER_DOCUMENT].createRange();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9640
                rangeB.setStart(nodeB, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9641
                compare = rangeA.compareBoundaryPoints(1, rangeB); // 1 === Range.START_TO_END
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9642
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9643
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9644
            return compare;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9645
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9646
    }),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9648
    _sort: function(nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9649
        if (nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9650
            nodes = Y.Array(nodes, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9651
            if (nodes.sort) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9652
                nodes.sort(Selector._compare);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9653
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9654
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9656
        return nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9657
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9659
    _deDupe: function(nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9660
        var ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9661
            i, node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9663
        for (i = 0; (node = nodes[i++]);) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9664
            if (!node._found) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9665
                ret[ret.length] = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9666
                node._found = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9667
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9668
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9670
        for (i = 0; (node = ret[i++]);) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9671
            node._found = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9672
            node.removeAttribute('_found');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9673
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9675
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9676
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9678
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9679
     * Retrieves a set of nodes based on a given CSS selector. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9680
     * @method query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9681
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9682
     * @param {string} selector The CSS Selector to test the node against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9683
     * @param {HTMLElement} root optional An HTMLElement to start the query from. Defaults to Y.config.doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9684
     * @param {Boolean} firstOnly optional Whether or not to return only the first match.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9685
     * @return {Array} An array of nodes that match the given selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9686
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9687
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9688
    query: function(selector, root, firstOnly, skipNative) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9689
        root = root || Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9690
        var ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9691
            useNative = (Y.Selector.useNative && Y.config.doc.querySelector && !skipNative),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9692
            queries = [[selector, root]],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9693
            query,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9694
            result,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9695
            i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9696
            fn = (useNative) ? Y.Selector._nativeQuery : Y.Selector._bruteQuery;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9697
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9698
        if (selector && fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9699
            // split group into seperate queries
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9700
            if (!skipNative && // already done if skipping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9701
                    (!useNative || root.tagName)) { // split native when element scoping is needed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9702
                queries = Selector._splitQueries(selector, root);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9703
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9705
            for (i = 0; (query = queries[i++]);) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9706
                result = fn(query[0], query[1], firstOnly);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9707
                if (!firstOnly) { // coerce DOM Collection to Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9708
                    result = Y.Array(result, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9709
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9710
                if (result) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9711
                    ret = ret.concat(result);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9712
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9713
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9715
            if (queries.length > 1) { // remove dupes and sort by doc order 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9716
                ret = Selector._sort(Selector._deDupe(ret));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9717
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9718
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9720
        Y.log('query: ' + selector + ' returning: ' + ret.length, 'info', 'Selector');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9721
        return (firstOnly) ? (ret[0] || null) : ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9722
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9723
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9724
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9725
    _replaceSelector: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9726
        var esc = Y.Selector._parse('esc', selector), // pull escaped colon, brackets, etc. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9727
            attrs,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9728
            pseudos;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9730
        // first replace escaped chars, which could be present in attrs or pseudos
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9731
        selector = Y.Selector._replace('esc', selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9732
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9733
        // then replace pseudos before attrs to avoid replacing :not([foo])
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9734
        pseudos = Y.Selector._parse('pseudo', selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9735
        selector = Selector._replace('pseudo', selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9737
        attrs = Y.Selector._parse('attr', selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9738
        selector = Y.Selector._replace('attr', selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9740
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9741
            esc: esc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9742
            attrs: attrs,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9743
            pseudos: pseudos,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9744
            selector: selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9745
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9746
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9748
    _restoreSelector: function(replaced) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9749
        var selector = replaced.selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9750
        selector = Y.Selector._restore('attr', selector, replaced.attrs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9751
        selector = Y.Selector._restore('pseudo', selector, replaced.pseudos);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9752
        selector = Y.Selector._restore('esc', selector, replaced.esc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9753
        return selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9754
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9756
    _replaceCommas: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9757
        var replaced = Y.Selector._replaceSelector(selector),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9758
            selector = replaced.selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9760
        if (selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9761
            selector = selector.replace(/,/g, '\uE007');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9762
            replaced.selector = selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9763
            selector = Y.Selector._restoreSelector(replaced);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9764
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9765
        return selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9766
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9767
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9768
    // allows element scoped queries to begin with combinator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9769
    // e.g. query('> p', document.body) === query('body > p')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9770
    _splitQueries: function(selector, node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9771
        if (selector.indexOf(',') > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9772
            selector = Y.Selector._replaceCommas(selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9773
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9775
        var groups = selector.split('\uE007'), // split on replaced comma token
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9776
            queries = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9777
            prefix = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9778
            id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9779
            i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9780
            len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9782
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9783
            // enforce for element scoping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9784
            if (node.nodeType === 1) { // Elements only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9785
                id = Y.Selector._escapeId(Y.DOM.getId(node));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9786
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9787
                if (!id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9788
                    id = Y.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9789
                    Y.DOM.setId(node, id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9790
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9791
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9792
                prefix = '[id="' + id + '"] ';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9793
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9794
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9795
            for (i = 0, len = groups.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9796
                selector =  prefix + groups[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9797
                queries.push([selector, node]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9798
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9799
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9801
        return queries;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9802
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9803
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9804
    _nativeQuery: function(selector, root, one) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9805
        if (Y.UA.webkit && selector.indexOf(':checked') > -1 &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9806
                (Y.Selector.pseudos && Y.Selector.pseudos.checked)) { // webkit (chrome, safari) fails to pick up "selected"  with "checked"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9807
            return Y.Selector.query(selector, root, one, true); // redo with skipNative true to try brute query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9808
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9809
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9810
            //Y.log('trying native query with: ' + selector, 'info', 'selector-native');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9811
            return root['querySelector' + (one ? '' : 'All')](selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9812
        } catch(e) { // fallback to brute if available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9813
            //Y.log('native query error; reverting to brute query with: ' + selector, 'info', 'selector-native');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9814
            return Y.Selector.query(selector, root, one, true); // redo with skipNative true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9815
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9816
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9817
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9818
    filter: function(nodes, selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9819
        var ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9820
            i, node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9822
        if (nodes && selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9823
            for (i = 0; (node = nodes[i++]);) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9824
                if (Y.Selector.test(node, selector)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9825
                    ret[ret.length] = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9826
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9827
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9828
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9829
            Y.log('invalid filter input (nodes: ' + nodes +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9830
                    ', selector: ' + selector + ')', 'warn', 'Selector');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9831
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9833
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9834
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9835
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9836
    test: function(node, selector, root) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9837
        var ret = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9838
            useFrag = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9839
            groups,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9840
            parent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9841
            item,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9842
            items,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9843
            frag,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9844
            id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9845
            i, j, group;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9847
        if (node && node.tagName) { // only test HTMLElements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9849
            if (typeof selector == 'function') { // test with function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9850
                ret = selector.call(node, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9851
            } else { // test with query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9852
                // we need a root if off-doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9853
                groups = selector.split(',');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9854
                if (!root && !Y.DOM.inDoc(node)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9855
                    parent = node.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9856
                    if (parent) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9857
                        root = parent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9858
                    } else { // only use frag when no parent to query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9859
                        frag = node[OWNER_DOCUMENT].createDocumentFragment();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9860
                        frag.appendChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9861
                        root = frag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9862
                        useFrag = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9863
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9864
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9865
                root = root || node[OWNER_DOCUMENT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9867
                id = Y.Selector._escapeId(Y.DOM.getId(node));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9868
                if (!id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9869
                    id = Y.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9870
                    Y.DOM.setId(node, id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9871
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9873
                for (i = 0; (group = groups[i++]);) { // TODO: off-dom test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9874
                    group += '[id="' + id + '"]';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9875
                    items = Y.Selector.query(group, root);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9877
                    for (j = 0; item = items[j++];) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9878
                        if (item === node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9879
                            ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9880
                            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9881
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9882
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9883
                    if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9884
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9885
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9886
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9887
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9888
                if (useFrag) { // cleanup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9889
                    frag.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9890
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9891
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9892
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9894
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9895
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9897
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9898
     * A convenience function to emulate Y.Node's aNode.ancestor(selector).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9899
     * @param {HTMLElement} element An HTMLElement to start the query from.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9900
     * @param {String} selector The CSS selector to test the node against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9901
     * @return {HTMLElement} The ancestor node matching the selector, or null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9902
     * @param {Boolean} testSelf optional Whether or not to include the element in the scan 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9903
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9904
     * @method ancestor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9905
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9906
    ancestor: function (element, selector, testSelf) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9907
        return Y.DOM.ancestor(element, function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9908
            return Y.Selector.test(n, selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9909
        }, testSelf);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9910
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9911
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9912
    _parse: function(name, selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9913
        return selector.match(Y.Selector._types[name].re);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9914
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9916
    _replace: function(name, selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9917
        var o = Y.Selector._types[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9918
        return selector.replace(o.re, o.token);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9919
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9920
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9921
    _restore: function(name, selector, items) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9922
        if (items) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9923
            var token = Y.Selector._types[name].token,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9924
                i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9925
            for (i = 0, len = items.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9926
                selector = selector.replace(token, items[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9927
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9928
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9929
        return selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9930
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9931
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9933
Y.mix(Y.Selector, Selector, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9934
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9935
})(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9936
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9938
}, '@VERSION@', {"requires": ["dom-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9939
YUI.add('selector', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9943
}, '@VERSION@', {"requires": ["selector-native"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9944
YUI.add('event-custom-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9946
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9947
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9948
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9949
 * @module event-custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9950
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9952
Y.Env.evt = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9953
    handles: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9954
    plugins: {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9955
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9956
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9958
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9959
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9960
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9961
 * @module event-custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9962
 * @submodule event-custom-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9963
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9964
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9965
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9966
 * Allows for the insertion of methods that are executed before or after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9967
 * a specified method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9968
 * @class Do
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9969
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9970
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9971
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9972
var DO_BEFORE = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9973
    DO_AFTER = 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9975
DO = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9976
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9977
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9978
     * Cache of objects touched by the utility
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9979
     * @property objs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9980
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9981
     * @deprecated Since 3.6.0. The `_yuiaop` property on the AOP'd object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9982
     * replaces the role of this property, but is considered to be private, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9983
     * is only mentioned to provide a migration path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9984
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9985
     * If you have a use case which warrants migration to the _yuiaop property,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9986
     * please file a ticket to let us know what it's used for and we can see if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9987
     * we need to expose hooks for that functionality more formally.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9988
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9989
    objs: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9991
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9992
     * <p>Execute the supplied method before the specified function.  Wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9993
     * function may optionally return an instance of the following classes to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9994
     * further alter runtime behavior:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9995
     * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9996
     *     <dt></code>Y.Do.Halt(message, returnValue)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9997
     *         <dd>Immediatly stop execution and return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9998
     *         <code>returnValue</code>.  No other wrapping functions will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  9999
     *         executed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10000
     *     <dt></code>Y.Do.AlterArgs(message, newArgArray)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10001
     *         <dd>Replace the arguments that the original function will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10002
     *         called with.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10003
     *     <dt></code>Y.Do.Prevent(message)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10004
     *         <dd>Don't execute the wrapped function.  Other before phase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10005
     *         wrappers will be executed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10006
     * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10007
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10008
     * @method before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10009
     * @param fn {Function} the function to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10010
     * @param obj the object hosting the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10011
     * @param sFn {string} the name of the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10012
     * @param c The execution context for fn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10013
     * @param arg* {mixed} 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10014
     * when the event fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10015
     * @return {string} handle for the subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10016
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10017
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10018
    before: function(fn, obj, sFn, c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10019
        // Y.log('Do before: ' + sFn, 'info', 'event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10020
        var f = fn, a;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10021
        if (c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10022
            a = [fn, c].concat(Y.Array(arguments, 4, true));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10023
            f = Y.rbind.apply(Y, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10024
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10025
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10026
        return this._inject(DO_BEFORE, f, obj, sFn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10027
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10029
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10030
     * <p>Execute the supplied method after the specified function.  Wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10031
     * function may optionally return an instance of the following classes to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10032
     * further alter runtime behavior:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10033
     * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10034
     *     <dt></code>Y.Do.Halt(message, returnValue)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10035
     *         <dd>Immediatly stop execution and return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10036
     *         <code>returnValue</code>.  No other wrapping functions will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10037
     *         executed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10038
     *     <dt></code>Y.Do.AlterReturn(message, returnValue)</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10039
     *         <dd>Return <code>returnValue</code> instead of the wrapped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10040
     *         method's original return value.  This can be further altered by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10041
     *         other after phase wrappers.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10042
     * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10043
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10044
     * <p>The static properties <code>Y.Do.originalRetVal</code> and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10045
     * <code>Y.Do.currentRetVal</code> will be populated for reference.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10046
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10047
     * @method after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10048
     * @param fn {Function} the function to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10049
     * @param obj the object hosting the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10050
     * @param sFn {string} the name of the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10051
     * @param c The execution context for fn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10052
     * @param arg* {mixed} 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10053
     * @return {string} handle for the subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10054
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10055
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10056
    after: function(fn, obj, sFn, c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10057
        var f = fn, a;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10058
        if (c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10059
            a = [fn, c].concat(Y.Array(arguments, 4, true));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10060
            f = Y.rbind.apply(Y, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10061
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10062
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10063
        return this._inject(DO_AFTER, f, obj, sFn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10064
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10065
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10066
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10067
     * Execute the supplied method before or after the specified function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10068
     * Used by <code>before</code> and <code>after</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10069
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10070
     * @method _inject
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10071
     * @param when {string} before or after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10072
     * @param fn {Function} the function to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10073
     * @param obj the object hosting the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10074
     * @param sFn {string} the name of the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10075
     * @param c The execution context for fn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10076
     * @return {string} handle for the subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10077
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10078
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10079
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10080
    _inject: function(when, fn, obj, sFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10081
        // object id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10082
        var id = Y.stamp(obj), o, sid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10083
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10084
        if (!obj._yuiaop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10085
            // create a map entry for the obj if it doesn't exist, to hold overridden methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10086
            obj._yuiaop = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10087
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10088
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10089
        o = obj._yuiaop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10090
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10091
        if (!o[sFn]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10092
            // create a map entry for the method if it doesn't exist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10093
            o[sFn] = new Y.Do.Method(obj, sFn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10094
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10095
            // re-route the method to our wrapper
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10096
            obj[sFn] = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10097
                return o[sFn].exec.apply(o[sFn], arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10098
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10099
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10100
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10101
        // subscriber id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10102
        sid = id + Y.stamp(fn) + sFn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10104
        // register the callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10105
        o[sFn].register(sid, fn, when);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10107
        return new Y.EventHandle(o[sFn], sid);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10108
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10110
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10111
     * Detach a before or after subscription.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10112
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10113
     * @method detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10114
     * @param handle {string} the subscription handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10115
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10116
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10117
    detach: function(handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10118
        if (handle.detach) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10119
            handle.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10120
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10121
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10122
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10124
Y.Do = DO;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10126
//////////////////////////////////////////////////////////////////////////
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10128
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10129
 * Contains the return value from the wrapped method, accessible
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10130
 * by 'after' event listeners.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10131
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10132
 * @property originalRetVal
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10133
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10134
 * @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10135
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10137
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10138
 * Contains the current state of the return value, consumable by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10139
 * 'after' event listeners, and updated if an after subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10140
 * changes the return value generated by the wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10141
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10142
 * @property currentRetVal
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10143
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10144
 * @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10145
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10147
//////////////////////////////////////////////////////////////////////////
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10148
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10149
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10150
 * Wrapper for a displaced method with aop enabled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10151
 * @class Do.Method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10152
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10153
 * @param obj The object to operate on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10154
 * @param sFn The name of the method to displace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10155
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10156
DO.Method = function(obj, sFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10157
    this.obj = obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10158
    this.methodName = sFn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10159
    this.method = obj[sFn];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10160
    this.before = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10161
    this.after = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10162
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10164
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10165
 * Register a aop subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10166
 * @method register
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10167
 * @param sid {string} the subscriber id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10168
 * @param fn {Function} the function to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10169
 * @param when {string} when to execute the function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10170
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10171
DO.Method.prototype.register = function (sid, fn, when) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10172
    if (when) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10173
        this.after[sid] = fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10174
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10175
        this.before[sid] = fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10176
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10177
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10179
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10180
 * Unregister a aop subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10181
 * @method delete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10182
 * @param sid {string} the subscriber id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10183
 * @param fn {Function} the function to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10184
 * @param when {string} when to execute the function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10185
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10186
DO.Method.prototype._delete = function (sid) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10187
    // Y.log('Y.Do._delete: ' + sid, 'info', 'Event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10188
    delete this.before[sid];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10189
    delete this.after[sid];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10190
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10192
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10193
 * <p>Execute the wrapped method.  All arguments are passed into the wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10194
 * functions.  If any of the before wrappers return an instance of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10195
 * <code>Y.Do.Halt</code> or <code>Y.Do.Prevent</code>, neither the wrapped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10196
 * function nor any after phase subscribers will be executed.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10197
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10198
 * <p>The return value will be the return value of the wrapped function or one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10199
 * provided by a wrapper function via an instance of <code>Y.Do.Halt</code> or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10200
 * <code>Y.Do.AlterReturn</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10201
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10202
 * @method exec
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10203
 * @param arg* {any} Arguments are passed to the wrapping and wrapped functions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10204
 * @return {any} Return value of wrapped function unless overwritten (see above)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10205
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10206
DO.Method.prototype.exec = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10208
    var args = Y.Array(arguments, 0, true),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10209
        i, ret, newRet,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10210
        bf = this.before,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10211
        af = this.after,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10212
        prevented = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10214
    // execute before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10215
    for (i in bf) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10216
        if (bf.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10217
            ret = bf[i].apply(this.obj, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10218
            if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10219
                switch (ret.constructor) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10220
                    case DO.Halt:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10221
                        return ret.retVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10222
                    case DO.AlterArgs:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10223
                        args = ret.newArgs;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10224
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10225
                    case DO.Prevent:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10226
                        prevented = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10227
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10228
                    default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10229
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10230
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10231
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10232
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10234
    // execute method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10235
    if (!prevented) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10236
        ret = this.method.apply(this.obj, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10237
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10239
    DO.originalRetVal = ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10240
    DO.currentRetVal = ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10242
    // execute after methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10243
    for (i in af) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10244
        if (af.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10245
            newRet = af[i].apply(this.obj, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10246
            // Stop processing if a Halt object is returned
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10247
            if (newRet && newRet.constructor === DO.Halt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10248
                return newRet.retVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10249
            // Check for a new return value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10250
            } else if (newRet && newRet.constructor === DO.AlterReturn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10251
                ret = newRet.newRetVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10252
                // Update the static retval state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10253
                DO.currentRetVal = ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10254
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10255
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10256
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10258
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10259
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10261
//////////////////////////////////////////////////////////////////////////
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10262
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10263
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10264
 * Return an AlterArgs object when you want to change the arguments that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10265
 * were passed into the function.  Useful for Do.before subscribers.  An
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10266
 * example would be a service that scrubs out illegal characters prior to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10267
 * executing the core business logic.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10268
 * @class Do.AlterArgs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10269
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10270
 * @param msg {String} (optional) Explanation of the altered return value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10271
 * @param newArgs {Array} Call parameters to be used for the original method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10272
 *                        instead of the arguments originally passed in.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10273
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10274
DO.AlterArgs = function(msg, newArgs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10275
    this.msg = msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10276
    this.newArgs = newArgs;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10277
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10279
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10280
 * Return an AlterReturn object when you want to change the result returned
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10281
 * from the core method to the caller.  Useful for Do.after subscribers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10282
 * @class Do.AlterReturn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10283
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10284
 * @param msg {String} (optional) Explanation of the altered return value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10285
 * @param newRetVal {any} Return value passed to code that invoked the wrapped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10286
 *                      function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10287
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10288
DO.AlterReturn = function(msg, newRetVal) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10289
    this.msg = msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10290
    this.newRetVal = newRetVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10291
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10293
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10294
 * Return a Halt object when you want to terminate the execution
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10295
 * of all subsequent subscribers as well as the wrapped method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10296
 * if it has not exectued yet.  Useful for Do.before subscribers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10297
 * @class Do.Halt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10298
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10299
 * @param msg {String} (optional) Explanation of why the termination was done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10300
 * @param retVal {any} Return value passed to code that invoked the wrapped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10301
 *                      function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10302
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10303
DO.Halt = function(msg, retVal) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10304
    this.msg = msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10305
    this.retVal = retVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10306
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10308
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10309
 * Return a Prevent object when you want to prevent the wrapped function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10310
 * from executing, but want the remaining listeners to execute.  Useful
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10311
 * for Do.before subscribers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10312
 * @class Do.Prevent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10313
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10314
 * @param msg {String} (optional) Explanation of why the termination was done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10315
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10316
DO.Prevent = function(msg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10317
    this.msg = msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10318
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10319
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10320
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10321
 * Return an Error object when you want to terminate the execution
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10322
 * of all subsequent method calls.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10323
 * @class Do.Error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10324
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10325
 * @param msg {String} (optional) Explanation of the altered return value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10326
 * @param retVal {any} Return value passed to code that invoked the wrapped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10327
 *                      function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10328
 * @deprecated use Y.Do.Halt or Y.Do.Prevent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10329
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10330
DO.Error = DO.Halt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10331
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10333
//////////////////////////////////////////////////////////////////////////
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10335
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10336
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10337
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10338
 * @module event-custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10339
 * @submodule event-custom-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10340
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10342
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10343
// var onsubscribeType = "_event:onsub",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10344
var YArray = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10346
    AFTER = 'after',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10347
    CONFIGS = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10348
        'broadcast',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10349
        'monitored',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10350
        'bubbles',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10351
        'context',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10352
        'contextFn',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10353
        'currentTarget',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10354
        'defaultFn',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10355
        'defaultTargetOnly',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10356
        'details',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10357
        'emitFacade',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10358
        'fireOnce',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10359
        'async',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10360
        'host',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10361
        'preventable',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10362
        'preventedFn',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10363
        'queuable',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10364
        'silent',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10365
        'stoppedFn',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10366
        'target',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10367
        'type'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10368
    ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10369
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10370
    CONFIGS_HASH = YArray.hash(CONFIGS),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10372
    nativeSlice = Array.prototype.slice,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10374
    YUI3_SIGNATURE = 9,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10375
    YUI_LOG = 'yui:log',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10377
    mixConfigs = function(r, s, ov) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10378
        var p;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10380
        for (p in s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10381
            if (CONFIGS_HASH[p] && (ov || !(p in r))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10382
                r[p] = s[p];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10383
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10384
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10386
        return r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10387
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10389
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10390
 * The CustomEvent class lets you define events for your application
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10391
 * that can be subscribed to by one or more independent component.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10392
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10393
 * @param {String} type The type of event, which is passed to the callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10394
 * when the event fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10395
 * @param {object} defaults configuration object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10396
 * @class CustomEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10397
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10398
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10400
 /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10401
 * The type of event, returned to subscribers when the event fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10402
 * @property type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10403
 * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10404
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10406
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10407
 * By default all custom events are logged in the debug build, set silent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10408
 * to true to disable debug outpu for this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10409
 * @property silent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10410
 * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10411
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10412
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10413
Y.CustomEvent = function(type, defaults) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10415
    this._kds = Y.CustomEvent.keepDeprecatedSubs;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10417
    this.id = Y.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10418
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10419
    this.type = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10420
    this.silent = this.logSystem = (type === YUI_LOG);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10421
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10422
    if (this._kds) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10423
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10424
         * The subscribers to this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10425
         * @property subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10426
         * @type Subscriber {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10427
         * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10428
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10430
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10431
         * 'After' subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10432
         * @property afters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10433
         * @type Subscriber {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10434
         * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10435
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10436
        this.subscribers = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10437
        this.afters = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10438
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10440
    if (defaults) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10441
        mixConfigs(this, defaults, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10442
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10443
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10445
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10446
 * Static flag to enable population of the <a href="#property_subscribers">`subscribers`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10447
 * and  <a href="#property_subscribers">`afters`</a> properties held on a `CustomEvent` instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10448
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10449
 * These properties were changed to private properties (`_subscribers` and `_afters`), and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10450
 * converted from objects to arrays for performance reasons.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10451
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10452
 * Setting this property to true will populate the deprecated `subscribers` and `afters`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10453
 * properties for people who may be using them (which is expected to be rare). There will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10454
 * be a performance hit, compared to the new array based implementation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10455
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10456
 * If you are using these deprecated properties for a use case which the public API
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10457
 * does not support, please file an enhancement request, and we can provide an alternate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10458
 * public implementation which doesn't have the performance cost required to maintiain the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10459
 * properties as objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10460
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10461
 * @property keepDeprecatedSubs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10462
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10463
 * @for CustomEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10464
 * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10465
 * @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10466
 * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10467
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10468
Y.CustomEvent.keepDeprecatedSubs = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10470
Y.CustomEvent.mixConfigs = mixConfigs;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10471
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10472
Y.CustomEvent.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10474
    constructor: Y.CustomEvent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10475
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10476
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10477
     * Monitor when an event is attached or detached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10478
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10479
     * @property monitored
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10480
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10481
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10483
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10484
     * If 0, this event does not broadcast.  If 1, the YUI instance is notified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10485
     * every time this event fires.  If 2, the YUI instance and the YUI global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10486
     * (if event is enabled on the global) are notified every time this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10487
     * fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10488
     * @property broadcast
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10489
     * @type int
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10490
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10492
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10493
     * Specifies whether this event should be queued when the host is actively
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10494
     * processing an event.  This will effect exectution order of the callbacks
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10495
     * for the various events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10496
     * @property queuable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10497
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10498
     * @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10499
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10501
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10502
     * This event has fired if true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10503
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10504
     * @property fired
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10505
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10506
     * @default false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10507
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10509
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10510
     * An array containing the arguments the custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10511
     * was last fired with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10512
     * @property firedWith
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10513
     * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10514
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10515
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10516
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10517
     * This event should only fire one time if true, and if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10518
     * it has fired, any new subscribers should be notified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10519
     * immediately.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10520
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10521
     * @property fireOnce
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10522
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10523
     * @default false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10524
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10526
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10527
     * fireOnce listeners will fire syncronously unless async
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10528
     * is set to true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10529
     * @property async
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10530
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10531
     * @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10532
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10533
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10534
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10535
     * Flag for stopPropagation that is modified during fire()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10536
     * 1 means to stop propagation to bubble targets.  2 means
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10537
     * to also stop additional subscribers on this target.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10538
     * @property stopped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10539
     * @type int
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10540
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10542
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10543
     * Flag for preventDefault that is modified during fire().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10544
     * if it is not 0, the default behavior for this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10545
     * @property prevented
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10546
     * @type int
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10547
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10549
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10550
     * Specifies the host for this custom event.  This is used
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10551
     * to enable event bubbling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10552
     * @property host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10553
     * @type EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10554
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10556
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10557
     * The default function to execute after event listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10558
     * have fire, but only if the default action was not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10559
     * prevented.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10560
     * @property defaultFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10561
     * @type Function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10562
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10564
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10565
     * The function to execute if a subscriber calls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10566
     * stopPropagation or stopImmediatePropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10567
     * @property stoppedFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10568
     * @type Function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10569
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10571
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10572
     * The function to execute if a subscriber calls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10573
     * preventDefault
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10574
     * @property preventedFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10575
     * @type Function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10576
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10578
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10579
     * The subscribers to this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10580
     * @property _subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10581
     * @type Subscriber []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10582
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10583
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10585
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10586
     * 'After' subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10587
     * @property _afters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10588
     * @type Subscriber []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10589
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10590
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10592
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10593
     * If set to true, the custom event will deliver an EventFacade object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10594
     * that is similar to a DOM event object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10595
     * @property emitFacade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10596
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10597
     * @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10598
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10600
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10601
     * Supports multiple options for listener signatures in order to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10602
     * port YUI 2 apps.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10603
     * @property signature
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10604
     * @type int
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10605
     * @default 9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10606
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10607
    signature : YUI3_SIGNATURE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10609
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10610
     * The context the the event will fire from by default.  Defaults to the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10611
     * instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10612
     * @property context
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10613
     * @type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10614
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10615
    context : Y,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10617
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10618
     * Specifies whether or not this event's default function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10619
     * can be cancelled by a subscriber by executing preventDefault()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10620
     * on the event facade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10621
     * @property preventable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10622
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10623
     * @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10624
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10625
    preventable : true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10627
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10628
     * Specifies whether or not a subscriber can stop the event propagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10629
     * via stopPropagation(), stopImmediatePropagation(), or halt()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10630
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10631
     * Events can only bubble if emitFacade is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10632
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10633
     * @property bubbles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10634
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10635
     * @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10636
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10637
    bubbles : true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10639
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10640
     * Returns the number of subscribers for this event as the sum of the on()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10641
     * subscribers and after() subscribers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10642
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10643
     * @method hasSubs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10644
     * @return Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10645
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10646
    hasSubs: function(when) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10647
        var s = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10648
            a = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10649
            subs = this._subscribers,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10650
            afters = this._afters,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10651
            sib = this.sibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10653
        if (subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10654
            s = subs.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10655
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10657
        if (afters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10658
            a = afters.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10659
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10660
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10661
        if (sib) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10662
            subs = sib._subscribers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10663
            afters = sib._afters;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10665
            if (subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10666
                s += subs.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10667
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10669
            if (afters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10670
                a += afters.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10671
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10672
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10674
        if (when) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10675
            return (when === 'after') ? a : s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10676
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10678
        return (s + a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10679
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10681
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10682
     * Monitor the event state for the subscribed event.  The first parameter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10683
     * is what should be monitored, the rest are the normal parameters when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10684
     * subscribing to an event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10685
     * @method monitor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10686
     * @param what {string} what to monitor ('detach', 'attach', 'publish').
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10687
     * @return {EventHandle} return value from the monitor event subscription.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10688
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10689
    monitor: function(what) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10690
        this.monitored = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10691
        var type = this.id + '|' + this.type + '_' + what,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10692
            args = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10693
        args[0] = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10694
        return this.host.on.apply(this.host, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10695
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10697
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10698
     * Get all of the subscribers to this event and any sibling event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10699
     * @method getSubs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10700
     * @return {Array} first item is the on subscribers, second the after.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10701
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10702
    getSubs: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10704
        var sibling = this.sibling,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10705
            subs = this._subscribers,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10706
            afters = this._afters,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10707
            siblingSubs,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10708
            siblingAfters;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10710
        if (sibling) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10711
            siblingSubs = sibling._subscribers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10712
            siblingAfters = sibling._afters;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10713
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10715
        if (siblingSubs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10716
            if (subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10717
                subs = subs.concat(siblingSubs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10718
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10719
                subs = siblingSubs.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10720
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10721
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10722
            if (subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10723
                subs = subs.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10724
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10725
                subs = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10726
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10727
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10728
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10729
        if (siblingAfters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10730
            if (afters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10731
                afters = afters.concat(siblingAfters);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10732
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10733
                afters = siblingAfters.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10734
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10735
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10736
            if (afters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10737
                afters = afters.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10738
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10739
                afters = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10740
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10741
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10742
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10743
        return [subs, afters];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10744
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10746
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10747
     * Apply configuration properties.  Only applies the CONFIG whitelist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10748
     * @method applyConfig
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10749
     * @param o hash of properties to apply.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10750
     * @param force {boolean} if true, properties that exist on the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10751
     * will be overwritten.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10752
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10753
    applyConfig: function(o, force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10754
        mixConfigs(this, o, force);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10755
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10757
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10758
     * Create the Subscription for subscribing function, context, and bound
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10759
     * arguments.  If this is a fireOnce event, the subscriber is immediately
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10760
     * notified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10761
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10762
     * @method _on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10763
     * @param fn {Function} Subscription callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10764
     * @param [context] {Object} Override `this` in the callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10765
     * @param [args] {Array} bound arguments that will be passed to the callback after the arguments generated by fire()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10766
     * @param [when] {String} "after" to slot into after subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10767
     * @return {EventHandle}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10768
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10769
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10770
    _on: function(fn, context, args, when) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10772
        if (!fn) { this.log('Invalid callback for CE: ' + this.type); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10773
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10774
        var s = new Y.Subscriber(fn, context, args, when);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10776
        if (this.fireOnce && this.fired) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10777
            if (this.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10778
                setTimeout(Y.bind(this._notify, this, s, this.firedWith), 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10779
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10780
                this._notify(s, this.firedWith);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10781
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10782
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10784
        if (when === AFTER) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10785
            if (!this._afters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10786
                this._afters = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10787
                this._hasAfters = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10788
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10789
            this._afters.push(s);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10790
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10791
            if (!this._subscribers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10792
                this._subscribers = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10793
                this._hasSubs = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10794
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10795
            this._subscribers.push(s);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10796
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10798
        if (this._kds) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10799
            if (when === AFTER) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10800
                this.afters[s.id] = s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10801
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10802
                this.subscribers[s.id] = s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10803
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10804
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10805
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10806
        return new Y.EventHandle(this, s);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10807
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10809
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10810
     * Listen for this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10811
     * @method subscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10812
     * @param {Function} fn The function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10813
     * @return {EventHandle} Unsubscribe handle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10814
     * @deprecated use on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10815
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10816
    subscribe: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10817
        Y.log('ce.subscribe deprecated, use "on"', 'warn', 'deprecated');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10818
        var a = (arguments.length > 2) ? nativeSlice.call(arguments, 2) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10819
        return this._on(fn, context, a, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10820
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10822
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10823
     * Listen for this event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10824
     * @method on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10825
     * @param {Function} fn The function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10826
     * @param {object} context optional execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10827
     * @param {mixed} arg* 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10828
     * when the event fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10829
     * @return {EventHandle} An object with a detach method to detch the handler(s).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10830
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10831
    on: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10832
        var a = (arguments.length > 2) ? nativeSlice.call(arguments, 2) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10833
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10834
        if (this.monitored && this.host) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10835
            this.host._monitor('attach', this, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10836
                args: arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10837
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10838
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10839
        return this._on(fn, context, a, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10840
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10841
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10842
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10843
     * Listen for this event after the normal subscribers have been notified and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10844
     * the default behavior has been applied.  If a normal subscriber prevents the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10845
     * default behavior, it also prevents after listeners from firing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10846
     * @method after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10847
     * @param {Function} fn The function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10848
     * @param {object} context optional execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10849
     * @param {mixed} arg* 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10850
     * when the event fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10851
     * @return {EventHandle} handle Unsubscribe handle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10852
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10853
    after: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10854
        var a = (arguments.length > 2) ? nativeSlice.call(arguments, 2) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10855
        return this._on(fn, context, a, AFTER);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10856
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10857
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10858
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10859
     * Detach listeners.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10860
     * @method detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10861
     * @param {Function} fn  The subscribed function to remove, if not supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10862
     *                       all will be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10863
     * @param {Object}   context The context object passed to subscribe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10864
     * @return {int} returns the number of subscribers unsubscribed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10865
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10866
    detach: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10867
        // unsubscribe handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10868
        if (fn && fn.detach) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10869
            return fn.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10870
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10872
        var i, s,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10873
            found = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10874
            subs = this._subscribers,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10875
            afters = this._afters;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10877
        if (subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10878
            for (i = subs.length; i >= 0; i--) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10879
                s = subs[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10880
                if (s && (!fn || fn === s.fn)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10881
                    this._delete(s, subs, i);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10882
                    found++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10883
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10884
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10885
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10887
        if (afters) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10888
            for (i = afters.length; i >= 0; i--) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10889
                s = afters[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10890
                if (s && (!fn || fn === s.fn)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10891
                    this._delete(s, afters, i);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10892
                    found++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10893
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10894
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10895
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10897
        return found;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10898
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10899
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10900
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10901
     * Detach listeners.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10902
     * @method unsubscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10903
     * @param {Function} fn  The subscribed function to remove, if not supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10904
     *                       all will be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10905
     * @param {Object}   context The context object passed to subscribe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10906
     * @return {int|undefined} returns the number of subscribers unsubscribed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10907
     * @deprecated use detach.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10908
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10909
    unsubscribe: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10910
        return this.detach.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10911
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10913
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10914
     * Notify a single subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10915
     * @method _notify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10916
     * @param {Subscriber} s the subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10917
     * @param {Array} args the arguments array to apply to the listener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10918
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10919
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10920
    _notify: function(s, args, ef) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10921
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10922
        this.log(this.type + '->' + 'sub: ' + s.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10924
        var ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10925
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10926
        ret = s.notify(args, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10927
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10928
        if (false === ret || this.stopped > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10929
            this.log(this.type + ' cancelled by subscriber');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10930
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10931
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10933
        return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10934
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10935
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10936
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10937
     * Logger abstraction to centralize the application of the silent flag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10938
     * @method log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10939
     * @param {string} msg message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10940
     * @param {string} cat log category.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10941
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10942
    log: function(msg, cat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10943
        if (!this.silent) { Y.log(this.id + ': ' + msg, cat || 'info', 'event'); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10944
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10946
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10947
     * Notifies the subscribers.  The callback functions will be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10948
     * from the context specified when the event was created, and with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10949
     * following parameters:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10950
     *   <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10951
     *   <li>The type of event</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10952
     *   <li>All of the arguments fire() was executed with as an array</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10953
     *   <li>The custom object (if any) that was passed into the subscribe()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10954
     *       method</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10955
     *   </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10956
     * @method fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10957
     * @param {Object*} arguments an arbitrary set of parameters to pass to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10958
     *                            the handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10959
     * @return {boolean} false if one of the subscribers returned false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10960
     *                   true otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10961
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10962
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10963
    fire: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10964
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10965
        // push is the fastest way to go from arguments to arrays
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10966
        // for most browsers currently
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10967
        // http://jsperf.com/push-vs-concat-vs-slice/2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10968
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10969
        var args = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10970
        args.push.apply(args, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10971
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10972
        return this._fire(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10973
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10975
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10976
     * Private internal implementation for `fire`, which is can be used directly by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10977
     * `EventTarget` and other event module classes which have already converted from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10978
     * an `arguments` list to an array, to avoid the repeated overhead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10979
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10980
     * @method _fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10981
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10982
     * @param {Array} args The array of arguments passed to be passed to handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10983
     * @return {boolean} false if one of the subscribers returned false, true otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10984
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10985
    _fire: function(args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10987
        if (this.fireOnce && this.fired) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10988
            this.log('fireOnce event: ' + this.type + ' already fired');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10989
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10990
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10992
            // this doesn't happen if the event isn't published
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10993
            // this.host._monitor('fire', this.type, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10995
            this.fired = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10997
            if (this.fireOnce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10998
                this.firedWith = args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 10999
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11001
            if (this.emitFacade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11002
                return this.fireComplex(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11003
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11004
                return this.fireSimple(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11005
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11006
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11007
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11008
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11009
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11010
     * Set up for notifying subscribers of non-emitFacade events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11011
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11012
     * @method fireSimple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11013
     * @param args {Array} Arguments passed to fire()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11014
     * @return Boolean false if a subscriber returned false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11015
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11016
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11017
    fireSimple: function(args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11018
        this.stopped = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11019
        this.prevented = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11020
        if (this.hasSubs()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11021
            var subs = this.getSubs();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11022
            this._procSubs(subs[0], args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11023
            this._procSubs(subs[1], args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11024
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11025
        if (this.broadcast) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11026
            this._broadcast(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11027
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11028
        return this.stopped ? false : true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11029
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11030
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11031
    // Requires the event-custom-complex module for full funcitonality.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11032
    fireComplex: function(args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11033
        this.log('Missing event-custom-complex needed to emit a facade for: ' + this.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11034
        args[0] = args[0] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11035
        return this.fireSimple(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11036
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11037
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11038
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11039
     * Notifies a list of subscribers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11040
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11041
     * @method _procSubs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11042
     * @param subs {Array} List of subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11043
     * @param args {Array} Arguments passed to fire()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11044
     * @param ef {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11045
     * @return Boolean false if a subscriber returns false or stops the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11046
     *              propagation via e.stopPropagation(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11047
     *              e.stopImmediatePropagation(), or e.halt()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11048
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11049
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11050
    _procSubs: function(subs, args, ef) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11051
        var s, i, l;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11052
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11053
        for (i = 0, l = subs.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11054
            s = subs[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11055
            if (s && s.fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11056
                if (false === this._notify(s, args, ef)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11057
                    this.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11058
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11059
                if (this.stopped === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11060
                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11061
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11062
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11063
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11064
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11065
        return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11066
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11067
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11068
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11069
     * Notifies the YUI instance if the event is configured with broadcast = 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11070
     * and both the YUI instance and Y.Global if configured with broadcast = 2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11071
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11072
     * @method _broadcast
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11073
     * @param args {Array} Arguments sent to fire()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11074
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11075
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11076
    _broadcast: function(args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11077
        if (!this.stopped && this.broadcast) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11078
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11079
            var a = args.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11080
            a.unshift(this.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11081
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11082
            if (this.host !== Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11083
                Y.fire.apply(Y, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11084
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11085
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11086
            if (this.broadcast === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11087
                Y.Global.fire.apply(Y.Global, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11088
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11089
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11090
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11091
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11092
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11093
     * Removes all listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11094
     * @method unsubscribeAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11095
     * @return {int} The number of listeners unsubscribed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11096
     * @deprecated use detachAll.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11097
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11098
    unsubscribeAll: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11099
        return this.detachAll.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11100
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11102
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11103
     * Removes all listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11104
     * @method detachAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11105
     * @return {int} The number of listeners unsubscribed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11106
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11107
    detachAll: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11108
        return this.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11109
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11111
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11112
     * Deletes the subscriber from the internal store of on() and after()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11113
     * subscribers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11114
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11115
     * @method _delete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11116
     * @param s subscriber object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11117
     * @param subs (optional) on or after subscriber array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11118
     * @param index (optional) The index found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11119
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11120
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11121
    _delete: function(s, subs, i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11122
        var when = s._when;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11124
        if (!subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11125
            subs = (when === AFTER) ? this._afters : this._subscribers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11126
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11128
        if (subs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11129
            i = YArray.indexOf(subs, s, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11131
            if (s && subs[i] === s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11132
                subs.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11134
                if (subs.length === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11135
                    if (when === AFTER) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11136
                        this._hasAfters = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11137
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11138
                        this._hasSubs = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11139
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11140
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11141
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11142
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11144
        if (this._kds) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11145
            if (when === AFTER) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11146
                delete this.afters[s.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11147
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11148
                delete this.subscribers[s.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11149
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11150
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11151
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11152
        if (this.monitored && this.host) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11153
            this.host._monitor('detach', this, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11154
                ce: this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11155
                sub: s
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11156
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11157
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11159
        if (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11160
            s.deleted = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11161
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11162
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11163
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11164
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11165
 * Stores the subscriber information to be used when the event fires.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11166
 * @param {Function} fn       The wrapped function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11167
 * @param {Object}   context  The value of the keyword 'this' in the listener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11168
 * @param {Array} args*       0..n additional arguments to supply the listener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11169
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11170
 * @class Subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11171
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11172
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11173
Y.Subscriber = function(fn, context, args, when) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11175
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11176
     * The callback that will be execute when the event fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11177
     * This is wrapped by Y.rbind if obj was supplied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11178
     * @property fn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11179
     * @type Function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11180
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11181
    this.fn = fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11182
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11183
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11184
     * Optional 'this' keyword for the listener
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11185
     * @property context
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11186
     * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11187
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11188
    this.context = context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11190
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11191
     * Unique subscriber id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11192
     * @property id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11193
     * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11194
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11195
    this.id = Y.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11197
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11198
     * Additional arguments to propagate to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11199
     * @property args
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11200
     * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11201
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11202
    this.args = args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11203
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11204
    this._when = when;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11206
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11207
     * Custom events for a given fire transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11208
     * @property events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11209
     * @type {EventTarget}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11210
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11211
    // this.events = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11212
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11213
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11214
     * This listener only reacts to the event once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11215
     * @property once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11216
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11217
    // this.once = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11219
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11221
Y.Subscriber.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11222
    constructor: Y.Subscriber,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11224
    _notify: function(c, args, ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11225
        if (this.deleted && !this.postponed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11226
            if (this.postponed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11227
                delete this.fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11228
                delete this.context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11229
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11230
                delete this.postponed;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11231
                return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11232
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11233
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11234
        var a = this.args, ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11235
        switch (ce.signature) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11236
            case 0:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11237
                ret = this.fn.call(c, ce.type, args, c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11238
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11239
            case 1:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11240
                ret = this.fn.call(c, args[0] || null, c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11241
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11242
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11243
                if (a || args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11244
                    args = args || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11245
                    a = (a) ? args.concat(a) : args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11246
                    ret = this.fn.apply(c, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11247
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11248
                    ret = this.fn.call(c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11249
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11250
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11252
        if (this.once) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11253
            ce._delete(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11254
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11256
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11257
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11259
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11260
     * Executes the subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11261
     * @method notify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11262
     * @param args {Array} Arguments array for the subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11263
     * @param ce {CustomEvent} The custom event that sent the notification.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11264
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11265
    notify: function(args, ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11266
        var c = this.context,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11267
            ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11269
        if (!c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11270
            c = (ce.contextFn) ? ce.contextFn() : ce.context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11271
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11273
        // only catch errors if we will not re-throw them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11274
        if (Y.config && Y.config.throwFail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11275
            ret = this._notify(c, args, ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11276
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11277
            try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11278
                ret = this._notify(c, args, ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11279
            } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11280
                Y.error(this + ' failed: ' + e.message, e);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11281
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11282
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11284
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11285
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11287
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11288
     * Returns true if the fn and obj match this objects properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11289
     * Used by the unsubscribe method to match the right subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11290
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11291
     * @method contains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11292
     * @param {Function} fn the function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11293
     * @param {Object} context optional 'this' keyword for the listener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11294
     * @return {boolean} true if the supplied arguments match this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11295
     *                   subscriber's signature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11296
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11297
    contains: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11298
        if (context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11299
            return ((this.fn === fn) && this.context === context);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11300
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11301
            return (this.fn === fn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11302
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11303
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11305
    valueOf : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11306
        return this.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11307
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11309
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11310
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11311
 * Return value from all subscribe operations
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11312
 * @class EventHandle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11313
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11314
 * @param {CustomEvent} evt the custom event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11315
 * @param {Subscriber} sub the subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11316
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11317
Y.EventHandle = function(evt, sub) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11319
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11320
     * The custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11321
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11322
     * @property evt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11323
     * @type CustomEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11324
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11325
    this.evt = evt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11327
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11328
     * The subscriber object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11329
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11330
     * @property sub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11331
     * @type Subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11332
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11333
    this.sub = sub;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11334
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11336
Y.EventHandle.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11337
    batch: function(f, c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11338
        f.call(c || this, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11339
        if (Y.Lang.isArray(this.evt)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11340
            Y.Array.each(this.evt, function(h) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11341
                h.batch.call(c || h, f);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11342
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11343
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11344
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11346
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11347
     * Detaches this subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11348
     * @method detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11349
     * @return {int} the number of detached listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11350
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11351
    detach: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11352
        var evt = this.evt, detached = 0, i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11353
        if (evt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11354
            // Y.log('EventHandle.detach: ' + this.sub, 'info', 'Event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11355
            if (Y.Lang.isArray(evt)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11356
                for (i = 0; i < evt.length; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11357
                    detached += evt[i].detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11358
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11359
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11360
                evt._delete(this.sub);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11361
                detached = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11362
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11364
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11366
        return detached;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11367
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11368
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11369
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11370
     * Monitor the event state for the subscribed event.  The first parameter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11371
     * is what should be monitored, the rest are the normal parameters when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11372
     * subscribing to an event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11373
     * @method monitor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11374
     * @param what {string} what to monitor ('attach', 'detach', 'publish').
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11375
     * @return {EventHandle} return value from the monitor event subscription.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11376
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11377
    monitor: function(what) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11378
        return this.evt.monitor.apply(this.evt, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11379
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11380
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11382
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11383
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11384
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11385
 * @module event-custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11386
 * @submodule event-custom-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11387
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11389
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11390
 * EventTarget provides the implementation for any object to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11391
 * publish, subscribe and fire to custom events, and also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11392
 * alows other EventTargets to target the object with events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11393
 * sourced from the other object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11394
 * EventTarget is designed to be used with Y.augment to wrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11395
 * EventCustom in an interface that allows events to be listened to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11396
 * and fired by name.  This makes it possible for implementing code to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11397
 * subscribe to an event that either has not been created yet, or will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11398
 * not be created at all.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11399
 * @class EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11400
 * @param opts a configuration object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11401
 * @config emitFacade {boolean} if true, all events will emit event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11402
 * facade payloads by default (default false)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11403
 * @config prefix {String} the prefix to apply to non-prefixed event names
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11404
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11406
var L = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11407
    PREFIX_DELIMITER = ':',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11408
    CATEGORY_DELIMITER = '|',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11409
    AFTER_PREFIX = '~AFTER~',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11410
    WILD_TYPE_RE = /(.*?)(:)(.*?)/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11412
    _wildType = Y.cached(function(type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11413
        return type.replace(WILD_TYPE_RE, "*$2$3");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11414
    }),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11416
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11417
     * If the instance has a prefix attribute and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11418
     * event type is not prefixed, the instance prefix is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11419
     * applied to the supplied type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11420
     * @method _getType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11421
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11422
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11423
    _getType = function(type, pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11425
        if (!pre || type.indexOf(PREFIX_DELIMITER) > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11426
            return type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11427
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11429
        return pre + PREFIX_DELIMITER + type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11430
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11432
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11433
     * Returns an array with the detach key (if provided),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11434
     * and the prefixed event name from _getType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11435
     * Y.on('detachcategory| menu:click', fn)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11436
     * @method _parseType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11437
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11438
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11439
    _parseType = Y.cached(function(type, pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11441
        var t = type, detachcategory, after, i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11443
        if (!L.isString(t)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11444
            return t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11445
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11447
        i = t.indexOf(AFTER_PREFIX);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11448
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11449
        if (i > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11450
            after = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11451
            t = t.substr(AFTER_PREFIX.length);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11452
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11454
        i = t.indexOf(CATEGORY_DELIMITER);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11456
        if (i > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11457
            detachcategory = t.substr(0, (i));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11458
            t = t.substr(i+1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11459
            if (t === '*') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11460
                t = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11461
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11462
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11464
        // detach category, full type with instance prefix, is this an after listener, short type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11465
        return [detachcategory, (pre) ? _getType(t, pre) : t, after, t];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11466
    }),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11468
    ET = function(opts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11470
        var etState = this._yuievt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11471
            etConfig;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11472
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11473
        if (!etState) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11474
            etState = this._yuievt = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11475
                events: {},    // PERF: Not much point instantiating lazily. We're bound to have events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11476
                targets: null, // PERF: Instantiate lazily, if user actually adds target,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11477
                config: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11478
                    host: this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11479
                    context: this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11480
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11481
                chain: Y.config.chain
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11482
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11483
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11485
        etConfig = etState.config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11486
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11487
        if (opts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11488
            mixConfigs(etConfig, opts, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11490
            if (opts.chain !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11491
                etState.chain = opts.chain;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11492
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11493
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11494
            if (opts.prefix) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11495
                etConfig.prefix = opts.prefix;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11496
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11497
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11498
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11500
ET.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11501
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11502
    constructor: ET,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11504
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11505
     * Listen to a custom event hosted by this object one time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11506
     * This is the equivalent to <code>on</code> except the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11507
     * listener is immediatelly detached when it is executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11508
     * @method once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11509
     * @param {String} type The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11510
     * @param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11511
     * @param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11512
     * @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11513
     * @return {EventHandle} A subscription handle capable of detaching the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11514
     *                       subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11515
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11516
    once: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11517
        var handle = this.on.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11518
        handle.batch(function(hand) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11519
            if (hand.sub) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11520
                hand.sub.once = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11521
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11522
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11523
        return handle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11524
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11526
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11527
     * Listen to a custom event hosted by this object one time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11528
     * This is the equivalent to <code>after</code> except the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11529
     * listener is immediatelly detached when it is executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11530
     * @method onceAfter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11531
     * @param {String} type The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11532
     * @param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11533
     * @param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11534
     * @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11535
     * @return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11536
     *                       subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11537
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11538
    onceAfter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11539
        var handle = this.after.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11540
        handle.batch(function(hand) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11541
            if (hand.sub) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11542
                hand.sub.once = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11543
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11544
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11545
        return handle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11546
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11548
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11549
     * Takes the type parameter passed to 'on' and parses out the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11550
     * various pieces that could be included in the type.  If the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11551
     * event type is passed without a prefix, it will be expanded
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11552
     * to include the prefix one is supplied or the event target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11553
     * is configured with a default prefix.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11554
     * @method parseType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11555
     * @param {String} type the type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11556
     * @param {String} [pre=this._yuievt.config.prefix] the prefix
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11557
     * @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11558
     * @return {Array} an array containing:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11559
     *  * the detach category, if supplied,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11560
     *  * the prefixed event type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11561
     *  * whether or not this is an after listener,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11562
     *  * the supplied event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11563
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11564
    parseType: function(type, pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11565
        return _parseType(type, pre || this._yuievt.config.prefix);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11566
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11568
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11569
     * Subscribe a callback function to a custom event fired by this object or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11570
     * from an object that bubbles its events to this object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11571
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11572
     * Callback functions for events published with `emitFacade = true` will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11573
     * receive an `EventFacade` as the first argument (typically named "e").
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11574
     * These callbacks can then call `e.preventDefault()` to disable the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11575
     * behavior published to that event's `defaultFn`.  See the `EventFacade`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11576
     * API for all available properties and methods. Subscribers to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11577
     * non-`emitFacade` events will receive the arguments passed to `fire()`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11578
     * after the event name.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11579
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11580
     * To subscribe to multiple events at once, pass an object as the first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11581
     * argument, where the key:value pairs correspond to the eventName:callback,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11582
     * or pass an array of event names as the first argument to subscribe to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11583
     * all listed events with the same callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11584
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11585
     * Returning `false` from a callback is supported as an alternative to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11586
     * calling `e.preventDefault(); e.stopPropagation();`.  However, it is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11587
     * recommended to use the event methods whenever possible.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11588
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11589
     * @method on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11590
     * @param {String} type The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11591
     * @param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11592
     * @param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11593
     * @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11594
     * @return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11595
     *                       subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11596
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11597
    on: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11599
        var yuievt = this._yuievt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11600
            parts = _parseType(type, yuievt.config.prefix), f, c, args, ret, ce,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11601
            detachcategory, handle, store = Y.Env.evt.handles, after, adapt, shorttype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11602
            Node = Y.Node, n, domevent, isArr;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11604
        // full name, args, detachcategory, after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11605
        this._monitor('attach', parts[1], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11606
            args: arguments,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11607
            category: parts[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11608
            after: parts[2]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11609
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11610
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11611
        if (L.isObject(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11613
            if (L.isFunction(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11614
                return Y.Do.before.apply(Y.Do, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11615
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11617
            f = fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11618
            c = context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11619
            args = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11620
            ret = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11622
            if (L.isArray(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11623
                isArr = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11624
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11625
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11626
            after = type._after;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11627
            delete type._after;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11629
            Y.each(type, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11631
                if (L.isObject(v)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11632
                    f = v.fn || ((L.isFunction(v)) ? v : f);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11633
                    c = v.context || c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11634
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11636
                var nv = (after) ? AFTER_PREFIX : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11638
                args[0] = nv + ((isArr) ? v : k);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11639
                args[1] = f;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11640
                args[2] = c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11641
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11642
                ret.push(this.on.apply(this, args));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11643
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11644
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11645
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11646
            return (yuievt.chain) ? this : new Y.EventHandle(ret);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11647
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11649
        detachcategory = parts[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11650
        after = parts[2];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11651
        shorttype = parts[3];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11653
        // extra redirection so we catch adaptor events too.  take a look at this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11654
        if (Node && Y.instanceOf(this, Node) && (shorttype in Node.DOM_EVENTS)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11655
            args = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11656
            args.splice(2, 0, Node.getDOMNode(this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11657
            // Y.log("Node detected, redirecting with these args: " + args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11658
            return Y.on.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11659
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11660
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11661
        type = parts[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11663
        if (Y.instanceOf(this, YUI)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11665
            adapt = Y.Env.evt.plugins[type];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11666
            args  = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11667
            args[0] = shorttype;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11669
            if (Node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11670
                n = args[2];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11672
                if (Y.instanceOf(n, Y.NodeList)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11673
                    n = Y.NodeList.getDOMNodes(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11674
                } else if (Y.instanceOf(n, Node)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11675
                    n = Node.getDOMNode(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11676
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11678
                domevent = (shorttype in Node.DOM_EVENTS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11679
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11680
                // Captures both DOM events and event plugins.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11681
                if (domevent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11682
                    args[2] = n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11683
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11684
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11686
            // check for the existance of an event adaptor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11687
            if (adapt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11688
                Y.log('Using adaptor for ' + shorttype + ', ' + n, 'info', 'event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11689
                handle = adapt.on.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11690
            } else if ((!type) || domevent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11691
                handle = Y.Event._attach(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11692
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11694
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11695
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11696
        if (!handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11697
            ce = yuievt.events[type] || this.publish(type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11698
            handle = ce._on(fn, context, (arguments.length > 3) ? nativeSlice.call(arguments, 3) : null, (after) ? 'after' : true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11699
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11700
            // TODO: More robust regex, accounting for category
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11701
            if (type.indexOf("*:") !== -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11702
                this._hasSiblings = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11703
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11704
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11706
        if (detachcategory) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11707
            store[detachcategory] = store[detachcategory] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11708
            store[detachcategory][type] = store[detachcategory][type] || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11709
            store[detachcategory][type].push(handle);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11710
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11711
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11712
        return (yuievt.chain) ? this : handle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11713
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11714
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11715
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11716
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11717
     * subscribe to an event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11718
     * @method subscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11719
     * @deprecated use on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11720
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11721
    subscribe: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11722
        Y.log('EventTarget subscribe() is deprecated, use on()', 'warn', 'deprecated');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11723
        return this.on.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11724
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11726
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11727
     * Detach one or more listeners the from the specified event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11728
     * @method detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11729
     * @param type {string|Object}   Either the handle to the subscriber or the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11730
     *                        type of event.  If the type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11731
     *                        is not specified, it will attempt to remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11732
     *                        the listener from all hosted events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11733
     * @param fn   {Function} The subscribed function to unsubscribe, if not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11734
     *                          supplied, all subscribers will be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11735
     * @param context  {Object}   The custom object passed to subscribe.  This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11736
     *                        optional, but if supplied will be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11737
     *                        disambiguate multiple listeners that are the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11738
     *                        (e.g., you subscribe many object using a function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11739
     *                        that lives on the prototype)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11740
     * @return {EventTarget} the host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11741
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11742
    detach: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11744
        var evts = this._yuievt.events,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11745
            i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11746
            Node = Y.Node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11747
            isNode = Node && (Y.instanceOf(this, Node));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11749
        // detachAll disabled on the Y instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11750
        if (!type && (this !== Y)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11751
            for (i in evts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11752
                if (evts.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11753
                    evts[i].detach(fn, context);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11754
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11755
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11756
            if (isNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11757
                Y.Event.purgeElement(Node.getDOMNode(this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11758
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11760
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11761
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11763
        var parts = _parseType(type, this._yuievt.config.prefix),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11764
        detachcategory = L.isArray(parts) ? parts[0] : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11765
        shorttype = (parts) ? parts[3] : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11766
        adapt, store = Y.Env.evt.handles, detachhost, cat, args,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11767
        ce,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11769
        keyDetacher = function(lcat, ltype, host) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11770
            var handles = lcat[ltype], ce, i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11771
            if (handles) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11772
                for (i = handles.length - 1; i >= 0; --i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11773
                    ce = handles[i].evt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11774
                    if (ce.host === host || ce.el === host) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11775
                        handles[i].detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11776
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11777
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11778
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11779
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11781
        if (detachcategory) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11783
            cat = store[detachcategory];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11784
            type = parts[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11785
            detachhost = (isNode) ? Y.Node.getDOMNode(this) : this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11786
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11787
            if (cat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11788
                if (type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11789
                    keyDetacher(cat, type, detachhost);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11790
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11791
                    for (i in cat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11792
                        if (cat.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11793
                            keyDetacher(cat, i, detachhost);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11794
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11795
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11796
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11798
                return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11799
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11801
        // If this is an event handle, use it to detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11802
        } else if (L.isObject(type) && type.detach) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11803
            type.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11804
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11805
        // extra redirection so we catch adaptor events too.  take a look at this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11806
        } else if (isNode && ((!shorttype) || (shorttype in Node.DOM_EVENTS))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11807
            args = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11808
            args[2] = Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11809
            Y.detach.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11810
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11811
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11813
        adapt = Y.Env.evt.plugins[shorttype];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11815
        // The YUI instance handles DOM events and adaptors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11816
        if (Y.instanceOf(this, YUI)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11817
            args = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11818
            // use the adaptor specific detach code if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11819
            if (adapt && adapt.detach) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11820
                adapt.detach.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11821
                return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11822
            // DOM event fork
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11823
            } else if (!type || (!adapt && Node && (type in Node.DOM_EVENTS))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11824
                args[0] = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11825
                Y.Event.detach.apply(Y.Event, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11826
                return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11827
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11828
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11829
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11830
        // ce = evts[type];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11831
        ce = evts[parts[1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11832
        if (ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11833
            ce.detach(fn, context);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11834
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11835
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11836
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11837
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11839
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11840
     * detach a listener
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11841
     * @method unsubscribe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11842
     * @deprecated use detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11843
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11844
    unsubscribe: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11845
Y.log('EventTarget unsubscribe() is deprecated, use detach()', 'warn', 'deprecated');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11846
        return this.detach.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11847
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11849
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11850
     * Removes all listeners from the specified event.  If the event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11851
     * is not specified, all listeners from all hosted custom events will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11852
     * be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11853
     * @method detachAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11854
     * @param type {String}   The type, or name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11855
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11856
    detachAll: function(type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11857
        return this.detach(type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11858
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11860
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11861
     * Removes all listeners from the specified event.  If the event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11862
     * is not specified, all listeners from all hosted custom events will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11863
     * be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11864
     * @method unsubscribeAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11865
     * @param type {String}   The type, or name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11866
     * @deprecated use detachAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11867
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11868
    unsubscribeAll: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11869
Y.log('EventTarget unsubscribeAll() is deprecated, use detachAll()', 'warn', 'deprecated');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11870
        return this.detachAll.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11871
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11873
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11874
     * Creates a new custom event of the specified type.  If a custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11875
     * by that name already exists, it will not be re-created.  In either
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11876
     * case the custom event is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11877
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11878
     * @method publish
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11879
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11880
     * @param type {String} the type, or name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11881
     * @param opts {object} optional config params.  Valid properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11882
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11883
     *  <ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11884
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11885
     *   'broadcast': whether or not the YUI instance and YUI global are notified when the event is fired (false)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11886
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11887
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11888
     *   'bubbles': whether or not this event bubbles (true)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11889
     *              Events can only bubble if emitFacade is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11890
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11891
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11892
     *   'context': the default execution context for the listeners (this)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11893
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11894
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11895
     *   'defaultFn': the default function to execute when this event fires if preventDefault was not called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11896
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11897
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11898
     *   'emitFacade': whether or not this event emits a facade (false)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11899
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11900
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11901
     *   'prefix': the prefix for this targets events, e.g., 'menu' in 'menu:click'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11902
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11903
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11904
     *   'fireOnce': if an event is configured to fire once, new subscribers after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11905
     *   the fire will be notified immediately.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11906
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11907
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11908
     *   'async': fireOnce event listeners will fire synchronously if the event has already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11909
     *    fired unless async is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11910
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11911
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11912
     *   'preventable': whether or not preventDefault() has an effect (true)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11913
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11914
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11915
     *   'preventedFn': a function that is executed when preventDefault is called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11916
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11917
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11918
     *   'queuable': whether or not this event can be queued during bubbling (false)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11919
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11920
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11921
     *   'silent': if silent is true, debug messages are not provided for this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11922
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11923
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11924
     *   'stoppedFn': a function that is executed when stopPropagation is called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11925
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11926
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11927
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11928
     *   'monitored': specifies whether or not this event should send notifications about
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11929
     *   when the event has been attached, detached, or published.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11930
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11931
     *    <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11932
     *   'type': the event type (valid option if not provided as the first parameter to publish)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11933
     *    </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11934
     *  </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11935
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11936
     *  @return {CustomEvent} the custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11937
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11938
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11939
    publish: function(type, opts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11941
        var ret,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11942
            etState = this._yuievt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11943
            etConfig = etState.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11944
            pre = etConfig.prefix;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11946
        if (typeof type === "string")  {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11947
            if (pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11948
                type = _getType(type, pre);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11949
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11950
            ret = this._publish(type, etConfig, opts);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11951
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11952
            ret = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11953
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11954
            Y.each(type, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11955
                if (pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11956
                    k = _getType(k, pre);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11957
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11958
                ret[k] = this._publish(k, etConfig, v || opts);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11959
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11961
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11962
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11963
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11964
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11965
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11966
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11967
     * Returns the fully qualified type, given a short type string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11968
     * That is, returns "foo:bar" when given "bar" if "foo" is the configured prefix.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11969
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11970
     * NOTE: This method, unlike _getType, does no checking of the value passed in, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11971
     * is designed to be used with the low level _publish() method, for critical path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11972
     * implementations which need to fast-track publish for performance reasons.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11973
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11974
     * @method _getFullType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11975
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11976
     * @param {String} type The short type to prefix
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11977
     * @return {String} The prefixed type, if a prefix is set, otherwise the type passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11978
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11979
    _getFullType : function(type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11980
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11981
        var pre = this._yuievt.config.prefix;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11982
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11983
        if (pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11984
            return pre + PREFIX_DELIMITER + type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11985
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11986
            return type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11987
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11988
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11990
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11991
     * The low level event publish implementation. It expects all the massaging to have been done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11992
     * outside of this method. e.g. the `type` to `fullType` conversion. It's designed to be a fast
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11993
     * path publish, which can be used by critical code paths to improve performance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11994
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11995
     * @method _publish
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11996
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11997
     * @param {String} fullType The prefixed type of the event to publish.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11998
     * @param {Object} etOpts The EventTarget specific configuration to mix into the published event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 11999
     * @param {Object} ceOpts The publish specific configuration to mix into the published event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12000
     * @return {CustomEvent} The published event. If called without `etOpts` or `ceOpts`, this will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12001
     * be the default `CustomEvent` instance, and can be configured independently.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12002
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12003
    _publish : function(fullType, etOpts, ceOpts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12004
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12005
        var ce,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12006
            etState = this._yuievt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12007
            etConfig = etState.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12008
            host = etConfig.host,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12009
            context = etConfig.context,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12010
            events = etState.events;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12011
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12012
        ce = events[fullType];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12013
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12014
        // PERF: Hate to pull the check out of monitor, but trying to keep critical path tight.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12015
        if ((etConfig.monitored && !ce) || (ce && ce.monitored)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12016
            this._monitor('publish', fullType, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12017
                args: arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12018
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12019
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12021
        if (!ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12022
            // Publish event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12023
            ce = events[fullType] = new Y.CustomEvent(fullType, etOpts);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12025
            if (!etOpts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12026
                ce.host = host;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12027
                ce.context = context;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12028
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12029
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12030
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12031
        if (ceOpts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12032
            mixConfigs(ce, ceOpts, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12033
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12034
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12035
        return ce;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12036
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12037
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12038
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12039
     * This is the entry point for the event monitoring system.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12040
     * You can monitor 'attach', 'detach', 'fire', and 'publish'.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12041
     * When configured, these events generate an event.  click ->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12042
     * click_attach, click_detach, click_publish -- these can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12043
     * be subscribed to like other events to monitor the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12044
     * system.  Inividual published events can have monitoring
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12045
     * turned on or off (publish can't be turned off before it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12046
     * it published) by setting the events 'monitor' config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12047
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12048
     * @method _monitor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12049
     * @param what {String} 'attach', 'detach', 'fire', or 'publish'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12050
     * @param eventType {String|CustomEvent} The prefixed name of the event being monitored, or the CustomEvent object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12051
     * @param o {Object} Information about the event interaction, such as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12052
     *                  fire() args, subscription category, publish config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12053
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12054
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12055
    _monitor: function(what, eventType, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12056
        var monitorevt, ce, type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12057
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12058
        if (eventType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12059
            if (typeof eventType === "string") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12060
                type = eventType;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12061
                ce = this.getEvent(eventType, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12062
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12063
                ce = eventType;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12064
                type = eventType.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12065
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12066
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12067
            if ((this._yuievt.config.monitored && (!ce || ce.monitored)) || (ce && ce.monitored)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12068
                monitorevt = type + '_' + what;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12069
                o.monitored = what;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12070
                this.fire.call(this, monitorevt, o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12071
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12072
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12073
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12074
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12075
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12076
     * Fire a custom event by name.  The callback functions will be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12077
     * from the context specified when the event was created, and with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12078
     * following parameters.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12079
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12080
     * If the custom event object hasn't been created, then the event hasn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12081
     * been published and it has no subscribers.  For performance sake, we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12082
     * immediate exit in this case.  This means the event won't bubble, so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12083
     * if the intention is that a bubble target be notified, the event must
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12084
     * be published on this object first.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12085
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12086
     * The first argument is the event type, and any additional arguments are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12087
     * passed to the listeners as parameters.  If the first of these is an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12088
     * object literal, and the event is configured to emit an event facade,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12089
     * that object is mixed into the event facade and the facade is provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12090
     * in place of the original object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12091
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12092
     * @method fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12093
     * @param type {String|Object} The type of the event, or an object that contains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12094
     * a 'type' property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12095
     * @param arguments {Object*} an arbitrary set of parameters to pass to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12096
     * the handler.  If the first of these is an object literal and the event is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12097
     * configured to emit an event facade, the event facade will replace that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12098
     * parameter after the properties the object literal contains are copied to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12099
     * the event facade.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12100
     * @return {EventTarget} the event host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12101
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12102
    fire: function(type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12104
        var typeIncluded = (typeof type === "string"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12105
            argCount = arguments.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12106
            t = type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12107
            yuievt = this._yuievt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12108
            etConfig = yuievt.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12109
            pre = etConfig.prefix,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12110
            ret,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12111
            ce,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12112
            ce2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12113
            args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12115
        if (typeIncluded && argCount <= 3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12117
            // PERF: Try to avoid slice/iteration for the common signatures
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12119
            // Most common
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12120
            if (argCount === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12121
                args = [arguments[1]]; // fire("foo", {})
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12122
            } else if (argCount === 3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12123
                args = [arguments[1], arguments[2]]; // fire("foo", {}, opts)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12124
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12125
                args = []; // fire("foo")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12126
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12128
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12129
            args = nativeSlice.call(arguments, ((typeIncluded) ? 1 : 0));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12130
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12132
        if (!typeIncluded) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12133
            t = (type && type.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12134
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12136
        if (pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12137
            t = _getType(t, pre);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12138
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12140
        ce = yuievt.events[t];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12142
        if (this._hasSiblings) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12143
            ce2 = this.getSibling(t, ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12145
            if (ce2 && !ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12146
                ce = this.publish(t);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12147
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12148
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12150
        // PERF: trying to avoid function call, since this is a critical path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12151
        if ((etConfig.monitored && (!ce || ce.monitored)) || (ce && ce.monitored)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12152
            this._monitor('fire', (ce || t), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12153
                args: args
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12154
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12155
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12157
        // this event has not been published or subscribed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12158
        if (!ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12159
            if (yuievt.hasTargets) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12160
                return this.bubble({ type: t }, args, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12161
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12163
            // otherwise there is nothing to be done
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12164
            ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12165
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12167
            if (ce2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12168
                ce.sibling = ce2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12169
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12171
            ret = ce._fire(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12172
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12174
        return (yuievt.chain) ? this : ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12175
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12177
    getSibling: function(type, ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12178
        var ce2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12180
        // delegate to *:type events if there are subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12181
        if (type.indexOf(PREFIX_DELIMITER) > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12182
            type = _wildType(type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12183
            ce2 = this.getEvent(type, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12184
            if (ce2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12185
                ce2.applyConfig(ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12186
                ce2.bubbles = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12187
                ce2.broadcast = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12188
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12189
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12190
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12191
        return ce2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12192
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12194
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12195
     * Returns the custom event of the provided type has been created, a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12196
     * falsy value otherwise
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12197
     * @method getEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12198
     * @param type {String} the type, or name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12199
     * @param prefixed {String} if true, the type is prefixed already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12200
     * @return {CustomEvent} the custom event or null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12201
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12202
    getEvent: function(type, prefixed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12203
        var pre, e;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12205
        if (!prefixed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12206
            pre = this._yuievt.config.prefix;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12207
            type = (pre) ? _getType(type, pre) : type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12208
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12209
        e = this._yuievt.events;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12210
        return e[type] || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12211
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12212
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12213
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12214
     * Subscribe to a custom event hosted by this object.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12215
     * supplied callback will execute after any listeners add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12216
     * via the subscribe method, and after the default function,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12217
     * if configured for the event, has executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12218
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12219
     * @method after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12220
     * @param {String} type The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12221
     * @param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12222
     * @param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12223
     * @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12224
     * @return {EventHandle} A subscription handle capable of detaching the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12225
     *                       subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12226
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12227
    after: function(type, fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12229
        var a = nativeSlice.call(arguments, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12231
        switch (L.type(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12232
            case 'function':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12233
                return Y.Do.after.apply(Y.Do, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12234
            case 'array':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12235
            //     YArray.each(a[0], function(v) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12236
            //         v = AFTER_PREFIX + v;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12237
            //     });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12238
            //     break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12239
            case 'object':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12240
                a[0]._after = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12241
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12242
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12243
                a[0] = AFTER_PREFIX + type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12244
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12246
        return this.on.apply(this, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12248
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12250
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12251
     * Executes the callback before a DOM event, custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12252
     * or method.  If the first argument is a function, it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12253
     * is assumed the target is a method.  For DOM and custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12254
     * events, this is an alias for Y.on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12255
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12256
     * For DOM and custom events:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12257
     * type, callback, context, 0-n arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12258
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12259
     * For methods:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12260
     * callback, object (method host), methodName, context, 0-n arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12261
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12262
     * @method before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12263
     * @return detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12264
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12265
    before: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12266
        return this.on.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12267
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12269
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12271
Y.EventTarget = ET;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12273
// make Y an event target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12274
Y.mix(Y, ET.prototype);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12275
ET.call(Y, { bubbles: false });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12277
YUI.Env.globalEvents = YUI.Env.globalEvents || new ET();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12279
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12280
 * Hosts YUI page level events.  This is where events bubble to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12281
 * when the broadcast config is set to 2.  This property is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12282
 * only available if the custom event module is loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12283
 * @property Global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12284
 * @type EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12285
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12286
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12287
Y.Global = YUI.Env.globalEvents;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12288
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12289
// @TODO implement a global namespace function on Y.Global?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12291
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12292
`Y.on()` can do many things:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12294
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12295
    <li>Subscribe to custom events `publish`ed and `fire`d from Y</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12296
    <li>Subscribe to custom events `publish`ed with `broadcast` 1 or 2 and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12297
        `fire`d from any object in the YUI instance sandbox</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12298
    <li>Subscribe to DOM events</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12299
    <li>Subscribe to the execution of a method on any object, effectively
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12300
    treating that method as an event</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12301
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12302
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12303
For custom event subscriptions, pass the custom event name as the first argument
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12304
and callback as the second. The `this` object in the callback will be `Y` unless
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12305
an override is passed as the third argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12307
    Y.on('io:complete', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12308
        Y.MyApp.updateStatus('Transaction complete');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12309
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12311
To subscribe to DOM events, pass the name of a DOM event as the first argument
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12312
and a CSS selector string as the third argument after the callback function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12313
Alternately, the third argument can be a `Node`, `NodeList`, `HTMLElement`,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12314
array, or simply omitted (the default is the `window` object).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12316
    Y.on('click', function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12317
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12319
        // proceed with ajax form submission
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12320
        var url = this.get('action');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12321
        ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12322
    }, '#my-form');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12324
The `this` object in DOM event callbacks will be the `Node` targeted by the CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12325
selector or other identifier.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12327
`on()` subscribers for DOM events or custom events `publish`ed with a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12328
`defaultFn` can prevent the default behavior with `e.preventDefault()` from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12329
event object passed as the first parameter to the subscription callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12331
To subscribe to the execution of an object method, pass arguments corresponding to the call signature for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12332
<a href="../classes/Do.html#methods_before">`Y.Do.before(...)`</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12334
NOTE: The formal parameter list below is for events, not for function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12335
injection.  See `Y.Do.before` for that signature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12337
@method on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12338
@param {String} type DOM or custom event name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12339
@param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12340
@param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12341
@param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12342
@return {EventHandle} A subscription handle capable of detaching the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12343
                      subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12344
@see Do.before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12345
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12346
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12347
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12348
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12349
Listen for an event one time.  Equivalent to `on()`, except that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12350
the listener is immediately detached when executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12352
See the <a href="#methods_on">`on()` method</a> for additional subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12353
options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12355
@see on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12356
@method once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12357
@param {String} type DOM or custom event name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12358
@param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12359
@param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12360
@param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12361
@return {EventHandle} A subscription handle capable of detaching the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12362
                      subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12363
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12364
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12366
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12367
Listen for an event one time.  Equivalent to `once()`, except, like `after()`,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12368
the subscription callback executes after all `on()` subscribers and the event's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12369
`defaultFn` (if configured) have executed.  Like `after()` if any `on()` phase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12370
subscriber calls `e.preventDefault()`, neither the `defaultFn` nor the `after()`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12371
subscribers will execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12373
The listener is immediately detached when executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12374
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12375
See the <a href="#methods_on">`on()` method</a> for additional subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12376
options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12378
@see once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12379
@method onceAfter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12380
@param {String} type The custom event name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12381
@param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12382
@param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12383
@param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12384
@return {EventHandle} A subscription handle capable of detaching the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12385
                      subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12386
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12387
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12389
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12390
Like `on()`, this method creates a subscription to a custom event or to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12391
execution of a method on an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12393
For events, `after()` subscribers are executed after the event's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12394
`defaultFn` unless `e.preventDefault()` was called from an `on()` subscriber.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12396
See the <a href="#methods_on">`on()` method</a> for additional subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12397
options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12399
NOTE: The subscription signature shown is for events, not for function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12400
injection.  See <a href="../classes/Do.html#methods_after">`Y.Do.after`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12401
for that signature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12403
@see on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12404
@see Do.after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12405
@method after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12406
@param {String} type The custom event name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12407
@param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12408
@param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12409
@param {Any} [args*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12410
@return {EventHandle} A subscription handle capable of detaching the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12411
                      subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12412
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12413
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12416
}, '@VERSION@', {"requires": ["oop"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12417
YUI.add('event-custom-complex', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12418
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12420
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12421
 * Adds event facades, preventable default behavior, and bubbling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12422
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12423
 * @module event-custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12424
 * @submodule event-custom-complex
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12425
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12427
var FACADE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12428
    FACADE_KEYS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12429
    YObject = Y.Object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12430
    key,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12431
    EMPTY = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12432
    CEProto = Y.CustomEvent.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12433
    ETProto = Y.EventTarget.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12435
    mixFacadeProps = function(facade, payload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12436
        var p;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12438
        for (p in payload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12439
            if (!(FACADE_KEYS.hasOwnProperty(p))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12440
                facade[p] = payload[p];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12441
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12442
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12443
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12445
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12446
 * Wraps and protects a custom event for use when emitFacade is set to true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12447
 * Requires the event-custom-complex module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12448
 * @class EventFacade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12449
 * @param e {Event} the custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12450
 * @param currentTarget {HTMLElement} the element the listener was attached to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12451
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12452
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12453
Y.EventFacade = function(e, currentTarget) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12455
    if (!e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12456
        e = EMPTY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12457
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12459
    this._event = e;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12461
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12462
     * The arguments passed to fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12463
     * @property details
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12464
     * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12465
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12466
    this.details = e.details;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12468
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12469
     * The event type, this can be overridden by the fire() payload
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12470
     * @property type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12471
     * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12472
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12473
    this.type = e.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12474
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12475
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12476
     * The real event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12477
     * @property _type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12478
     * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12479
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12480
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12481
    this._type = e.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12483
    //////////////////////////////////////////////////////
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12485
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12486
     * Node reference for the targeted eventtarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12487
     * @property target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12488
     * @type Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12489
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12490
    this.target = e.target;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12492
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12493
     * Node reference for the element that the listener was attached to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12494
     * @property currentTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12495
     * @type Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12496
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12497
    this.currentTarget = currentTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12499
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12500
     * Node reference to the relatedTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12501
     * @property relatedTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12502
     * @type Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12503
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12504
    this.relatedTarget = e.relatedTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12506
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12508
Y.mix(Y.EventFacade.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12510
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12511
     * Stops the propagation to the next bubble target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12512
     * @method stopPropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12513
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12514
    stopPropagation: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12515
        this._event.stopPropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12516
        this.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12517
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12519
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12520
     * Stops the propagation to the next bubble target and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12521
     * prevents any additional listeners from being exectued
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12522
     * on the current target.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12523
     * @method stopImmediatePropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12524
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12525
    stopImmediatePropagation: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12526
        this._event.stopImmediatePropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12527
        this.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12528
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12530
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12531
     * Prevents the event's default behavior
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12532
     * @method preventDefault
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12533
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12534
    preventDefault: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12535
        this._event.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12536
        this.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12537
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12539
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12540
     * Stops the event propagation and prevents the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12541
     * event behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12542
     * @method halt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12543
     * @param immediate {boolean} if true additional listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12544
     * on the current target will not be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12545
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12546
    halt: function(immediate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12547
        this._event.halt(immediate);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12548
        this.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12549
        this.stopped = (immediate) ? 2 : 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12550
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12551
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12552
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12553
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12554
CEProto.fireComplex = function(args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12556
    var es,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12557
        ef,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12558
        q,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12559
        queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12560
        ce,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12561
        ret = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12562
        events,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12563
        subs,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12564
        ons,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12565
        afters,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12566
        afterQueue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12567
        postponed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12568
        prevented,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12569
        preventedFn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12570
        defaultFn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12571
        self = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12572
        host = self.host || self,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12573
        next,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12574
        oldbubble,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12575
        stack,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12576
        yuievt = host._yuievt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12577
        hasPotentialSubscribers;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12579
    stack = self.stack;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12581
    if (stack) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12582
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12583
        // queue this event if the current item in the queue bubbles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12584
        if (self.queuable && self.type !== stack.next.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12585
            self.log('queue ' + self.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12587
            if (!stack.queue) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12588
                stack.queue = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12589
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12590
            stack.queue.push([self, args]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12592
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12593
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12594
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12596
    hasPotentialSubscribers = self.hasSubs() || yuievt.hasTargets || self.broadcast;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12598
    self.target = self.target || host;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12599
    self.currentTarget = host;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12601
    self.details = args.concat();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12603
    if (hasPotentialSubscribers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12605
        es = stack || {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12607
           id: self.id, // id of the first event in the stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12608
           next: self,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12609
           silent: self.silent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12610
           stopped: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12611
           prevented: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12612
           bubbling: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12613
           type: self.type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12614
           // defaultFnQueue: new Y.Queue(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12615
           defaultTargetOnly: self.defaultTargetOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12617
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12619
        subs = self.getSubs();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12620
        ons = subs[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12621
        afters = subs[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12622
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12623
        self.stopped = (self.type !== es.type) ? 0 : es.stopped;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12624
        self.prevented = (self.type !== es.type) ? 0 : es.prevented;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12625
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12626
        if (self.stoppedFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12627
            // PERF TODO: Can we replace with callback, like preventedFn. Look into history
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12628
            events = new Y.EventTarget({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12629
                fireOnce: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12630
                context: host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12631
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12632
            self.events = events;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12633
            events.on('stopped', self.stoppedFn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12634
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12636
        // self.log("Firing " + self  + ", " + "args: " + args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12637
        self.log("Firing " + self.type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12639
        self._facade = null; // kill facade to eliminate stale properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12641
        ef = self._getFacade(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12643
        if (ons) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12644
            self._procSubs(ons, args, ef);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12645
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12647
        // bubble if this is hosted in an event target and propagation has not been stopped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12648
        if (self.bubbles && host.bubble && !self.stopped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12649
            oldbubble = es.bubbling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12651
            es.bubbling = self.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12653
            if (es.type !== self.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12654
                es.stopped = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12655
                es.prevented = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12656
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12658
            ret = host.bubble(self, args, null, es);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12660
            self.stopped = Math.max(self.stopped, es.stopped);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12661
            self.prevented = Math.max(self.prevented, es.prevented);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12663
            es.bubbling = oldbubble;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12664
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12665
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12666
        prevented = self.prevented;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12668
        if (prevented) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12669
            preventedFn = self.preventedFn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12670
            if (preventedFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12671
                preventedFn.apply(host, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12672
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12673
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12674
            defaultFn = self.defaultFn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12676
            if (defaultFn && ((!self.defaultTargetOnly && !es.defaultTargetOnly) || host === ef.target)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12677
                defaultFn.apply(host, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12678
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12679
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12681
        // broadcast listeners are fired as discreet events on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12682
        // YUI instance and potentially the YUI global.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12683
        if (self.broadcast) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12684
            self._broadcast(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12685
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12686
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12687
        if (afters && !self.prevented && self.stopped < 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12689
            // Queue the after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12690
            afterQueue = es.afterQueue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12692
            if (es.id === self.id || self.type !== yuievt.bubbling) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12694
                self._procSubs(afters, args, ef);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12695
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12696
                if (afterQueue) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12697
                    while ((next = afterQueue.last())) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12698
                        next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12699
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12700
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12701
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12702
                postponed = afters;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12704
                if (es.execDefaultCnt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12705
                    postponed = Y.merge(postponed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12707
                    Y.each(postponed, function(s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12708
                        s.postponed = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12709
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12710
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12711
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12712
                if (!afterQueue) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12713
                    es.afterQueue = new Y.Queue();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12714
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12715
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12716
                es.afterQueue.add(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12717
                    self._procSubs(postponed, args, ef);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12718
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12719
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12721
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12722
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12723
        self.target = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12724
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12725
        if (es.id === self.id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12726
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12727
            queue = es.queue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12728
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12729
            if (queue) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12730
                while (queue.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12731
                    q = queue.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12732
                    ce = q[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12733
                    // set up stack to allow the next item to be processed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12734
                    es.next = ce;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12735
                    ce._fire(q[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12736
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12737
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12738
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12739
            self.stack = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12740
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12742
        ret = !(self.stopped);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12744
        if (self.type !== yuievt.bubbling) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12745
            es.stopped = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12746
            es.prevented = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12747
            self.stopped = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12748
            self.prevented = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12749
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12751
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12752
        defaultFn = self.defaultFn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12754
        if(defaultFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12755
            ef = self._getFacade(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12757
            if ((!self.defaultTargetOnly) || (host === ef.target)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12758
                defaultFn.apply(host, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12759
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12760
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12761
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12763
    // Kill the cached facade to free up memory.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12764
    // Otherwise we have the facade from the last fire, sitting around forever.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12765
    self._facade = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12766
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12767
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12768
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12770
CEProto._getFacade = function(fireArgs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12772
    var userArgs = this.details,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12773
        firstArg = userArgs && userArgs[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12774
        firstArgIsObj = (firstArg && (typeof firstArg === "object")),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12775
        ef = this._facade;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12776
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12777
    if (!ef) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12778
        ef = new Y.EventFacade(this, this.currentTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12779
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12781
    if (firstArgIsObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12782
        // protect the event facade properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12783
        mixFacadeProps(ef, firstArg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12785
        // Allow the event type to be faked http://yuilibrary.com/projects/yui3/ticket/2528376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12786
        if (firstArg.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12787
            ef.type = firstArg.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12788
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12789
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12790
        if (fireArgs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12791
            fireArgs[0] = ef;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12792
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12793
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12794
        if (fireArgs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12795
            fireArgs.unshift(ef);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12796
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12797
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12799
    // update the details field with the arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12800
    ef.details = this.details;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12802
    // use the original target when the event bubbled to this target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12803
    ef.target = this.originalTarget || this.target;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12804
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12805
    ef.currentTarget = this.currentTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12806
    ef.stopped = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12807
    ef.prevented = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12809
    this._facade = ef;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12810
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12811
    return this._facade;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12812
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12814
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12815
 * Stop propagation to bubble targets
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12816
 * @for CustomEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12817
 * @method stopPropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12818
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12819
CEProto.stopPropagation = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12820
    this.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12821
    if (this.stack) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12822
        this.stack.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12823
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12824
    if (this.events) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12825
        this.events.fire('stopped', this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12826
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12827
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12829
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12830
 * Stops propagation to bubble targets, and prevents any remaining
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12831
 * subscribers on the current target from executing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12832
 * @method stopImmediatePropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12833
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12834
CEProto.stopImmediatePropagation = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12835
    this.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12836
    if (this.stack) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12837
        this.stack.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12838
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12839
    if (this.events) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12840
        this.events.fire('stopped', this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12841
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12842
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12843
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12844
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12845
 * Prevents the execution of this event's defaultFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12846
 * @method preventDefault
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12847
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12848
CEProto.preventDefault = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12849
    if (this.preventable) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12850
        this.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12851
        if (this.stack) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12852
            this.stack.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12853
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12854
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12855
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12857
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12858
 * Stops the event propagation and prevents the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12859
 * event behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12860
 * @method halt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12861
 * @param immediate {boolean} if true additional listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12862
 * on the current target will not be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12863
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12864
CEProto.halt = function(immediate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12865
    if (immediate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12866
        this.stopImmediatePropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12867
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12868
        this.stopPropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12869
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12870
    this.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12871
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12873
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12874
 * Registers another EventTarget as a bubble target.  Bubble order
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12875
 * is determined by the order registered.  Multiple targets can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12876
 * be specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12877
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12878
 * Events can only bubble if emitFacade is true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12879
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12880
 * Included in the event-custom-complex submodule.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12881
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12882
 * @method addTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12883
 * @param o {EventTarget} the target to add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12884
 * @for EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12885
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12886
ETProto.addTarget = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12887
    var etState = this._yuievt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12888
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12889
    if (!etState.targets) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12890
        etState.targets = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12891
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12892
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12893
    etState.targets[Y.stamp(o)] = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12894
    etState.hasTargets = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12895
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12897
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12898
 * Returns an array of bubble targets for this object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12899
 * @method getTargets
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12900
 * @return EventTarget[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12901
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12902
ETProto.getTargets = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12903
    var targets = this._yuievt.targets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12904
    return targets ? YObject.values(targets) : [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12905
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12907
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12908
 * Removes a bubble target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12909
 * @method removeTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12910
 * @param o {EventTarget} the target to remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12911
 * @for EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12912
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12913
ETProto.removeTarget = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12914
    var targets = this._yuievt.targets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12916
    if (targets) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12917
        delete targets[Y.stamp(o, true)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12918
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12919
        if (YObject.size(targets) === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12920
            this._yuievt.hasTargets = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12921
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12922
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12923
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12925
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12926
 * Propagate an event.  Requires the event-custom-complex module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12927
 * @method bubble
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12928
 * @param evt {CustomEvent} the custom event to propagate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12929
 * @return {boolean} the aggregated return value from Event.Custom.fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12930
 * @for EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12931
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12932
ETProto.bubble = function(evt, args, target, es) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12934
    var targs = this._yuievt.targets,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12935
        ret = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12936
        t,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12937
        ce,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12938
        i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12939
        bc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12940
        ce2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12941
        type = evt && evt.type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12942
        originalTarget = target || (evt && evt.target) || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12943
        oldbubble;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12944
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12945
    if (!evt || ((!evt.stopped) && targs)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12947
        for (i in targs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12948
            if (targs.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12949
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12950
                t = targs[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12952
                ce = t._yuievt.events[type];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12953
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12954
                if (t._hasSiblings) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12955
                    ce2 = t.getSibling(type, ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12956
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12958
                if (ce2 && !ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12959
                    ce = t.publish(type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12960
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12962
                oldbubble = t._yuievt.bubbling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12963
                t._yuievt.bubbling = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12964
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12965
                // if this event was not published on the bubble target,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12966
                // continue propagating the event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12967
                if (!ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12968
                    if (t._yuievt.hasTargets) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12969
                        t.bubble(evt, args, originalTarget, es);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12970
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12971
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12972
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12973
                    if (ce2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12974
                        ce.sibling = ce2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12975
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12976
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12977
                    // set the original target to that the target payload on the facade is correct.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12978
                    ce.target = originalTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12979
                    ce.originalTarget = originalTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12980
                    ce.currentTarget = t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12981
                    bc = ce.broadcast;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12982
                    ce.broadcast = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12984
                    // default publish may not have emitFacade true -- that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12985
                    // shouldn't be what the implementer meant to do
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12986
                    ce.emitFacade = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12987
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12988
                    ce.stack = es;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12990
                    // TODO: See what's getting in the way of changing this to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12991
                    // the more performant ce._fire(args || evt.details || []).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12992
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12993
                    // Something in Widget Parent/Child tests is not happy if we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12994
                    // change it - maybe evt.details related?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12995
                    ret = ret && ce.fire.apply(ce, args || evt.details || []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12997
                    ce.broadcast = bc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12998
                    ce.originalTarget = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 12999
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13000
                    // stopPropagation() was called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13001
                    if (ce.stopped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13002
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13003
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13004
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13006
                t._yuievt.bubbling = oldbubble;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13007
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13008
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13009
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13011
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13012
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13013
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13014
FACADE = new Y.EventFacade();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13015
FACADE_KEYS = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13016
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13017
// Flatten whitelist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13018
for (key in FACADE) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13019
    FACADE_KEYS[key] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13020
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13021
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13022
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13023
}, '@VERSION@', {"requires": ["event-custom-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13024
YUI.add('node-core', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13025
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13026
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13027
 * The Node Utility provides a DOM-like interface for interacting with DOM nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13028
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13029
 * @main node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13030
 * @submodule node-core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13031
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13033
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13034
 * The Node class provides a wrapper for manipulating DOM Nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13035
 * Node properties can be accessed via the set/get methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13036
 * Use `Y.one()` to retrieve Node instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13037
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13038
 * <strong>NOTE:</strong> Node properties are accessed using
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13039
 * the <code>set</code> and <code>get</code> methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13040
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13041
 * @class Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13042
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13043
 * @param {DOMNode} node the DOM node to be mapped to the Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13044
 * @uses EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13045
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13047
// "globals"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13048
var DOT = '.',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13049
    NODE_NAME = 'nodeName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13050
    NODE_TYPE = 'nodeType',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13051
    OWNER_DOCUMENT = 'ownerDocument',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13052
    TAG_NAME = 'tagName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13053
    UID = '_yuid',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13054
    EMPTY_OBJ = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13055
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13056
    _slice = Array.prototype.slice,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13057
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13058
    Y_DOM = Y.DOM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13059
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13060
    Y_Node = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13061
        if (!this.getDOMNode) { // support optional "new"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13062
            return new Y_Node(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13063
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13064
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13065
        if (typeof node == 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13066
            node = Y_Node._fromString(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13067
            if (!node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13068
                return null; // NOTE: return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13069
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13070
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13071
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13072
        var uid = (node.nodeType !== 9) ? node.uniqueID : node[UID];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13073
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13074
        if (uid && Y_Node._instances[uid] && Y_Node._instances[uid]._node !== node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13075
            node[UID] = null; // unset existing uid to prevent collision (via clone or hack)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13076
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13077
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13078
        uid = uid || Y.stamp(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13079
        if (!uid) { // stamp failed; likely IE non-HTMLElement
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13080
            uid = Y.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13081
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13082
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13083
        this[UID] = uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13085
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13086
         * The underlying DOM node bound to the Y.Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13087
         * @property _node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13088
         * @type DOMNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13089
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13090
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13091
        this._node = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13092
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13093
        this._stateProxy = node; // when augmented with Attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13094
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13095
        if (this._initPlugins) { // when augmented with Plugin.Host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13096
            this._initPlugins();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13097
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13098
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13100
    // used with previous/next/ancestor tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13101
    _wrapFn = function(fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13102
        var ret = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13103
        if (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13104
            ret = (typeof fn == 'string') ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13105
            function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13106
                return Y.Selector.test(n, fn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13107
            } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13108
            function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13109
                return fn(Y.one(n));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13110
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13111
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13113
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13114
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13115
// end "globals"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13117
Y_Node.ATTRS = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13118
Y_Node.DOM_EVENTS = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13120
Y_Node._fromString = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13121
    if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13122
        if (node.indexOf('doc') === 0) { // doc OR document
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13123
            node = Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13124
        } else if (node.indexOf('win') === 0) { // win OR window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13125
            node = Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13126
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13127
            node = Y.Selector.query(node, null, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13128
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13129
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13131
    return node || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13132
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13134
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13135
 * The name of the component
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13136
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13137
 * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13138
 * @property NAME
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13139
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13140
Y_Node.NAME = 'node';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13142
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13143
 * The pattern used to identify ARIA attributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13144
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13145
Y_Node.re_aria = /^(?:role$|aria-)/;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13147
Y_Node.SHOW_TRANSITION = 'fadeIn';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13148
Y_Node.HIDE_TRANSITION = 'fadeOut';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13150
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13151
 * A list of Node instances that have been created
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13152
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13153
 * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13154
 * @property _instances
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13155
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13156
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13157
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13158
Y_Node._instances = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13160
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13161
 * Retrieves the DOM node bound to a Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13162
 * @method getDOMNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13163
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13164
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13165
 * @param {Node | HTMLNode} node The Node instance or an HTMLNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13166
 * @return {HTMLNode} The DOM node bound to the Node instance.  If a DOM node is passed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13167
 * as the node argument, it is simply returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13168
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13169
Y_Node.getDOMNode = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13170
    if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13171
        return (node.nodeType) ? node : node._node || null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13172
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13173
    return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13174
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13176
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13177
 * Checks Node return values and wraps DOM Nodes as Y.Node instances
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13178
 * and DOM Collections / Arrays as Y.NodeList instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13179
 * Other return values just pass thru.  If undefined is returned (e.g. no return)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13180
 * then the Node instance is returned for chainability.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13181
 * @method scrubVal
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13182
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13183
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13184
 * @param {any} node The Node instance or an HTMLNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13185
 * @return {Node | NodeList | Any} Depends on what is returned from the DOM node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13186
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13187
Y_Node.scrubVal = function(val, node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13188
    if (val) { // only truthy values are risky
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13189
         if (typeof val == 'object' || typeof val == 'function') { // safari nodeList === function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13190
            if (NODE_TYPE in val || Y_DOM.isWindow(val)) {// node || window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13191
                val = Y.one(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13192
            } else if ((val.item && !val._nodes) || // dom collection or Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13193
                    (val[0] && val[0][NODE_TYPE])) { // array of DOM Nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13194
                val = Y.all(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13195
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13196
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13197
    } else if (typeof val === 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13198
        val = node; // for chaining
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13199
    } else if (val === null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13200
        val = null; // IE: DOM null not the same as null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13201
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13203
    return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13204
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13206
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13207
 * Adds methods to the Y.Node prototype, routing through scrubVal.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13208
 * @method addMethod
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13209
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13210
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13211
 * @param {String} name The name of the method to add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13212
 * @param {Function} fn The function that becomes the method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13213
 * @param {Object} context An optional context to call the method with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13214
 * (defaults to the Node instance)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13215
 * @return {any} Depends on what is returned from the DOM node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13216
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13217
Y_Node.addMethod = function(name, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13218
    if (name && fn && typeof fn == 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13219
        Y_Node.prototype[name] = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13220
            var args = _slice.call(arguments),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13221
                node = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13222
                ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13224
            if (args[0] && args[0]._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13225
                args[0] = args[0]._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13226
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13228
            if (args[1] && args[1]._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13229
                args[1] = args[1]._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13230
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13231
            args.unshift(node._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13233
            ret = fn.apply(node, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13235
            if (ret) { // scrub truthy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13236
                ret = Y_Node.scrubVal(ret, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13237
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13239
            (typeof ret != 'undefined') || (ret = node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13240
            return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13241
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13242
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13243
        Y.log('unable to add method: ' + name, 'warn', 'Node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13244
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13245
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13246
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13247
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13248
 * Imports utility methods to be added as Y.Node methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13249
 * @method importMethod
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13250
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13251
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13252
 * @param {Object} host The object that contains the method to import.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13253
 * @param {String} name The name of the method to import
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13254
 * @param {String} altName An optional name to use in place of the host name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13255
 * @param {Object} context An optional context to call the method with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13256
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13257
Y_Node.importMethod = function(host, name, altName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13258
    if (typeof name == 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13259
        altName = altName || name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13260
        Y_Node.addMethod(altName, host[name], host);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13261
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13262
        Y.Array.each(name, function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13263
            Y_Node.importMethod(host, n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13264
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13265
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13266
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13268
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13269
 * Retrieves a NodeList based on the given CSS selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13270
 * @method all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13271
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13272
 * @param {string} selector The CSS selector to test against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13273
 * @return {NodeList} A NodeList instance for the matching HTMLCollection/Array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13274
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13275
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13277
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13278
 * Returns a single Node instance bound to the node or the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13279
 * first element matching the given selector. Returns null if no match found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13280
 * <strong>Note:</strong> For chaining purposes you may want to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13281
 * use <code>Y.all</code>, which returns a NodeList when no match is found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13282
 * @method one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13283
 * @param {String | HTMLElement} node a node or Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13284
 * @return {Node | null} a Node instance or null if no match found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13285
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13286
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13288
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13289
 * Returns a single Node instance bound to the node or the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13290
 * first element matching the given selector. Returns null if no match found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13291
 * <strong>Note:</strong> For chaining purposes you may want to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13292
 * use <code>Y.all</code>, which returns a NodeList when no match is found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13293
 * @method one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13294
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13295
 * @param {String | HTMLElement} node a node or Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13296
 * @return {Node | null} a Node instance or null if no match found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13297
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13298
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13299
Y_Node.one = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13300
    var instance = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13301
        cachedNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13302
        uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13304
    if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13305
        if (typeof node == 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13306
            node = Y_Node._fromString(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13307
            if (!node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13308
                return null; // NOTE: return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13309
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13310
        } else if (node.getDOMNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13311
            return node; // NOTE: return
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13312
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13314
        if (node.nodeType || Y.DOM.isWindow(node)) { // avoid bad input (numbers, boolean, etc)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13315
            uid = (node.uniqueID && node.nodeType !== 9) ? node.uniqueID : node._yuid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13316
            instance = Y_Node._instances[uid]; // reuse exising instances
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13317
            cachedNode = instance ? instance._node : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13318
            if (!instance || (cachedNode && node !== cachedNode)) { // new Node when nodes don't match
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13319
                instance = new Y_Node(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13320
                if (node.nodeType != 11) { // dont cache document fragment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13321
                    Y_Node._instances[instance[UID]] = instance; // cache node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13322
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13323
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13324
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13325
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13327
    return instance;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13328
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13329
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13330
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13331
 * The default setter for DOM properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13332
 * Called with instance context (this === the Node instance)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13333
 * @method DEFAULT_SETTER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13334
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13335
 * @param {String} name The attribute/property being set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13336
 * @param {any} val The value to be set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13337
 * @return {any} The value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13338
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13339
Y_Node.DEFAULT_SETTER = function(name, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13340
    var node = this._stateProxy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13341
        strPath;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13342
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13343
    if (name.indexOf(DOT) > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13344
        strPath = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13345
        name = name.split(DOT);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13346
        // only allow when defined on node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13347
        Y.Object.setValue(node, name, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13348
    } else if (typeof node[name] != 'undefined') { // pass thru DOM properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13349
        node[name] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13350
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13352
    return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13353
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13355
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13356
 * The default getter for DOM properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13357
 * Called with instance context (this === the Node instance)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13358
 * @method DEFAULT_GETTER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13359
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13360
 * @param {String} name The attribute/property to look up
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13361
 * @return {any} The current value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13362
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13363
Y_Node.DEFAULT_GETTER = function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13364
    var node = this._stateProxy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13365
        val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13366
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13367
    if (name.indexOf && name.indexOf(DOT) > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13368
        val = Y.Object.getValue(node, name.split(DOT));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13369
    } else if (typeof node[name] != 'undefined') { // pass thru from DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13370
        val = node[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13371
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13373
    return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13374
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13376
Y.mix(Y_Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13377
    DATA_PREFIX: 'data-',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13379
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13380
     * The method called when outputting Node instances as strings
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13381
     * @method toString
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13382
     * @return {String} A string representation of the Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13383
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13384
    toString: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13385
        var str = this[UID] + ': not bound to a node',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13386
            node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13387
            attrs, id, className;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13389
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13390
            attrs = node.attributes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13391
            id = (attrs && attrs.id) ? node.getAttribute('id') : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13392
            className = (attrs && attrs.className) ? node.getAttribute('className') : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13393
            str = node[NODE_NAME];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13395
            if (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13396
                str += '#' + id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13397
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13399
            if (className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13400
                str += '.' + className.replace(' ', '.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13401
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13403
            // TODO: add yuid?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13404
            str += ' ' + this[UID];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13405
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13406
        return str;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13407
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13409
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13410
     * Returns an attribute value on the Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13411
     * Unless pre-configured (via `Node.ATTRS`), get hands
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13412
     * off to the underlying DOM node.  Only valid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13413
     * attributes/properties for the node will be queried.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13414
     * @method get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13415
     * @param {String} attr The attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13416
     * @return {any} The current value of the attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13417
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13418
    get: function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13419
        var val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13421
        if (this._getAttr) { // use Attribute imple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13422
            val = this._getAttr(attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13423
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13424
            val = this._get(attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13425
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13427
        if (val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13428
            val = Y_Node.scrubVal(val, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13429
        } else if (val === null) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13430
            val = null; // IE: DOM null is not true null (even though they ===)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13431
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13432
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13433
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13435
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13436
     * Helper method for get.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13437
     * @method _get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13438
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13439
     * @param {String} attr The attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13440
     * @return {any} The current value of the attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13441
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13442
    _get: function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13443
        var attrConfig = Y_Node.ATTRS[attr],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13444
            val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13446
        if (attrConfig && attrConfig.getter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13447
            val = attrConfig.getter.call(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13448
        } else if (Y_Node.re_aria.test(attr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13449
            val = this._node.getAttribute(attr, 2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13450
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13451
            val = Y_Node.DEFAULT_GETTER.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13452
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13454
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13455
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13456
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13457
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13458
     * Sets an attribute on the Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13459
     * Unless pre-configured (via Node.ATTRS), set hands
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13460
     * off to the underlying DOM node.  Only valid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13461
     * attributes/properties for the node will be set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13462
     * To set custom attributes use setAttribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13463
     * @method set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13464
     * @param {String} attr The attribute to be set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13465
     * @param {any} val The value to set the attribute to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13466
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13467
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13468
    set: function(attr, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13469
        var attrConfig = Y_Node.ATTRS[attr];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13471
        if (this._setAttr) { // use Attribute imple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13472
            this._setAttr.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13473
        } else { // use setters inline
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13474
            if (attrConfig && attrConfig.setter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13475
                attrConfig.setter.call(this, val, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13476
            } else if (Y_Node.re_aria.test(attr)) { // special case Aria
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13477
                this._node.setAttribute(attr, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13478
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13479
                Y_Node.DEFAULT_SETTER.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13480
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13481
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13483
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13484
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13486
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13487
     * Sets multiple attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13488
     * @method setAttrs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13489
     * @param {Object} attrMap an object of name/value pairs to set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13490
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13491
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13492
    setAttrs: function(attrMap) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13493
        if (this._setAttrs) { // use Attribute imple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13494
            this._setAttrs(attrMap);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13495
        } else { // use setters inline
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13496
            Y.Object.each(attrMap, function(v, n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13497
                this.set(n, v);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13498
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13499
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13501
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13502
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13504
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13505
     * Returns an object containing the values for the requested attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13506
     * @method getAttrs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13507
     * @param {Array} attrs an array of attributes to get values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13508
     * @return {Object} An object with attribute name/value pairs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13509
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13510
    getAttrs: function(attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13511
        var ret = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13512
        if (this._getAttrs) { // use Attribute imple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13513
            this._getAttrs(attrs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13514
        } else { // use setters inline
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13515
            Y.Array.each(attrs, function(v, n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13516
                ret[v] = this.get(v);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13517
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13518
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13520
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13521
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13523
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13524
     * Compares nodes to determine if they match.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13525
     * Node instances can be compared to each other and/or HTMLElements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13526
     * @method compareTo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13527
     * @param {HTMLElement | Node} refNode The reference node to compare to the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13528
     * @return {Boolean} True if the nodes match, false if they do not.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13529
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13530
    compareTo: function(refNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13531
        var node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13532
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13533
        if (refNode && refNode._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13534
            refNode = refNode._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13535
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13536
        return node === refNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13537
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13539
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13540
     * Determines whether the node is appended to the document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13541
     * @method inDoc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13542
     * @param {Node|HTMLElement} doc optional An optional document to check against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13543
     * Defaults to current document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13544
     * @return {Boolean} Whether or not this node is appended to the document.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13545
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13546
    inDoc: function(doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13547
        var node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13548
        doc = (doc) ? doc._node || doc : node[OWNER_DOCUMENT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13549
        if (doc.documentElement) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13550
            return Y_DOM.contains(doc.documentElement, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13551
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13552
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13553
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13554
    getById: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13555
        var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13556
            ret = Y_DOM.byId(id, node[OWNER_DOCUMENT]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13557
        if (ret && Y_DOM.contains(node, ret)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13558
            ret = Y.one(ret);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13559
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13560
            ret = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13561
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13562
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13563
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13565
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13566
     * Returns the nearest ancestor that passes the test applied by supplied boolean method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13567
     * @method ancestor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13568
     * @param {String | Function} fn A selector string or boolean method for testing elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13569
     * If a function is used, it receives the current node being tested as the only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13570
     * If fn is not passed as an argument, the parent node will be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13571
     * @param {Boolean} testSelf optional Whether or not to include the element in the scan
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13572
     * @param {String | Function} stopFn optional A selector string or boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13573
     * method to indicate when the search should stop. The search bails when the function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13574
     * returns true or the selector matches.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13575
     * If a function is used, it receives the current node being tested as the only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13576
     * @return {Node} The matching Node instance or null if not found
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13577
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13578
    ancestor: function(fn, testSelf, stopFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13579
        // testSelf is optional, check for stopFn as 2nd arg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13580
        if (arguments.length === 2 &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13581
                (typeof testSelf == 'string' || typeof testSelf == 'function')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13582
            stopFn = testSelf;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13583
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13585
        return Y.one(Y_DOM.ancestor(this._node, _wrapFn(fn), testSelf, _wrapFn(stopFn)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13586
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13588
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13589
     * Returns the ancestors that pass the test applied by supplied boolean method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13590
     * @method ancestors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13591
     * @param {String | Function} fn A selector string or boolean method for testing elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13592
     * @param {Boolean} testSelf optional Whether or not to include the element in the scan
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13593
     * If a function is used, it receives the current node being tested as the only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13594
     * @return {NodeList} A NodeList instance containing the matching elements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13595
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13596
    ancestors: function(fn, testSelf, stopFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13597
        if (arguments.length === 2 &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13598
                (typeof testSelf == 'string' || typeof testSelf == 'function')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13599
            stopFn = testSelf;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13600
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13601
        return Y.all(Y_DOM.ancestors(this._node, _wrapFn(fn), testSelf, _wrapFn(stopFn)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13602
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13604
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13605
     * Returns the previous matching sibling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13606
     * Returns the nearest element node sibling if no method provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13607
     * @method previous
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13608
     * @param {String | Function} fn A selector or boolean method for testing elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13609
     * If a function is used, it receives the current node being tested as the only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13610
     * @return {Node} Node instance or null if not found
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13611
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13612
    previous: function(fn, all) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13613
        return Y.one(Y_DOM.elementByAxis(this._node, 'previousSibling', _wrapFn(fn), all));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13614
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13615
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13616
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13617
     * Returns the next matching sibling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13618
     * Returns the nearest element node sibling if no method provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13619
     * @method next
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13620
     * @param {String | Function} fn A selector or boolean method for testing elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13621
     * If a function is used, it receives the current node being tested as the only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13622
     * @return {Node} Node instance or null if not found
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13623
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13624
    next: function(fn, all) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13625
        return Y.one(Y_DOM.elementByAxis(this._node, 'nextSibling', _wrapFn(fn), all));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13626
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13627
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13628
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13629
     * Returns all matching siblings.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13630
     * Returns all siblings if no method provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13631
     * @method siblings
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13632
     * @param {String | Function} fn A selector or boolean method for testing elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13633
     * If a function is used, it receives the current node being tested as the only argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13634
     * @return {NodeList} NodeList instance bound to found siblings
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13635
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13636
    siblings: function(fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13637
        return Y.all(Y_DOM.siblings(this._node, _wrapFn(fn)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13638
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13639
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13640
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13641
     * Retrieves a single Node instance, the first element matching the given 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13642
     * CSS selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13643
     * Returns null if no match found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13644
     * @method one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13645
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13646
     * @param {string} selector The CSS selector to test against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13647
     * @return {Node | null} A Node instance for the matching HTMLElement or null 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13648
     * if no match found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13649
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13650
    one: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13651
        return Y.one(Y.Selector.query(selector, this._node, true));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13652
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13654
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13655
     * Retrieves a NodeList based on the given CSS selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13656
     * @method all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13657
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13658
     * @param {string} selector The CSS selector to test against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13659
     * @return {NodeList} A NodeList instance for the matching HTMLCollection/Array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13660
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13661
    all: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13662
        var nodelist;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13663
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13664
        if (this._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13665
            nodelist = Y.all(Y.Selector.query(selector, this._node));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13666
            nodelist._query = selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13667
            nodelist._queryRoot = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13668
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13670
        return nodelist || Y.all([]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13671
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13672
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13673
    // TODO: allow fn test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13674
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13675
     * Test if the supplied node matches the supplied selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13676
     * @method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13677
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13678
     * @param {string} selector The CSS selector to test against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13679
     * @return {boolean} Whether or not the node matches the selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13680
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13681
    test: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13682
        return Y.Selector.test(this._node, selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13683
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13684
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13685
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13686
     * Removes the node from its parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13687
     * Shortcut for myNode.get('parentNode').removeChild(myNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13688
     * @method remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13689
     * @param {Boolean} destroy whether or not to call destroy() on the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13690
     * after removal.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13691
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13692
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13693
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13694
    remove: function(destroy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13695
        var node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13697
        if (node && node.parentNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13698
            node.parentNode.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13699
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13701
        if (destroy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13702
            this.destroy();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13703
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13705
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13706
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13708
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13709
     * Replace the node with the other node. This is a DOM update only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13710
     * and does not change the node bound to the Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13711
     * Shortcut for myNode.get('parentNode').replaceChild(newNode, myNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13712
     * @method replace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13713
     * @param {Node | HTMLNode} newNode Node to be inserted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13714
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13715
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13716
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13717
    replace: function(newNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13718
        var node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13719
        if (typeof newNode == 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13720
            newNode = Y_Node.create(newNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13721
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13722
        node.parentNode.replaceChild(Y_Node.getDOMNode(newNode), node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13723
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13724
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13726
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13727
     * @method replaceChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13728
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13729
     * @param {String | HTMLElement | Node} node Node to be inserted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13730
     * @param {HTMLElement | Node} refNode Node to be replaced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13731
     * @return {Node} The replaced node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13732
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13733
    replaceChild: function(node, refNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13734
        if (typeof node == 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13735
            node = Y_DOM.create(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13736
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13737
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13738
        return Y.one(this._node.replaceChild(Y_Node.getDOMNode(node), Y_Node.getDOMNode(refNode)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13739
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13740
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13741
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13742
     * Nulls internal node references, removes any plugins and event listeners.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13743
     * Note that destroy() will not remove the node from its parent or from the DOM. For that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13744
     * functionality, call remove(true).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13745
     * @method destroy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13746
     * @param {Boolean} recursivePurge (optional) Whether or not to remove listeners from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13747
     * node's subtree (default is false)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13748
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13749
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13750
    destroy: function(recursive) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13751
        var UID = Y.config.doc.uniqueID ? 'uniqueID' : '_yuid',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13752
            instance;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13754
        this.purge(); // TODO: only remove events add via this Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13756
        if (this.unplug) { // may not be a PluginHost
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13757
            this.unplug();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13758
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13760
        this.clearData();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13761
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13762
        if (recursive) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13763
            Y.NodeList.each(this.all('*'), function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13764
                instance = Y_Node._instances[node[UID]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13765
                if (instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13766
                   instance.destroy();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13767
                } else { // purge in case added by other means
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13768
                    Y.Event.purgeElement(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13769
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13770
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13771
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13772
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13773
        this._node = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13774
        this._stateProxy = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13776
        delete Y_Node._instances[this._yuid];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13777
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13779
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13780
     * Invokes a method on the Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13781
     * @method invoke
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13782
     * @param {String} method The name of the method to invoke
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13783
     * @param {Any}  a, b, c, etc. Arguments to invoke the method with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13784
     * @return Whatever the underly method returns.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13785
     * DOM Nodes and Collections return values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13786
     * are converted to Node/NodeList instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13787
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13788
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13789
    invoke: function(method, a, b, c, d, e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13790
        var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13791
            ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13793
        if (a && a._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13794
            a = a._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13795
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13797
        if (b && b._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13798
            b = b._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13799
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13801
        ret = node[method](a, b, c, d, e);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13802
        return Y_Node.scrubVal(ret, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13803
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13804
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13805
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13806
    * @method swap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13807
    * @description Swap DOM locations with the given node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13808
    * This does not change which DOM node each Node instance refers to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13809
    * @param {Node} otherNode The node to swap with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13810
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13811
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13812
    swap: Y.config.doc.documentElement.swapNode ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13813
        function(otherNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13814
            this._node.swapNode(Y_Node.getDOMNode(otherNode));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13815
        } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13816
        function(otherNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13817
            otherNode = Y_Node.getDOMNode(otherNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13818
            var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13819
                parent = otherNode.parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13820
                nextSibling = otherNode.nextSibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13822
            if (nextSibling === node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13823
                parent.insertBefore(node, otherNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13824
            } else if (otherNode === node.nextSibling) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13825
                parent.insertBefore(otherNode, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13826
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13827
                node.parentNode.replaceChild(otherNode, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13828
                Y_DOM.addHTML(parent, node, nextSibling);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13829
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13830
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13831
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13833
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13834
    hasMethod: function(method) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13835
        var node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13836
        return !!(node && method in node &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13837
                typeof node[method] != 'unknown' &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13838
            (typeof node[method] == 'function' ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13839
                String(node[method]).indexOf('function') === 1)); // IE reports as object, prepends space
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13840
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13841
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13842
    isFragment: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13843
        return (this.get('nodeType') === 11);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13844
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13846
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13847
     * Removes and destroys all of the nodes within the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13848
     * @method empty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13849
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13850
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13851
    empty: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13852
        this.get('childNodes').remove().destroy(true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13853
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13854
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13856
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13857
     * Returns the DOM node bound to the Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13858
     * @method getDOMNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13859
     * @return {DOMNode}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13860
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13861
    getDOMNode: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13862
        return this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13863
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13864
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13866
Y.Node = Y_Node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13867
Y.one = Y_Node.one;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13868
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13869
 * The NodeList module provides support for managing collections of Nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13870
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13871
 * @submodule node-core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13872
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13873
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13874
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13875
 * The NodeList class provides a wrapper for manipulating DOM NodeLists.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13876
 * NodeList properties can be accessed via the set/get methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13877
 * Use Y.all() to retrieve NodeList instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13878
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13879
 * @class NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13880
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13881
 * @param nodes {String|element|Node|Array} A selector, DOM element, Node, list of DOM elements, or list of Nodes with which to populate this NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13882
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13884
var NodeList = function(nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13885
    var tmp = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13887
    if (nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13888
        if (typeof nodes === 'string') { // selector query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13889
            this._query = nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13890
            nodes = Y.Selector.query(nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13891
        } else if (nodes.nodeType || Y_DOM.isWindow(nodes)) { // domNode || window
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13892
            nodes = [nodes];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13893
        } else if (nodes._node) { // Y.Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13894
            nodes = [nodes._node];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13895
        } else if (nodes[0] && nodes[0]._node) { // allow array of Y.Nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13896
            Y.Array.each(nodes, function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13897
                if (node._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13898
                    tmp.push(node._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13899
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13900
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13901
            nodes = tmp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13902
        } else { // array of domNodes or domNodeList (no mixed array of Y.Node/domNodes)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13903
            nodes = Y.Array(nodes, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13904
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13905
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13907
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13908
     * The underlying array of DOM nodes bound to the Y.NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13909
     * @property _nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13910
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13911
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13912
    this._nodes = nodes || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13913
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13914
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13915
NodeList.NAME = 'NodeList';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13916
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13917
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13918
 * Retrieves the DOM nodes bound to a NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13919
 * @method getDOMNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13920
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13921
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13922
 * @param {NodeList} nodelist The NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13923
 * @return {Array} The array of DOM nodes bound to the NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13924
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13925
NodeList.getDOMNodes = function(nodelist) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13926
    return (nodelist && nodelist._nodes) ? nodelist._nodes : nodelist;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13927
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13929
NodeList.each = function(instance, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13930
    var nodes = instance._nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13931
    if (nodes && nodes.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13932
        Y.Array.each(nodes, fn, context || instance);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13933
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13934
        Y.log('no nodes bound to ' + this, 'warn', 'NodeList');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13935
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13936
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13938
NodeList.addMethod = function(name, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13939
    if (name && fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13940
        NodeList.prototype[name] = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13941
            var ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13942
                args = arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13944
            Y.Array.each(this._nodes, function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13945
                var UID = (node.uniqueID && node.nodeType !== 9 ) ? 'uniqueID' : '_yuid',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13946
                    instance = Y.Node._instances[node[UID]],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13947
                    ctx,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13948
                    result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13949
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13950
                if (!instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13951
                    instance = NodeList._getTempNode(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13952
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13953
                ctx = context || instance;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13954
                result = fn.apply(ctx, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13955
                if (result !== undefined && result !== instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13956
                    ret[ret.length] = result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13957
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13958
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13960
            // TODO: remove tmp pointer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13961
            return ret.length ? ret : this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13962
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13963
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13964
        Y.log('unable to add method: ' + name + ' to NodeList', 'warn', 'node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13965
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13966
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13967
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13968
NodeList.importMethod = function(host, name, altName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13969
    if (typeof name === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13970
        altName = altName || name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13971
        NodeList.addMethod(name, host[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13972
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13973
        Y.Array.each(name, function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13974
            NodeList.importMethod(host, n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13975
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13976
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13977
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13978
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13979
NodeList._getTempNode = function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13980
    var tmp = NodeList._tempNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13981
    if (!tmp) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13982
        tmp = Y.Node.create('<div></div>');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13983
        NodeList._tempNode = tmp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13984
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13985
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13986
    tmp._node = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13987
    tmp._stateProxy = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13988
    return tmp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13989
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13991
Y.mix(NodeList.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13992
    _invoke: function(method, args, getter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13993
        var ret = (getter) ? [] : this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13995
        this.each(function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13996
            var val = node[method].apply(node, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13997
            if (getter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13998
                ret.push(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 13999
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14000
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14001
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14002
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14003
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14004
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14005
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14006
     * Retrieves the Node instance at the given index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14007
     * @method item
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14008
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14009
     * @param {Number} index The index of the target Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14010
     * @return {Node} The Node instance at the given index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14011
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14012
    item: function(index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14013
        return Y.one((this._nodes || [])[index]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14014
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14015
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14016
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14017
     * Applies the given function to each Node in the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14018
     * @method each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14019
     * @param {Function} fn The function to apply. It receives 3 arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14020
     * the current node instance, the node's index, and the NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14021
     * @param {Object} context optional An optional context to apply the function with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14022
     * Default context is the current Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14023
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14024
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14025
    each: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14026
        var instance = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14027
        Y.Array.each(this._nodes, function(node, index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14028
            node = Y.one(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14029
            return fn.call(context || node, node, index, instance);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14030
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14031
        return instance;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14032
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14033
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14034
    batch: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14035
        var nodelist = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14037
        Y.Array.each(this._nodes, function(node, index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14038
            var instance = Y.Node._instances[node[UID]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14039
            if (!instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14040
                instance = NodeList._getTempNode(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14041
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14043
            return fn.call(context || instance, instance, index, nodelist);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14044
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14045
        return nodelist;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14046
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14047
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14048
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14049
     * Executes the function once for each node until a true value is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14050
     * @method some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14051
     * @param {Function} fn The function to apply. It receives 3 arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14052
     * the current node instance, the node's index, and the NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14053
     * @param {Object} context optional An optional context to execute the function from.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14054
     * Default context is the current Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14055
     * @return {Boolean} Whether or not the function returned true for any node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14056
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14057
    some: function(fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14058
        var instance = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14059
        return Y.Array.some(this._nodes, function(node, index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14060
            node = Y.one(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14061
            context = context || node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14062
            return fn.call(context, node, index, instance);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14063
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14064
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14065
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14066
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14067
     * Creates a documenFragment from the nodes bound to the NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14068
     * @method toFrag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14069
     * @return {Node} a Node instance bound to the documentFragment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14070
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14071
    toFrag: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14072
        return Y.one(Y.DOM._nl2frag(this._nodes));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14073
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14074
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14075
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14076
     * Returns the index of the node in the NodeList instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14077
     * or -1 if the node isn't found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14078
     * @method indexOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14079
     * @param {Node | DOMNode} node the node to search for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14080
     * @return {Int} the index of the node value or -1 if not found
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14081
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14082
    indexOf: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14083
        return Y.Array.indexOf(this._nodes, Y.Node.getDOMNode(node));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14084
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14085
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14086
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14087
     * Filters the NodeList instance down to only nodes matching the given selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14088
     * @method filter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14089
     * @param {String} selector The selector to filter against
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14090
     * @return {NodeList} NodeList containing the updated collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14091
     * @see Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14092
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14093
    filter: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14094
        return Y.all(Y.Selector.filter(this._nodes, selector));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14095
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14096
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14098
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14099
     * Creates a new NodeList containing all nodes at every n indices, where
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14100
     * remainder n % index equals r.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14101
     * (zero-based index).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14102
     * @method modulus
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14103
     * @param {Int} n The offset to use (return every nth node)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14104
     * @param {Int} r An optional remainder to use with the modulus operation (defaults to zero)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14105
     * @return {NodeList} NodeList containing the updated collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14106
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14107
    modulus: function(n, r) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14108
        r = r || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14109
        var nodes = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14110
        NodeList.each(this, function(node, i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14111
            if (i % n === r) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14112
                nodes.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14113
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14114
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14116
        return Y.all(nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14117
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14119
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14120
     * Creates a new NodeList containing all nodes at odd indices
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14121
     * (zero-based index).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14122
     * @method odd
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14123
     * @return {NodeList} NodeList containing the updated collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14124
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14125
    odd: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14126
        return this.modulus(2, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14127
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14129
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14130
     * Creates a new NodeList containing all nodes at even indices
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14131
     * (zero-based index), including zero.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14132
     * @method even
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14133
     * @return {NodeList} NodeList containing the updated collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14134
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14135
    even: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14136
        return this.modulus(2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14137
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14139
    destructor: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14140
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14142
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14143
     * Reruns the initial query, when created using a selector query
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14144
     * @method refresh
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14145
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14146
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14147
    refresh: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14148
        var doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14149
            nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14150
            query = this._query,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14151
            root = this._queryRoot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14153
        if (query) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14154
            if (!root) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14155
                if (nodes && nodes[0] && nodes[0].ownerDocument) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14156
                    root = nodes[0].ownerDocument;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14157
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14158
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14160
            this._nodes = Y.Selector.query(query, root);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14161
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14163
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14164
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14166
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14167
     * Returns the current number of items in the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14168
     * @method size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14169
     * @return {Int} The number of items in the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14170
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14171
    size: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14172
        return this._nodes.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14173
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14175
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14176
     * Determines if the instance is bound to any nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14177
     * @method isEmpty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14178
     * @return {Boolean} Whether or not the NodeList is bound to any nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14179
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14180
    isEmpty: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14181
        return this._nodes.length < 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14182
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14184
    toString: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14185
        var str = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14186
            errorMsg = this[UID] + ': not bound to any nodes',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14187
            nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14188
            node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14190
        if (nodes && nodes[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14191
            node = nodes[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14192
            str += node[NODE_NAME];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14193
            if (node.id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14194
                str += '#' + node.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14195
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14197
            if (node.className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14198
                str += '.' + node.className.replace(' ', '.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14199
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14201
            if (nodes.length > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14202
                str += '...[' + nodes.length + ' items]';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14203
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14204
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14205
        return str || errorMsg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14206
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14208
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14209
     * Returns the DOM node bound to the Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14210
     * @method getDOMNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14211
     * @return {Array}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14212
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14213
    getDOMNodes: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14214
        return this._nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14215
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14216
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14218
NodeList.importMethod(Y.Node.prototype, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14219
     /** 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14220
      * Called on each Node instance. Nulls internal node references, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14221
      * removes any plugins and event listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14222
      * @method destroy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14223
      * @param {Boolean} recursivePurge (optional) Whether or not to 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14224
      * remove listeners from the node's subtree (default is false)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14225
      * @see Node.destroy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14226
      */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14227
    'destroy',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14229
     /** 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14230
      * Called on each Node instance. Removes and destroys all of the nodes 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14231
      * within the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14232
      * @method empty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14233
      * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14234
      * @see Node.empty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14235
      */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14236
    'empty',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14238
     /** 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14239
      * Called on each Node instance. Removes the node from its parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14240
      * Shortcut for myNode.get('parentNode').removeChild(myNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14241
      * @method remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14242
      * @param {Boolean} destroy whether or not to call destroy() on the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14243
      * after removal.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14244
      * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14245
      * @see Node.remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14246
      */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14247
    'remove',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14249
     /** 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14250
      * Called on each Node instance. Sets an attribute on the Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14251
      * Unless pre-configured (via Node.ATTRS), set hands
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14252
      * off to the underlying DOM node.  Only valid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14253
      * attributes/properties for the node will be set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14254
      * To set custom attributes use setAttribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14255
      * @method set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14256
      * @param {String} attr The attribute to be set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14257
      * @param {any} val The value to set the attribute to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14258
      * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14259
      * @see Node.set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14260
      */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14261
    'set'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14262
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14264
// one-off implementation to convert array of Nodes to NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14265
// e.g. Y.all('input').get('parentNode');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14267
/** Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14268
  * @method get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14269
  * @see Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14270
  */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14271
NodeList.prototype.get = function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14272
    var ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14273
        nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14274
        isNodeList = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14275
        getTemp = NodeList._getTempNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14276
        instance,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14277
        val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14279
    if (nodes[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14280
        instance = Y.Node._instances[nodes[0]._yuid] || getTemp(nodes[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14281
        val = instance._get(attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14282
        if (val && val.nodeType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14283
            isNodeList = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14284
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14285
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14287
    Y.Array.each(nodes, function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14288
        instance = Y.Node._instances[node._yuid];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14290
        if (!instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14291
            instance = getTemp(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14292
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14294
        val = instance._get(attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14295
        if (!isNodeList) { // convert array of Nodes to NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14296
            val = Y.Node.scrubVal(val, instance);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14297
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14299
        ret.push(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14300
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14302
    return (isNodeList) ? Y.all(ret) : ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14303
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14305
Y.NodeList = NodeList;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14307
Y.all = function(nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14308
    return new NodeList(nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14309
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14311
Y.Node.all = Y.all;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14312
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14313
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14314
 * @submodule node-core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14315
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14317
var Y_NodeList = Y.NodeList,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14318
    ArrayProto = Array.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14319
    ArrayMethods = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14320
        /** Returns a new NodeList combining the given NodeList(s)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14321
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14322
          * @method concat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14323
          * @param {NodeList | Array} valueN Arrays/NodeLists and/or values to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14324
          * concatenate to the resulting NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14325
          * @return {NodeList} A new NodeList comprised of this NodeList joined with the input.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14326
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14327
        'concat': 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14328
        /** Removes the last from the NodeList and returns it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14329
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14330
          * @method pop
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14331
          * @return {Node | null} The last item in the NodeList, or null if the list is empty.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14332
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14333
        'pop': 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14334
        /** Adds the given Node(s) to the end of the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14335
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14336
          * @method push
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14337
          * @param {Node | DOMNode} nodes One or more nodes to add to the end of the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14338
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14339
        'push': 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14340
        /** Removes the first item from the NodeList and returns it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14341
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14342
          * @method shift
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14343
          * @return {Node | null} The first item in the NodeList, or null if the NodeList is empty.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14344
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14345
        'shift': 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14346
        /** Returns a new NodeList comprising the Nodes in the given range.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14347
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14348
          * @method slice
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14349
          * @param {Number} begin Zero-based index at which to begin extraction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14350
          As a negative index, start indicates an offset from the end of the sequence. slice(-2) extracts the second-to-last element and the last element in the sequence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14351
          * @param {Number} end Zero-based index at which to end extraction. slice extracts up to but not including end.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14352
          slice(1,4) extracts the second element through the fourth element (elements indexed 1, 2, and 3).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14353
          As a negative index, end indicates an offset from the end of the sequence. slice(2,-1) extracts the third element through the second-to-last element in the sequence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14354
          If end is omitted, slice extracts to the end of the sequence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14355
          * @return {NodeList} A new NodeList comprised of this NodeList joined with the input.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14356
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14357
        'slice': 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14358
        /** Changes the content of the NodeList, adding new elements while removing old elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14359
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14360
          * @method splice
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14361
          * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14362
          * @param {Number} howMany An integer indicating the number of old array elements to remove. If howMany is 0, no elements are removed. In this case, you should specify at least one new element. If no howMany parameter is specified (second syntax above, which is a SpiderMonkey extension), all elements after index are removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14363
          * {Node | DOMNode| element1, ..., elementN
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14364
          The elements to add to the array. If you don't specify any elements, splice simply removes elements from the array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14365
          * @return {NodeList} The element(s) removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14366
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14367
        'splice': 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14368
        /** Adds the given Node(s) to the beginning of the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14369
          * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14370
          * @method unshift
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14371
          * @param {Node | DOMNode} nodes One or more nodes to add to the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14372
          */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14373
        'unshift': 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14374
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14377
Y.Object.each(ArrayMethods, function(returnNodeList, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14378
    Y_NodeList.prototype[name] = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14379
        var args = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14380
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14381
            arg,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14382
            ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14384
        while (typeof (arg = arguments[i++]) != 'undefined') { // use DOM nodes/nodeLists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14385
            args.push(arg._node || arg._nodes || arg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14386
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14388
        ret = ArrayProto[name].apply(this._nodes, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14390
        if (returnNodeList) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14391
            ret = Y.all(ret);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14392
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14393
            ret = Y.Node.scrubVal(ret);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14394
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14396
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14397
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14398
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14399
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14400
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14401
 * @submodule node-core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14402
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14404
Y.Array.each([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14405
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14406
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14407
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14408
     * @method removeChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14409
     * @param {HTMLElement | Node} node Node to be removed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14410
     * @return {Node} The removed node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14411
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14412
    'removeChild',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14414
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14415
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14416
     * @method hasChildNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14417
     * @return {Boolean} Whether or not the node has any childNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14418
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14419
    'hasChildNodes',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14421
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14422
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14423
     * @method cloneNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14424
     * @param {Boolean} deep Whether or not to perform a deep clone, which includes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14425
     * subtree and attributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14426
     * @return {Node} The clone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14427
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14428
    'cloneNode',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14430
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14431
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14432
     * @method hasAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14433
     * @param {String} attribute The attribute to test for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14434
     * @return {Boolean} Whether or not the attribute is present
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14435
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14436
    'hasAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14438
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14439
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14440
     * @method scrollIntoView
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14441
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14442
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14443
    'scrollIntoView',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14445
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14446
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14447
     * @method getElementsByTagName
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14448
     * @param {String} tagName The tagName to collect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14449
     * @return {NodeList} A NodeList representing the HTMLCollection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14450
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14451
    'getElementsByTagName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14452
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14453
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14454
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14455
     * @method focus
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14456
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14457
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14458
    'focus',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14460
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14461
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14462
     * @method blur
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14463
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14464
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14465
    'blur',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14467
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14468
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14469
     * Only valid on FORM elements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14470
     * @method submit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14471
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14472
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14473
    'submit',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14474
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14475
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14476
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14477
     * Only valid on FORM elements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14478
     * @method reset
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14479
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14480
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14481
    'reset',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14483
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14484
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14485
     * @method select
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14486
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14487
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14488
     'select',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14490
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14491
     * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14492
     * Only valid on TABLE elements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14493
     * @method createCaption
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14494
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14495
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14496
    'createCaption'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14497
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14498
], function(method) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14499
    Y.log('adding: ' + method, 'info', 'node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14500
    Y.Node.prototype[method] = function(arg1, arg2, arg3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14501
        var ret = this.invoke(method, arg1, arg2, arg3);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14502
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14503
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14504
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14506
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14507
 * Passes through to DOM method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14508
 * @method removeAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14509
 * @param {String} attribute The attribute to be removed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14510
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14511
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14512
 // one-off implementation due to IE returning boolean, breaking chaining
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14513
Y.Node.prototype.removeAttribute = function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14514
    var node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14515
    if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14516
        node.removeAttribute(attr, 0); // comma zero for IE < 8 to force case-insensitive
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14517
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14519
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14520
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14522
Y.Node.importMethod(Y.DOM, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14523
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14524
     * Determines whether the node is an ancestor of another HTML element in the DOM hierarchy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14525
     * @method contains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14526
     * @param {Node | HTMLElement} needle The possible node or descendent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14527
     * @return {Boolean} Whether or not this node is the needle its ancestor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14528
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14529
    'contains',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14530
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14531
     * Allows setting attributes on DOM nodes, normalizing in some cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14532
     * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14533
     * @method setAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14534
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14535
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14536
     * @param {string} name The attribute name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14537
     * @param {string} value The value to set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14538
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14539
    'setAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14540
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14541
     * Allows getting attributes on DOM nodes, normalizing in some cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14542
     * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14543
     * @method getAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14544
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14545
     * @param {string} name The attribute name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14546
     * @return {string} The attribute value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14547
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14548
    'getAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14549
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14550
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14551
     * Wraps the given HTML around the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14552
     * @method wrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14553
     * @param {String} html The markup to wrap around the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14554
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14555
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14556
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14557
    'wrap',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14558
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14559
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14560
     * Removes the node's parent node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14561
     * @method unwrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14562
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14563
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14564
    'unwrap',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14566
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14567
     * Applies a unique ID to the node if none exists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14568
     * @method generateID
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14569
     * @return {String} The existing or generated ID
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14570
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14571
    'generateID'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14572
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14574
Y.NodeList.importMethod(Y.Node.prototype, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14575
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14576
 * Allows getting attributes on DOM nodes, normalizing in some cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14577
 * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14578
 * @method getAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14579
 * @see Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14580
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14581
 * @param {string} name The attribute name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14582
 * @return {string} The attribute value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14583
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14585
    'getAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14586
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14587
 * Allows setting attributes on DOM nodes, normalizing in some cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14588
 * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14589
 * @method setAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14590
 * @see Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14591
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14592
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14593
 * @param {string} name The attribute name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14594
 * @param {string} value The value to set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14595
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14596
    'setAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14598
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14599
 * Allows for removing attributes on DOM nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14600
 * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14601
 * @method removeAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14602
 * @see Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14603
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14604
 * @param {string} name The attribute to remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14605
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14606
    'removeAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14607
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14608
 * Removes the parent node from node in the list.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14609
 * @method unwrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14610
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14611
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14612
    'unwrap',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14613
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14614
 * Wraps the given HTML around each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14615
 * @method wrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14616
 * @param {String} html The markup to wrap around the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14617
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14618
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14619
    'wrap',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14621
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14622
 * Applies a unique ID to each node if none exists
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14623
 * @method generateID
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14624
 * @return {String} The existing or generated ID
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14625
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14626
    'generateID'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14627
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14630
}, '@VERSION@', {"requires": ["dom-core", "selector"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14631
YUI.add('node-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14633
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14634
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14635
 * @submodule node-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14636
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14638
var methods = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14639
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14640
 * Determines whether each node has the given className.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14641
 * @method hasClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14642
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14643
 * @param {String} className the class name to search for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14644
 * @return {Boolean} Whether or not the element has the specified class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14645
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14646
 'hasClass',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14648
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14649
 * Adds a class name to each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14650
 * @method addClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14651
 * @param {String} className the class name to add to the node's class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14652
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14653
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14654
 'addClass',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14656
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14657
 * Removes a class name from each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14658
 * @method removeClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14659
 * @param {String} className the class name to remove from the node's class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14660
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14661
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14662
 'removeClass',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14664
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14665
 * Replace a class with another class for each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14666
 * If no oldClassName is present, the newClassName is simply added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14667
 * @method replaceClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14668
 * @param {String} oldClassName the class name to be replaced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14669
 * @param {String} newClassName the class name that will be replacing the old class name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14670
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14671
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14672
 'replaceClass',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14674
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14675
 * If the className exists on the node it is removed, if it doesn't exist it is added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14676
 * @method toggleClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14677
 * @param {String} className the class name to be toggled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14678
 * @param {Boolean} force Option to force adding or removing the class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14679
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14680
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14681
 'toggleClass'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14682
];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14683
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14684
Y.Node.importMethod(Y.DOM, methods);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14685
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14686
 * Determines whether each node has the given className.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14687
 * @method hasClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14688
 * @see Node.hasClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14689
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14690
 * @param {String} className the class name to search for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14691
 * @return {Array} An array of booleans for each node bound to the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14692
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14694
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14695
 * Adds a class name to each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14696
 * @method addClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14697
 * @see Node.addClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14698
 * @param {String} className the class name to add to the node's class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14699
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14700
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14702
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14703
 * Removes a class name from each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14704
 * @method removeClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14705
 * @see Node.removeClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14706
 * @param {String} className the class name to remove from the node's class attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14707
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14708
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14710
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14711
 * Replace a class with another class for each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14712
 * If no oldClassName is present, the newClassName is simply added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14713
 * @method replaceClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14714
 * @see Node.replaceClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14715
 * @param {String} oldClassName the class name to be replaced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14716
 * @param {String} newClassName the class name that will be replacing the old class name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14717
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14718
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14720
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14721
 * If the className exists on the node it is removed, if it doesn't exist it is added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14722
 * @method toggleClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14723
 * @see Node.toggleClass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14724
 * @param {String} className the class name to be toggled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14725
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14726
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14727
Y.NodeList.importMethod(Y.Node.prototype, methods);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14728
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14729
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14730
 * @submodule node-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14731
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14732
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14733
var Y_Node = Y.Node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14734
    Y_DOM = Y.DOM;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14736
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14737
 * Returns a new dom node using the provided markup string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14738
 * @method create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14739
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14740
 * @param {String} html The markup used to create the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14741
 * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14742
 * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14743
 * @param {HTMLDocument} doc An optional document context
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14744
 * @return {Node} A Node instance bound to a DOM node or fragment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14745
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14746
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14747
Y_Node.create = function(html, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14748
    if (doc && doc._node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14749
        doc = doc._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14750
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14751
    return Y.one(Y_DOM.create(html, doc));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14752
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14754
Y.mix(Y_Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14755
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14756
     * Creates a new Node using the provided markup string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14757
     * @method create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14758
     * @param {String} html The markup used to create the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14759
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14760
     * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14761
     * @param {HTMLDocument} doc An optional document context
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14762
     * @return {Node} A Node instance bound to a DOM node or fragment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14763
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14764
    create: Y_Node.create,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14765
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14766
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14767
     * Inserts the content before the reference node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14768
     * @method insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14769
     * @param {String | Node | HTMLElement | NodeList | HTMLCollection} content The content to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14770
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14771
     * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14772
     * @param {Int | Node | HTMLElement | String} where The position to insert at.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14773
     * Possible "where" arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14774
     * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14775
     * <dt>Y.Node</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14776
     * <dd>The Node to insert before</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14777
     * <dt>HTMLElement</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14778
     * <dd>The element to insert before</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14779
     * <dt>Int</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14780
     * <dd>The index of the child element to insert before</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14781
     * <dt>"replace"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14782
     * <dd>Replaces the existing HTML</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14783
     * <dt>"before"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14784
     * <dd>Inserts before the existing HTML</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14785
     * <dt>"before"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14786
     * <dd>Inserts content before the node</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14787
     * <dt>"after"</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14788
     * <dd>Inserts content after the node</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14789
     * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14790
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14791
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14792
    insert: function(content, where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14793
        this._insert(content, where);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14794
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14795
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14797
    _insert: function(content, where) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14798
        var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14799
            ret = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14801
        if (typeof where == 'number') { // allow index
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14802
            where = this._node.childNodes[where];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14803
        } else if (where && where._node) { // Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14804
            where = where._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14805
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14807
        if (content && typeof content != 'string') { // allow Node or NodeList/Array instances
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14808
            content = content._node || content._nodes || content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14809
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14810
        ret = Y_DOM.addHTML(node, content, where);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14811
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14812
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14813
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14815
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14816
     * Inserts the content as the firstChild of the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14817
     * @method prepend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14818
     * @param {String | Node | HTMLElement} content The content to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14819
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14820
     * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14821
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14822
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14823
    prepend: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14824
        return this.insert(content, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14825
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14826
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14827
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14828
     * Inserts the content as the lastChild of the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14829
     * @method append
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14830
     * @param {String | Node | HTMLElement} content The content to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14831
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14832
     * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14833
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14834
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14835
    append: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14836
        return this.insert(content, null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14837
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14839
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14840
     * @method appendChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14841
     * @param {String | HTMLElement | Node} node Node to be appended
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14842
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14843
     * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14844
     * @return {Node} The appended node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14845
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14846
    appendChild: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14847
        return Y_Node.scrubVal(this._insert(node));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14848
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14849
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14850
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14851
     * @method insertBefore
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14852
     * @param {String | HTMLElement | Node} newNode Node to be appended
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14853
     * @param {HTMLElement | Node} refNode Node to be inserted before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14854
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14855
     * to escape html content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14856
     * @return {Node} The inserted node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14857
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14858
    insertBefore: function(newNode, refNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14859
        return Y.Node.scrubVal(this._insert(newNode, refNode));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14860
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14861
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14862
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14863
     * Appends the node to the given node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14864
     * @method appendTo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14865
     * @param {Node | HTMLElement} node The node to append to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14866
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14867
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14868
    appendTo: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14869
        Y.one(node).append(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14870
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14871
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14873
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14874
     * Replaces the node's current content with the content.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14875
     * Note that this passes to innerHTML and is not escaped.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14876
     * Use <a href="../classes/Escape.html#method_html">`Y.Escape.html()`</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14877
     * to escape html content or `set('text')` to add as text.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14878
     * @method setContent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14879
     * @deprecated Use setHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14880
     * @param {String | Node | HTMLElement | NodeList | HTMLCollection} content The content to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14881
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14882
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14883
    setContent: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14884
        this._insert(content, 'replace');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14885
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14886
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14887
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14888
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14889
     * Returns the node's current content (e.g. innerHTML)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14890
     * @method getContent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14891
     * @deprecated Use getHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14892
     * @return {String} The current content
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14893
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14894
    getContent: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14895
        return this.get('innerHTML');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14896
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14897
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14898
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14899
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14900
 * Replaces the node's current html content with the content provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14901
 * Note that this passes to innerHTML and is not escaped.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14902
 * Use `Y.Escape.html()` to escape HTML, or `set('text')` to add as text.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14903
 * @method setHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14904
 * @param {String | HTML | Node | HTMLElement | NodeList | HTMLCollection} content The content to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14905
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14906
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14907
Y.Node.prototype.setHTML = Y.Node.prototype.setContent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14909
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14910
 * Returns the node's current html content (e.g. innerHTML)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14911
 * @method getHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14912
 * @return {String} The html content
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14913
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14914
Y.Node.prototype.getHTML = Y.Node.prototype.getContent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14916
Y.NodeList.importMethod(Y.Node.prototype, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14917
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14918
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14919
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14920
     * @method append
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14921
     * @see Node.append
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14922
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14923
    'append',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14925
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14926
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14927
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14928
     * @method insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14929
     * @see Node.insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14930
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14931
    'insert',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14933
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14934
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14935
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14936
     * @method appendChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14937
     * @see Node.appendChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14938
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14939
    'appendChild',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14941
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14942
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14943
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14944
     * @method insertBefore
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14945
     * @see Node.insertBefore
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14946
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14947
    'insertBefore',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14948
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14949
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14950
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14951
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14952
     * @method prepend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14953
     * @see Node.prepend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14954
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14955
    'prepend',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14956
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14957
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14958
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14959
     * Note that this passes to innerHTML and is not escaped.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14960
     * Use `Y.Escape.html()` to escape HTML, or `set('text')` to add as text.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14961
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14962
     * @method setContent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14963
     * @deprecated Use setHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14964
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14965
    'setContent',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14966
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14967
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14968
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14969
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14970
     * @method getContent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14971
     * @deprecated Use getHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14972
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14973
    'getContent',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14975
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14976
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14977
     * Note that this passes to innerHTML and is not escaped.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14978
     * Use `Y.Escape.html()` to escape HTML, or `set('text')` to add as text.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14979
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14980
     * @method setHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14981
     * @see Node.setHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14982
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14983
    'setHTML',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14984
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14985
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14986
     * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14987
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14988
     * @method getHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14989
     * @see Node.getHTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14990
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14991
    'getHTML'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14992
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14993
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14994
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14995
 * @submodule node-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14996
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14998
var Y_Node = Y.Node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 14999
    Y_DOM = Y.DOM;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15001
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15002
 * Static collection of configuration attributes for special handling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15003
 * @property ATTRS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15004
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15005
 * @type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15006
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15007
Y_Node.ATTRS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15008
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15009
     * Allows for getting and setting the text of an element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15010
     * Formatting is preserved and special characters are treated literally.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15011
     * @config text
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15012
     * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15013
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15014
    text: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15015
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15016
            return Y_DOM.getText(this._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15017
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15019
        setter: function(content) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15020
            Y_DOM.setText(this._node, content);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15021
            return content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15022
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15023
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15025
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15026
     * Allows for getting and setting the text of an element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15027
     * Formatting is preserved and special characters are treated literally.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15028
     * @config for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15029
     * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15030
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15031
    'for': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15032
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15033
            return Y_DOM.getAttribute(this._node, 'for');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15034
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15035
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15036
        setter: function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15037
            Y_DOM.setAttribute(this._node, 'for', val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15038
            return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15039
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15040
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15041
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15042
    'options': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15043
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15044
            return this._node.getElementsByTagName('option');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15045
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15046
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15047
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15048
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15049
     * Returns a NodeList instance of all HTMLElement children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15050
     * @readOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15051
     * @config children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15052
     * @type NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15053
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15054
    'children': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15055
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15056
            var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15057
                children = node.children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15058
                childNodes, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15059
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15060
            if (!children) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15061
                childNodes = node.childNodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15062
                children = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15063
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15064
                for (i = 0, len = childNodes.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15065
                    if (childNodes[i].tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15066
                        children[children.length] = childNodes[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15067
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15068
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15069
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15070
            return Y.all(children);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15071
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15072
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15073
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15074
    value: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15075
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15076
            return Y_DOM.getValue(this._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15077
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15078
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15079
        setter: function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15080
            Y_DOM.setValue(this._node, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15081
            return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15082
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15083
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15084
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15085
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15086
Y.Node.importMethod(Y.DOM, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15087
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15088
     * Allows setting attributes on DOM nodes, normalizing in some cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15089
     * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15090
     * @method setAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15091
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15092
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15093
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15094
     * @param {string} name The attribute name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15095
     * @param {string} value The value to set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15096
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15097
    'setAttribute',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15098
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15099
     * Allows getting attributes on DOM nodes, normalizing in some cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15100
     * This passes through to the DOM node, allowing for custom attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15101
     * @method getAttribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15102
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15103
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15104
     * @param {string} name The attribute name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15105
     * @return {string} The attribute value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15106
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15107
    'getAttribute'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15109
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15110
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15111
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15112
 * @submodule node-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15113
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15115
var Y_Node = Y.Node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15116
var Y_NodeList = Y.NodeList;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15117
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15118
 * List of events that route to DOM events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15119
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15120
 * @property DOM_EVENTS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15121
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15122
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15124
Y_Node.DOM_EVENTS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15125
    abort: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15126
    beforeunload: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15127
    blur: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15128
    change: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15129
    click: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15130
    close: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15131
    command: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15132
    contextmenu: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15133
    dblclick: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15134
    DOMMouseScroll: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15135
    drag: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15136
    dragstart: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15137
    dragenter: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15138
    dragover: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15139
    dragleave: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15140
    dragend: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15141
    drop: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15142
    error: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15143
    focus: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15144
    key: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15145
    keydown: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15146
    keypress: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15147
    keyup: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15148
    load: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15149
    message: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15150
    mousedown: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15151
    mouseenter: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15152
    mouseleave: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15153
    mousemove: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15154
    mousemultiwheel: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15155
    mouseout: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15156
    mouseover: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15157
    mouseup: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15158
    mousewheel: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15159
    orientationchange: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15160
    reset: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15161
    resize: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15162
    select: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15163
    selectstart: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15164
    submit: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15165
    scroll: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15166
    textInput: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15167
    unload: 1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15168
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15170
// Add custom event adaptors to this list.  This will make it so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15171
// that delegate, key, available, contentready, etc all will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15172
// be available through Node.on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15173
Y.mix(Y_Node.DOM_EVENTS, Y.Env.evt.plugins);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15175
Y.augment(Y_Node, Y.EventTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15177
Y.mix(Y_Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15178
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15179
     * Removes event listeners from the node and (optionally) its subtree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15180
     * @method purge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15181
     * @param {Boolean} recurse (optional) Whether or not to remove listeners from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15182
     * node's subtree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15183
     * @param {String} type (optional) Only remove listeners of the specified type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15184
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15185
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15186
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15187
    purge: function(recurse, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15188
        Y.Event.purgeElement(this._node, recurse, type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15189
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15190
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15192
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15194
Y.mix(Y.NodeList.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15195
    _prepEvtArgs: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15196
        // map to Y.on/after signature (type, fn, nodes, context, arg1, arg2, etc)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15197
        var args = Y.Array(arguments, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15199
        if (args.length < 2) { // type only (event hash) just add nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15200
            args[2] = this._nodes;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15201
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15202
            args.splice(2, 0, this._nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15203
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15205
        args[3] = context || this; // default to NodeList instance as context
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15207
        return args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15208
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15209
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15210
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15211
    Subscribe a callback function for each `Node` in the collection to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15212
    in response to a DOM event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15214
    NOTE: Generally, the `on()` method should be avoided on `NodeLists`, in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15215
    favor of using event delegation from a parent Node.  See the Event user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15216
    guide for details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15218
    Most DOM events are associated with a preventable default behavior, such as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15219
    link clicks navigating to a new page.  Callbacks are passed a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15220
    `DOMEventFacade` object as their first argument (usually called `e`) that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15221
    can be used to prevent this default behavior with `e.preventDefault()`. See
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15222
    the `DOMEventFacade` API for all available properties and methods on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15223
    object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15225
    By default, the `this` object will be the `NodeList` that the subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15226
    came from, <em>not the `Node` that received the event</em>.  Use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15227
    `e.currentTarget` to refer to the `Node`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15229
    Returning `false` from a callback is supported as an alternative to calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15230
    `e.preventDefault(); e.stopPropagation();`.  However, it is recommended to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15231
    use the event methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15233
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15235
        Y.all(".sku").on("keydown", function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15236
            if (e.keyCode === 13) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15237
                e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15239
                // Use e.currentTarget to refer to the individual Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15240
                var item = Y.MyApp.searchInventory( e.currentTarget.get('value') );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15241
                // etc ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15242
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15243
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15245
    @method on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15246
    @param {String} type The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15247
    @param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15248
    @param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15249
    @param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15250
    @return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15251
                          subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15252
    @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15253
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15254
    on: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15255
        return Y.on.apply(Y, this._prepEvtArgs.apply(this, arguments));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15256
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15258
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15259
     * Applies an one-time event listener to each Node bound to the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15260
     * @method once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15261
     * @param {String} type The event being listened for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15262
     * @param {Function} fn The handler to call when the event fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15263
     * @param {Object} context The context to call the handler with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15264
     * Default is the NodeList instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15265
     * @return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15266
     *                    subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15267
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15268
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15269
    once: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15270
        return Y.once.apply(Y, this._prepEvtArgs.apply(this, arguments));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15271
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15273
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15274
     * Applies an event listener to each Node bound to the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15275
     * The handler is called only after all on() handlers are called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15276
     * and the event is not prevented.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15277
     * @method after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15278
     * @param {String} type The event being listened for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15279
     * @param {Function} fn The handler to call when the event fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15280
     * @param {Object} context The context to call the handler with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15281
     * Default is the NodeList instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15282
     * @return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15283
     *                    subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15284
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15285
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15286
    after: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15287
        return Y.after.apply(Y, this._prepEvtArgs.apply(this, arguments));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15288
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15290
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15291
     * Applies an one-time event listener to each Node bound to the NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15292
     * that will be called only after all on() handlers are called and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15293
     * event is not prevented.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15294
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15295
     * @method onceAfter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15296
     * @param {String} type The event being listened for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15297
     * @param {Function} fn The handler to call when the event fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15298
     * @param {Object} context The context to call the handler with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15299
     * Default is the NodeList instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15300
     * @return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15301
     *                    subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15302
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15303
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15304
    onceAfter: function(type, fn, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15305
        return Y.onceAfter.apply(Y, this._prepEvtArgs.apply(this, arguments));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15306
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15307
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15309
Y_NodeList.importMethod(Y.Node.prototype, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15310
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15311
      * Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15312
      * @method detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15313
      * @see Node.detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15314
      * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15315
      */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15316
    'detach',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15317
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15318
    /** Called on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15319
      * @method detachAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15320
      * @see Node.detachAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15321
      * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15322
      */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15323
    'detachAll'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15324
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15326
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15327
Subscribe a callback function to execute in response to a DOM event or custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15328
event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15329
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15330
Most DOM events are associated with a preventable default behavior such as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15331
link clicks navigating to a new page.  Callbacks are passed a `DOMEventFacade`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15332
object as their first argument (usually called `e`) that can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15333
prevent this default behavior with `e.preventDefault()`. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15334
`DOMEventFacade` API for all available properties and methods on the object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15336
If the event name passed as the first parameter is not a whitelisted DOM event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15337
it will be treated as a custom event subscriptions, allowing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15338
`node.fire('customEventName')` later in the code.  Refer to the Event user guide
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15339
for the full DOM event whitelist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15340
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15341
By default, the `this` object in the callback will refer to the subscribed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15342
`Node`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15344
Returning `false` from a callback is supported as an alternative to calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15345
`e.preventDefault(); e.stopPropagation();`.  However, it is recommended to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15346
the event methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15347
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15348
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15349
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15350
    Y.one("#my-form").on("submit", function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15351
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15353
        // proceed with ajax form submission instead...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15354
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15356
@method on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15357
@param {String} type The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15358
@param {Function} fn The callback to execute in response to the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15359
@param {Object} [context] Override `this` object in callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15360
@param {Any} [arg*] 0..n additional arguments to supply to the subscriber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15361
@return {EventHandle} A subscription handle capable of detaching that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15362
                      subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15363
@for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15364
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15366
Y.mix(Y.Node.ATTRS, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15367
    offsetHeight: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15368
        setter: function(h) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15369
            Y.DOM.setHeight(this._node, h);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15370
            return h;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15371
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15373
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15374
            return this._node.offsetHeight;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15375
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15376
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15378
    offsetWidth: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15379
        setter: function(w) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15380
            Y.DOM.setWidth(this._node, w);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15381
            return w;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15382
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15384
        getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15385
            return this._node.offsetWidth;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15386
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15387
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15388
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15390
Y.mix(Y.Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15391
    sizeTo: function(w, h) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15392
        var node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15393
        if (arguments.length < 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15394
            node = Y.one(w);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15395
            w = node.get('offsetWidth');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15396
            h = node.get('offsetHeight');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15397
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15399
        this.setAttrs({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15400
            offsetWidth: w,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15401
            offsetHeight: h
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15402
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15403
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15404
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15405
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15406
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15407
 * @submodule node-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15408
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15410
var Y_Node = Y.Node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15412
Y.mix(Y_Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15413
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15414
     * Makes the node visible.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15415
     * If the "transition" module is loaded, show optionally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15416
     * animates the showing of the node using either the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15417
     * transition effect ('fadeIn'), or the given named effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15418
     * @method show
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15419
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15420
     * @param {String} name A named Transition effect to use as the show effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15421
     * @param {Object} config Options to use with the transition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15422
     * @param {Function} callback An optional function to run after the transition completes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15423
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15424
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15425
    show: function(callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15426
        callback = arguments[arguments.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15427
        this.toggleView(true, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15428
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15429
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15430
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15431
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15432
     * The implementation for showing nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15433
     * Default is to remove the hidden attribute and reset the CSS style.display property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15434
     * @method _show
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15435
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15436
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15437
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15438
    _show: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15439
        this.removeAttribute('hidden');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15441
        // For back-compat we need to leave this in for browsers that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15442
        // do not visually hide a node via the hidden attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15443
        // and for users that check visibility based on style display.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15444
        this.setStyle('display', '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15446
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15447
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15448
    _isHidden: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15449
        return Y.DOM.getAttribute(this._node, 'hidden') === 'true';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15450
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15451
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15452
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15453
     * Displays or hides the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15454
     * If the "transition" module is loaded, toggleView optionally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15455
     * animates the toggling of the node using given named effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15456
     * @method toggleView
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15457
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15458
     * @param {String} [name] An optional string value to use as transition effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15459
     * @param {Boolean} [on] An optional boolean value to force the node to be shown or hidden
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15460
     * @param {Function} [callback] An optional function to run after the transition completes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15461
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15462
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15463
    toggleView: function(on, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15464
        this._toggleView.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15465
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15466
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15468
    _toggleView: function(on, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15469
        callback = arguments[arguments.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15471
        // base on current state if not forcing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15472
        if (typeof on != 'boolean') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15473
            on = (this._isHidden()) ? 1 : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15474
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15475
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15476
        if (on) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15477
            this._show();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15478
        }  else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15479
            this._hide();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15480
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15482
        if (typeof callback == 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15483
            callback.call(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15484
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15486
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15487
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15489
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15490
     * Hides the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15491
     * If the "transition" module is loaded, hide optionally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15492
     * animates the hiding of the node using either the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15493
     * transition effect ('fadeOut'), or the given named effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15494
     * @method hide
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15495
     * @param {String} name A named Transition effect to use as the show effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15496
     * @param {Object} config Options to use with the transition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15497
     * @param {Function} callback An optional function to run after the transition completes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15498
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15499
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15500
    hide: function(callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15501
        callback = arguments[arguments.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15502
        this.toggleView(false, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15503
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15504
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15506
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15507
     * The implementation for hiding nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15508
     * Default is to set the hidden attribute to true and set the CSS style.display to 'none'.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15509
     * @method _hide
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15510
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15511
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15512
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15513
    _hide: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15514
        this.setAttribute('hidden', true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15515
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15516
        // For back-compat we need to leave this in for browsers that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15517
        // do not visually hide a node via the hidden attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15518
        // and for users that check visibility based on style display.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15519
        this.setStyle('display', 'none');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15520
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15521
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15523
Y.NodeList.importMethod(Y.Node.prototype, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15524
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15525
     * Makes each node visible.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15526
     * If the "transition" module is loaded, show optionally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15527
     * animates the showing of the node using either the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15528
     * transition effect ('fadeIn'), or the given named effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15529
     * @method show
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15530
     * @param {String} name A named Transition effect to use as the show effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15531
     * @param {Object} config Options to use with the transition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15532
     * @param {Function} callback An optional function to run after the transition completes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15533
     * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15534
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15535
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15536
    'show',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15537
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15538
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15539
     * Hides each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15540
     * If the "transition" module is loaded, hide optionally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15541
     * animates the hiding of the node using either the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15542
     * transition effect ('fadeOut'), or the given named effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15543
     * @method hide
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15544
     * @param {String} name A named Transition effect to use as the show effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15545
     * @param {Object} config Options to use with the transition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15546
     * @param {Function} callback An optional function to run after the transition completes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15547
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15548
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15549
    'hide',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15551
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15552
     * Displays or hides each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15553
     * If the "transition" module is loaded, toggleView optionally
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15554
     * animates the toggling of the nodes using given named effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15555
     * @method toggleView
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15556
     * @param {String} [name] An optional string value to use as transition effect.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15557
     * @param {Boolean} [on] An optional boolean value to force the nodes to be shown or hidden
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15558
     * @param {Function} [callback] An optional function to run after the transition completes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15559
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15560
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15561
    'toggleView'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15562
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15564
if (!Y.config.doc.documentElement.hasAttribute) { // IE < 8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15565
    Y.Node.prototype.hasAttribute = function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15566
        if (attr === 'value') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15567
            if (this.get('value') !== "") { // IE < 8 fails to populate specified when set in HTML
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15568
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15569
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15570
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15571
        return !!(this._node.attributes[attr] &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15572
                this._node.attributes[attr].specified);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15573
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15574
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15576
// IE throws an error when calling focus() on an element that's invisible, not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15577
// displayed, or disabled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15578
Y.Node.prototype.focus = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15579
    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15580
        this._node.focus();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15581
    } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15582
        Y.log('error focusing node: ' + e.toString(), 'error', 'node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15583
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15585
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15586
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15588
// IE throws error when setting input.type = 'hidden',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15589
// input.setAttribute('type', 'hidden') and input.attributes.type.value = 'hidden'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15590
Y.Node.ATTRS.type = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15591
    setter: function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15592
        if (val === 'hidden') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15593
            try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15594
                this._node.type = 'hidden';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15595
            } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15596
                this.setStyle('display', 'none');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15597
                this._inputType = 'hidden';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15598
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15599
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15600
            try { // IE errors when changing the type from "hidden'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15601
                this._node.type = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15602
            } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15603
                Y.log('error setting type: ' + val, 'info', 'node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15604
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15605
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15606
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15607
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15609
    getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15610
        return this._inputType || this._node.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15611
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15613
    _bypassProxy: true // don't update DOM when using with Attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15614
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15615
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15616
if (Y.config.doc.createElement('form').elements.nodeType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15617
    // IE: elements collection is also FORM node which trips up scrubVal.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15618
    Y.Node.ATTRS.elements = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15619
            getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15620
                return this.all('input, textarea, button, select');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15621
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15622
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15623
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15625
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15626
 * Provides methods for managing custom Node data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15627
 * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15628
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15629
 * @main node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15630
 * @submodule node-data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15631
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15633
Y.mix(Y.Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15634
    _initData: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15635
        if (! ('_data' in this)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15636
            this._data = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15637
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15638
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15639
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15640
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15641
    * @method getData
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15642
    * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15643
    * @description Retrieves arbitrary data stored on a Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15644
    * If no data is associated with the Node, it will attempt to retrieve
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15645
    * a value from the corresponding HTML data attribute. (e.g. node.getData('foo')
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15646
    * will check node.getAttribute('data-foo')).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15647
    * @param {string} name Optional name of the data field to retrieve.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15648
    * If no name is given, all data is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15649
    * @return {any | Object} Whatever is stored at the given field,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15650
    * or an object hash of all fields.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15651
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15652
    getData: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15653
        this._initData();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15654
        var data = this._data,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15655
            ret = data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15657
        if (arguments.length) { // single field
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15658
            if (name in data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15659
                ret = data[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15660
            } else { // initialize from HTML attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15661
                ret = this._getDataAttribute(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15662
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15663
        } else if (typeof data == 'object' && data !== null) { // all fields
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15664
            ret = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15665
            Y.Object.each(data, function(v, n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15666
                ret[n] = v;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15667
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15669
            ret = this._getDataAttributes(ret);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15670
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15672
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15674
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15676
    _getDataAttributes: function(ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15677
        ret = ret || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15678
        var i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15679
            attrs = this._node.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15680
            len = attrs.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15681
            prefix = this.DATA_PREFIX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15682
            prefixLength = prefix.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15683
            name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15684
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15685
        while (i < len) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15686
            name = attrs[i].name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15687
            if (name.indexOf(prefix) === 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15688
                name = name.substr(prefixLength);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15689
                if (!(name in ret)) { // only merge if not already stored
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15690
                    ret[name] = this._getDataAttribute(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15691
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15692
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15694
            i += 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15695
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15697
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15698
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15699
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15700
    _getDataAttribute: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15701
        name = this.DATA_PREFIX + name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15702
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15703
        var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15704
            attrs = node.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15705
            data = attrs && attrs[name] && attrs[name].value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15707
        return data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15708
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15710
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15711
    * @method setData
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15712
    * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15713
    * @description Stores arbitrary data on a Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15714
    * This is not stored with the DOM node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15715
    * @param {string} name The name of the field to set. If no val
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15716
    * is given, name is treated as the data and overrides any existing data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15717
    * @param {any} val The value to be assigned to the field.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15718
    * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15719
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15720
    setData: function(name, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15721
        this._initData();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15722
        if (arguments.length > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15723
            this._data[name] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15724
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15725
            this._data = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15726
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15728
       return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15729
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15731
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15732
    * @method clearData
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15733
    * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15734
    * @description Clears internally stored data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15735
    * @param {string} name The name of the field to clear. If no name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15736
    * is given, all data is cleared.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15737
    * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15738
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15739
    clearData: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15740
        if ('_data' in this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15741
            if (typeof name != 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15742
                delete this._data[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15743
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15744
                delete this._data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15745
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15746
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15748
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15749
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15750
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15751
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15752
Y.mix(Y.NodeList.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15753
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15754
    * @method getData
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15755
    * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15756
    * @description Retrieves arbitrary data stored on each Node instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15757
    * bound to the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15758
    * @see Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15759
    * @param {string} name Optional name of the data field to retrieve.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15760
    * If no name is given, all data is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15761
    * @return {Array} An array containing all of the data for each Node instance. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15762
    * or an object hash of all fields.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15763
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15764
    getData: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15765
        var args = (arguments.length) ? [name] : [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15766
        return this._invoke('getData', args, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15767
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15769
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15770
    * @method setData
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15771
    * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15772
    * @description Stores arbitrary data on each Node instance bound to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15773
    *  NodeList. This is not stored with the DOM node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15774
    * @param {string} name The name of the field to set. If no name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15775
    * is given, name is treated as the data and overrides any existing data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15776
    * @param {any} val The value to be assigned to the field.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15777
    * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15778
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15779
    setData: function(name, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15780
        var args = (arguments.length > 1) ? [name, val] : [name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15781
        return this._invoke('setData', args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15782
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15784
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15785
    * @method clearData
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15786
    * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15787
    * @description Clears data on all Node instances bound to the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15788
    * @param {string} name The name of the field to clear. If no name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15789
    * is given, all data is cleared.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15790
    * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15791
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15792
    clearData: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15793
        var args = (arguments.length) ? [name] : [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15794
        return this._invoke('clearData', [name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15795
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15796
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15799
}, '@VERSION@', {"requires": ["event-base", "node-core", "dom-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15800
(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15801
var GLOBAL_ENV = YUI.Env;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15802
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15803
if (!GLOBAL_ENV._ready) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15804
    GLOBAL_ENV._ready = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15805
        GLOBAL_ENV.DOMReady = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15806
        GLOBAL_ENV.remove(YUI.config.doc, 'DOMContentLoaded', GLOBAL_ENV._ready);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15807
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15809
    GLOBAL_ENV.add(YUI.config.doc, 'DOMContentLoaded', GLOBAL_ENV._ready);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15810
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15811
})();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15812
YUI.add('event-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15814
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15815
 * DOM event listener abstraction layer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15816
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15817
 * @submodule event-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15818
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15819
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15820
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15821
 * The domready event fires at the moment the browser's DOM is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15822
 * usable. In most cases, this is before images are fully
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15823
 * downloaded, allowing you to provide a more responsive user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15824
 * interface.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15825
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15826
 * In YUI 3, domready subscribers will be notified immediately if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15827
 * that moment has already passed when the subscription is created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15828
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15829
 * One exception is if the yui.js file is dynamically injected into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15830
 * the page.  If this is done, you must tell the YUI instance that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15831
 * you did this in order for DOMReady (and window load events) to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15832
 * fire normally.  That configuration option is 'injected' -- set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15833
 * it to true if the yui.js script is not included inline.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15834
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15835
 * This method is part of the 'event-ready' module, which is a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15836
 * submodule of 'event'.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15837
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15838
 * @event domready
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15839
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15840
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15841
Y.publish('domready', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15842
    fireOnce: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15843
    async: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15844
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15846
if (YUI.Env.DOMReady) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15847
    Y.fire('domready');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15848
} else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15849
    Y.Do.before(function() { Y.fire('domready'); }, YUI.Env, '_ready');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15850
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15852
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15853
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15854
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15855
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15856
 * @submodule event-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15857
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15858
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15859
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15860
 * Wraps a DOM event, properties requiring browser abstraction are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15861
 * fixed here.  Provids a security layer when required.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15862
 * @class DOMEventFacade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15863
 * @param ev {Event} the DOM event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15864
 * @param currentTarget {HTMLElement} the element the listener was attached to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15865
 * @param wrapper {Event.Custom} the custom event wrapper for this DOM event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15866
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15867
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15868
    var ua = Y.UA,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15869
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15870
    EMPTY = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15872
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15873
     * webkit key remapping required for Safari < 3.1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15874
     * @property webkitKeymap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15875
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15876
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15877
    webkitKeymap = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15878
        63232: 38, // up
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15879
        63233: 40, // down
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15880
        63234: 37, // left
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15881
        63235: 39, // right
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15882
        63276: 33, // page up
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15883
        63277: 34, // page down
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15884
        25:     9, // SHIFT-TAB (Safari provides a different key code in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15885
                   // this case, even though the shiftKey modifier is set)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15886
        63272: 46, // delete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15887
        63273: 36, // home
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15888
        63275: 35  // end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15889
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15891
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15892
     * Returns a wrapped node.  Intended to be used on event targets,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15893
     * so it will return the node's parent if the target is a text
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15894
     * node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15895
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15896
     * If accessing a property of the node throws an error, this is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15897
     * probably the anonymous div wrapper Gecko adds inside text
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15898
     * nodes.  This likely will only occur when attempting to access
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15899
     * the relatedTarget.  In this case, we now return null because
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15900
     * the anonymous div is completely useless and we do not know
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15901
     * what the related target was because we can't even get to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15902
     * the element's parent node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15903
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15904
     * @method resolve
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15905
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15906
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15907
    resolve = function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15908
        if (!n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15909
            return n;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15910
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15911
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15912
            if (n && 3 == n.nodeType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15913
                n = n.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15914
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15915
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15916
            return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15917
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15918
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15919
        return Y.one(n);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15920
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15921
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15922
    DOMEventFacade = function(ev, currentTarget, wrapper) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15923
        this._event = ev;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15924
        this._currentTarget = currentTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15925
        this._wrapper = wrapper || EMPTY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15926
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15927
        // if not lazy init
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15928
        this.init();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15929
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15930
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15931
Y.extend(DOMEventFacade, Object, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15933
    init: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15934
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15935
        var e = this._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15936
            overrides = this._wrapper.overrides,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15937
            x = e.pageX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15938
            y = e.pageY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15939
            c,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15940
            currentTarget = this._currentTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15942
        this.altKey   = e.altKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15943
        this.ctrlKey  = e.ctrlKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15944
        this.metaKey  = e.metaKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15945
        this.shiftKey = e.shiftKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15946
        this.type     = (overrides && overrides.type) || e.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15947
        this.clientX  = e.clientX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15948
        this.clientY  = e.clientY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15949
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15950
        this.pageX = x;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15951
        this.pageY = y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15952
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15953
        // charCode is unknown in keyup, keydown. keyCode is unknown in keypress.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15954
        // FF 3.6 - 8+? pass 0 for keyCode in keypress events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15955
        // Webkit, FF 3.6-8+?, and IE9+? pass 0 for charCode in keydown, keyup.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15956
        // Webkit and IE9+? duplicate charCode in keyCode.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15957
        // Opera never sets charCode, always keyCode (though with the charCode).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15958
        // IE6-8 don't set charCode or which.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15959
        // All browsers other than IE6-8 set which=keyCode in keydown, keyup, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15960
        // which=charCode in keypress.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15961
        //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15962
        // Moral of the story: (e.which || e.keyCode) will always return the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15963
        // known code for that key event phase. e.keyCode is often different in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15964
        // keypress from keydown and keyup.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15965
        c = e.keyCode || e.charCode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15966
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15967
        if (ua.webkit && (c in webkitKeymap)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15968
            c = webkitKeymap[c];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15969
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15970
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15971
        this.keyCode = c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15972
        this.charCode = c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15973
        // Fill in e.which for IE - implementers should always use this over
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15974
        // e.keyCode or e.charCode.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15975
        this.which = e.which || e.charCode || c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15976
        // this.button = e.button;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15977
        this.button = this.which;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15978
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15979
        this.target = resolve(e.target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15980
        this.currentTarget = resolve(currentTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15981
        this.relatedTarget = resolve(e.relatedTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15982
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15983
        if (e.type == "mousewheel" || e.type == "DOMMouseScroll") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15984
            this.wheelDelta = (e.detail) ? (e.detail * -1) : Math.round(e.wheelDelta / 80) || ((e.wheelDelta < 0) ? -1 : 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15985
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15987
        if (this._touch) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15988
            this._touch(e, currentTarget, this._wrapper);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15989
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15990
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15992
    stopPropagation: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15993
        this._event.stopPropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15994
        this._wrapper.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15995
        this.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15996
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15998
    stopImmediatePropagation: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 15999
        var e = this._event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16000
        if (e.stopImmediatePropagation) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16001
            e.stopImmediatePropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16002
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16003
            this.stopPropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16004
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16005
        this._wrapper.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16006
        this.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16007
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16008
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16009
    preventDefault: function(returnValue) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16010
        var e = this._event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16011
        e.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16012
        e.returnValue = returnValue || false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16013
        this._wrapper.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16014
        this.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16015
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16016
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16017
    halt: function(immediate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16018
        if (immediate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16019
            this.stopImmediatePropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16020
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16021
            this.stopPropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16022
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16023
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16024
        this.preventDefault();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16025
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16026
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16027
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16029
DOMEventFacade.resolve = resolve;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16030
Y.DOM2EventFacade = DOMEventFacade;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16031
Y.DOMEventFacade = DOMEventFacade;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16033
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16034
     * The native event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16035
     * @property _event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16036
     * @type {Native DOM Event}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16037
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16038
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16039
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16040
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16041
    The name of the event (e.g. "click")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16043
    @property type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16044
    @type {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16045
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16047
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16048
    `true` if the "alt" or "option" key is pressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16049
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16050
    @property altKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16051
    @type {Boolean}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16052
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16053
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16054
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16055
    `true` if the shift key is pressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16056
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16057
    @property shiftKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16058
    @type {Boolean}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16059
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16060
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16061
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16062
    `true` if the "Windows" key on a Windows keyboard, "command" key on an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16063
    Apple keyboard, or "meta" key on other keyboards is pressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16064
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16065
    @property metaKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16066
    @type {Boolean}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16067
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16069
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16070
    `true` if the "Ctrl" or "control" key is pressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16071
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16072
    @property ctrlKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16073
    @type {Boolean}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16074
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16075
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16076
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16077
     * The X location of the event on the page (including scroll)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16078
     * @property pageX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16079
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16080
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16081
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16082
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16083
     * The Y location of the event on the page (including scroll)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16084
     * @property pageY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16085
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16086
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16088
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16089
     * The X location of the event in the viewport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16090
     * @property clientX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16091
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16092
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16094
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16095
     * The Y location of the event in the viewport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16096
     * @property clientY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16097
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16098
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16100
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16101
     * The keyCode for key events.  Uses charCode if keyCode is not available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16102
     * @property keyCode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16103
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16104
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16106
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16107
     * The charCode for key events.  Same as keyCode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16108
     * @property charCode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16109
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16110
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16112
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16113
     * The button that was pushed. 1 for left click, 2 for middle click, 3 for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16114
     * right click.  This is only reliably populated on `mouseup` events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16115
     * @property button
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16116
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16117
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16119
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16120
     * The button that was pushed.  Same as button.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16121
     * @property which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16122
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16123
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16125
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16126
     * Node reference for the targeted element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16127
     * @property target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16128
     * @type {Node}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16129
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16131
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16132
     * Node reference for the element that the listener was attached to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16133
     * @property currentTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16134
     * @type {Node}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16135
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16137
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16138
     * Node reference to the relatedTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16139
     * @property relatedTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16140
     * @type {Node}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16141
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16143
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16144
     * Number representing the direction and velocity of the movement of the mousewheel.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16145
     * Negative is down, the higher the number, the faster.  Applies to the mousewheel event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16146
     * @property wheelDelta
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16147
     * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16148
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16150
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16151
     * Stops the propagation to the next bubble target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16152
     * @method stopPropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16153
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16154
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16155
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16156
     * Stops the propagation to the next bubble target and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16157
     * prevents any additional listeners from being exectued
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16158
     * on the current target.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16159
     * @method stopImmediatePropagation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16160
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16162
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16163
     * Prevents the event's default behavior
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16164
     * @method preventDefault
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16165
     * @param returnValue {string} sets the returnValue of the event to this value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16166
     * (rather than the default false value).  This can be used to add a customized
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16167
     * confirmation query to the beforeunload event).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16168
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16170
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16171
     * Stops the event propagation and prevents the default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16172
     * event behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16173
     * @method halt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16174
     * @param immediate {boolean} if true additional listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16175
     * on the current target will not be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16176
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16177
(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16179
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16180
 * The event utility provides functions to add and remove event listeners,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16181
 * event cleansing.  It also tries to automatically remove listeners it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16182
 * registers during the unload event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16183
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16184
 * @main event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16185
 * @submodule event-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16186
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16188
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16189
 * The event utility provides functions to add and remove event listeners,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16190
 * event cleansing.  It also tries to automatically remove listeners it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16191
 * registers during the unload event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16192
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16193
 * @class Event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16194
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16195
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16197
Y.Env.evt.dom_wrappers = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16198
Y.Env.evt.dom_map = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16200
var _eventenv = Y.Env.evt,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16201
    config = Y.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16202
    win = config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16203
    add = YUI.Env.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16204
    remove = YUI.Env.remove,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16206
    onLoad = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16207
        YUI.Env.windowLoaded = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16208
        Y.Event._load();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16209
        remove(win, "load", onLoad);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16210
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16212
    onUnload = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16213
        Y.Event._unload();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16214
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16215
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16216
    EVENT_READY = 'domready',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16218
    COMPAT_ARG = '~yui|2|compat~',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16220
    shouldIterate = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16221
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16222
            // TODO: See if there's a more performant way to return true early on this, for the common case
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16223
            return (o && typeof o !== "string" && Y.Lang.isNumber(o.length) && !o.tagName && !Y.DOM.isWindow(o));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16224
        } catch(ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16225
            Y.log("collection check failure", "warn", "event");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16226
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16227
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16228
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16230
    // aliases to support DOM event subscription clean up when the last
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16231
    // subscriber is detached. deleteAndClean overrides the DOM event's wrapper
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16232
    // CustomEvent _delete method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16233
    _ceProtoDelete = Y.CustomEvent.prototype._delete,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16234
    _deleteAndClean = function(s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16235
        var ret = _ceProtoDelete.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16236
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16237
        if (!this.hasSubs()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16238
            Y.Event._clean(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16239
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16241
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16242
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16244
Event = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16246
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16247
     * True after the onload event has fired
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16248
     * @property _loadComplete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16249
     * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16250
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16251
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16252
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16253
    var _loadComplete =  false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16255
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16256
     * The number of times to poll after window.onload.  This number is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16257
     * increased if additional late-bound handlers are requested after
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16258
     * the page load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16259
     * @property _retryCount
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16260
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16261
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16262
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16263
    _retryCount = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16264
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16265
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16266
     * onAvailable listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16267
     * @property _avail
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16268
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16269
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16270
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16271
    _avail = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16273
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16274
     * Custom event wrappers for DOM events.  Key is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16275
     * 'event:' + Element uid stamp + event type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16276
     * @property _wrappers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16277
     * @type Y.Event.Custom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16278
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16279
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16280
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16281
    _wrappers = _eventenv.dom_wrappers,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16283
    _windowLoadKey = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16285
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16286
     * Custom event wrapper map DOM events.  Key is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16287
     * Element uid stamp.  Each item is a hash of custom event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16288
     * wrappers as provided in the _wrappers collection.  This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16289
     * provides the infrastructure for getListeners.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16290
     * @property _el_events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16291
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16292
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16293
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16294
    _el_events = _eventenv.dom_map;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16296
    return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16298
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16299
         * The number of times we should look for elements that are not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16300
         * in the DOM at the time the event is requested after the document
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16301
         * has been loaded.  The default is 1000@amp;40 ms, so it will poll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16302
         * for 40 seconds or until all outstanding handlers are bound
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16303
         * (whichever comes first).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16304
         * @property POLL_RETRYS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16305
         * @type int
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16306
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16307
         * @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16308
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16309
        POLL_RETRYS: 1000,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16311
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16312
         * The poll interval in milliseconds
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16313
         * @property POLL_INTERVAL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16314
         * @type int
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16315
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16316
         * @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16317
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16318
        POLL_INTERVAL: 40,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16319
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16320
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16321
         * addListener/removeListener can throw errors in unexpected scenarios.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16322
         * These errors are suppressed, the method returns false, and this property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16323
         * is set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16324
         * @property lastError
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16325
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16326
         * @type Error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16327
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16328
        lastError: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16329
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16331
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16332
         * poll handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16333
         * @property _interval
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16334
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16335
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16336
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16337
        _interval: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16339
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16340
         * document readystate poll handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16341
         * @property _dri
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16342
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16343
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16344
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16345
         _dri: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16347
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16348
         * True when the document is initially usable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16349
         * @property DOMReady
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16350
         * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16351
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16352
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16353
        DOMReady: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16355
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16356
         * @method startInterval
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16357
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16358
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16359
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16360
        startInterval: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16361
            if (!Event._interval) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16362
Event._interval = setInterval(Event._poll, Event.POLL_INTERVAL);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16363
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16364
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16366
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16367
         * Executes the supplied callback when the item with the supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16368
         * id is found.  This is meant to be used to execute behavior as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16369
         * soon as possible as the page loads.  If you use this after the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16370
         * initial page load it will poll for a fixed time for the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16371
         * The number of times it will poll and the frequency are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16372
         * configurable.  By default it will poll for 10 seconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16373
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16374
         * <p>The callback is executed with a single parameter:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16375
         * the custom object parameter, if provided.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16376
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16377
         * @method onAvailable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16378
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16379
         * @param {string||string[]}   id the id of the element, or an array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16380
         * of ids to look for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16381
         * @param {function} fn what to execute when the element is found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16382
         * @param {object}   p_obj an optional object to be passed back as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16383
         *                   a parameter to fn.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16384
         * @param {boolean|object}  p_override If set to true, fn will execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16385
         *                   in the context of p_obj, if set to an object it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16386
         *                   will execute in the context of that object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16387
         * @param checkContent {boolean} check child node readiness (onContentReady)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16388
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16389
         * @deprecated Use Y.on("available")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16390
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16391
        // @TODO fix arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16392
        onAvailable: function(id, fn, p_obj, p_override, checkContent, compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16394
            var a = Y.Array(id), i, availHandle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16396
            // Y.log('onAvailable registered for: ' + id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16398
            for (i=0; i<a.length; i=i+1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16399
                _avail.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16400
                    id:         a[i],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16401
                    fn:         fn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16402
                    obj:        p_obj,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16403
                    override:   p_override,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16404
                    checkReady: checkContent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16405
                    compat:     compat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16406
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16407
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16408
            _retryCount = this.POLL_RETRYS;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16410
            // We want the first test to be immediate, but async
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16411
            setTimeout(Event._poll, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16412
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16413
            availHandle = new Y.EventHandle({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16415
                _delete: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16416
                    // set by the event system for lazy DOM listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16417
                    if (availHandle.handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16418
                        availHandle.handle.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16419
                        return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16420
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16421
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16422
                    var i, j;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16424
                    // otherwise try to remove the onAvailable listener(s)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16425
                    for (i = 0; i < a.length; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16426
                        for (j = 0; j < _avail.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16427
                            if (a[i] === _avail[j].id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16428
                                _avail.splice(j, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16429
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16430
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16431
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16432
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16434
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16435
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16436
            return availHandle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16437
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16439
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16440
         * Works the same way as onAvailable, but additionally checks the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16441
         * state of sibling elements to determine if the content of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16442
         * available element is safe to modify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16443
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16444
         * <p>The callback is executed with a single parameter:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16445
         * the custom object parameter, if provided.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16446
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16447
         * @method onContentReady
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16448
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16449
         * @param {string}   id the id of the element to look for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16450
         * @param {function} fn what to execute when the element is ready.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16451
         * @param {object}   obj an optional object to be passed back as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16452
         *                   a parameter to fn.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16453
         * @param {boolean|object}  override If set to true, fn will execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16454
         *                   in the context of p_obj.  If an object, fn will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16455
         *                   exectute in the context of that object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16456
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16457
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16458
         * @deprecated Use Y.on("contentready")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16459
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16460
        // @TODO fix arguments
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16461
        onContentReady: function(id, fn, obj, override, compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16462
            return Event.onAvailable(id, fn, obj, override, true, compat);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16463
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16465
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16466
         * Adds an event listener
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16467
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16468
         * @method attach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16469
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16470
         * @param {String}   type     The type of event to append
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16471
         * @param {Function} fn        The method the event invokes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16472
         * @param {String|HTMLElement|Array|NodeList} el An id, an element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16473
         *  reference, or a collection of ids and/or elements to assign the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16474
         *  listener to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16475
         * @param {Object}   context optional context object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16476
         * @param {Boolean|object}  args 0..n arguments to pass to the callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16477
         * @return {EventHandle} an object to that can be used to detach the listener
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16478
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16479
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16480
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16482
        attach: function(type, fn, el, context) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16483
            return Event._attach(Y.Array(arguments, 0, true));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16484
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16486
        _createWrapper: function (el, type, capture, compat, facade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16488
            var cewrapper,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16489
                ek  = Y.stamp(el),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16490
                key = 'event:' + ek + type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16492
            if (false === facade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16493
                key += 'native';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16494
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16495
            if (capture) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16496
                key += 'capture';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16497
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16500
            cewrapper = _wrappers[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16501
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16503
            if (!cewrapper) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16504
                // create CE wrapper
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16505
                cewrapper = Y.publish(key, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16506
                    silent: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16507
                    bubbles: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16508
                    emitFacade:false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16509
                    contextFn: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16510
                        if (compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16511
                            return cewrapper.el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16512
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16513
                            cewrapper.nodeRef = cewrapper.nodeRef || Y.one(cewrapper.el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16514
                            return cewrapper.nodeRef;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16515
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16516
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16517
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16519
                cewrapper.overrides = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16520
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16521
                // for later removeListener calls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16522
                cewrapper.el = el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16523
                cewrapper.key = key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16524
                cewrapper.domkey = ek;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16525
                cewrapper.type = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16526
                cewrapper.fn = function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16527
                    cewrapper.fire(Event.getEvent(e, el, (compat || (false === facade))));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16528
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16529
                cewrapper.capture = capture;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16531
                if (el == win && type == "load") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16532
                    // window load happens once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16533
                    cewrapper.fireOnce = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16534
                    _windowLoadKey = key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16535
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16536
                cewrapper._delete = _deleteAndClean;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16537
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16538
                _wrappers[key] = cewrapper;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16539
                _el_events[ek] = _el_events[ek] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16540
                _el_events[ek][key] = cewrapper;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16542
                add(el, type, cewrapper.fn, capture);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16543
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16544
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16545
            return cewrapper;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16547
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16549
        _attach: function(args, conf) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16551
            var compat,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16552
                handles, oEl, cewrapper, context,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16553
                fireNow = false, ret,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16554
                type = args[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16555
                fn = args[1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16556
                el = args[2] || win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16557
                facade = conf && conf.facade,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16558
                capture = conf && conf.capture,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16559
                overrides = conf && conf.overrides;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16561
            if (args[args.length-1] === COMPAT_ARG) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16562
                compat = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16563
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16565
            if (!fn || !fn.call) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16566
// throw new TypeError(type + " attach call failed, callback undefined");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16567
Y.log(type + " attach call failed, invalid callback", "error", "event");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16568
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16569
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16571
            // The el argument can be an array of elements or element ids.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16572
            if (shouldIterate(el)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16574
                handles=[];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16576
                Y.each(el, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16577
                    args[2] = v;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16578
                    handles.push(Event._attach(args.slice(), conf));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16579
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16581
                // return (handles.length === 1) ? handles[0] : handles;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16582
                return new Y.EventHandle(handles);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16584
            // If the el argument is a string, we assume it is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16585
            // actually the id of the element.  If the page is loaded
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16586
            // we convert el to the actual element, otherwise we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16587
            // defer attaching the event until the element is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16588
            // ready
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16589
            } else if (Y.Lang.isString(el)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16591
                // oEl = (compat) ? Y.DOM.byId(el) : Y.Selector.query(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16593
                if (compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16594
                    oEl = Y.DOM.byId(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16595
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16596
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16597
                    oEl = Y.Selector.query(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16599
                    switch (oEl.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16600
                        case 0:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16601
                            oEl = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16602
                            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16603
                        case 1:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16604
                            oEl = oEl[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16605
                            break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16606
                        default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16607
                            args[2] = oEl;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16608
                            return Event._attach(args, conf);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16609
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16610
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16611
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16612
                if (oEl) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16613
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16614
                    el = oEl;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16615
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16616
                // Not found = defer adding the event until the element is available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16617
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16619
                    // Y.log(el + ' not found');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16620
                    ret = Event.onAvailable(el, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16621
                        // Y.log('lazy attach: ' + args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16622
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16623
                        ret.handle = Event._attach(args, conf);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16625
                    }, Event, true, false, compat);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16627
                    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16629
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16630
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16632
            // Element should be an html element or node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16633
            if (!el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16634
                Y.log("unable to attach event " + type, "warn", "event");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16635
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16636
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16638
            if (Y.Node && Y.instanceOf(el, Y.Node)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16639
                el = Y.Node.getDOMNode(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16640
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16641
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16642
            cewrapper = Event._createWrapper(el, type, capture, compat, facade);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16643
            if (overrides) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16644
                Y.mix(cewrapper.overrides, overrides);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16645
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16647
            if (el == win && type == "load") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16649
                // if the load is complete, fire immediately.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16650
                // all subscribers, including the current one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16651
                // will be notified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16652
                if (YUI.Env.windowLoaded) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16653
                    fireNow = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16654
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16655
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16657
            if (compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16658
                args.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16659
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16660
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16661
            context = args[3];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16663
            // set context to the Node if not specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16664
            // ret = cewrapper.on.apply(cewrapper, trimmedArgs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16665
            ret = cewrapper._on(fn, context, (args.length > 4) ? args.slice(4) : null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16666
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16667
            if (fireNow) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16668
                cewrapper.fire();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16669
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16671
            return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16672
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16673
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16675
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16676
         * Removes an event listener.  Supports the signature the event was bound
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16677
         * with, but the preferred way to remove listeners is using the handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16678
         * that is returned when using Y.on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16679
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16680
         * @method detach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16681
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16682
         * @param {String} type the type of event to remove.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16683
         * @param {Function} fn the method the event invokes.  If fn is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16684
         * undefined, then all event handlers for the type of event are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16685
         * removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16686
         * @param {String|HTMLElement|Array|NodeList|EventHandle} el An
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16687
         * event handle, an id, an element reference, or a collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16688
         * of ids and/or elements to remove the listener from.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16689
         * @return {boolean} true if the unbind was successful, false otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16690
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16691
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16692
        detach: function(type, fn, el, obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16694
            var args=Y.Array(arguments, 0, true), compat, l, ok, i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16695
                id, ce;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16697
            if (args[args.length-1] === COMPAT_ARG) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16698
                compat = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16699
                // args.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16700
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16702
            if (type && type.detach) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16703
                return type.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16704
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16706
            // The el argument can be a string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16707
            if (typeof el == "string") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16708
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16709
                // el = (compat) ? Y.DOM.byId(el) : Y.all(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16710
                if (compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16711
                    el = Y.DOM.byId(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16712
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16713
                    el = Y.Selector.query(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16714
                    l = el.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16715
                    if (l < 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16716
                        el = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16717
                    } else if (l == 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16718
                        el = el[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16719
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16720
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16721
                // return Event.detach.apply(Event, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16722
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16724
            if (!el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16725
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16726
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16728
            if (el.detach) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16729
                args.splice(2, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16730
                return el.detach.apply(el, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16731
            // The el argument can be an array of elements or element ids.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16732
            } else if (shouldIterate(el)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16733
                ok = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16734
                for (i=0, l=el.length; i<l; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16735
                    args[2] = el[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16736
                    ok = ( Y.Event.detach.apply(Y.Event, args) && ok );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16737
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16738
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16739
                return ok;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16740
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16742
            if (!type || !fn || !fn.call) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16743
                return Event.purgeElement(el, false, type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16744
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16746
            id = 'event:' + Y.stamp(el) + type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16747
            ce = _wrappers[id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16749
            if (ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16750
                return ce.detach(fn);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16751
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16752
                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16753
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16754
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16755
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16757
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16758
         * Finds the event in the window object, the caller's arguments, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16759
         * in the arguments of another method in the callstack.  This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16760
         * executed automatically for events registered through the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16761
         * manager, so the implementer should not normally need to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16762
         * this function at all.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16763
         * @method getEvent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16764
         * @param {Event} e the event parameter from the handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16765
         * @param {HTMLElement} el the element the listener was attached to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16766
         * @return {Event} the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16767
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16768
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16769
        getEvent: function(e, el, noFacade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16770
            var ev = e || win.event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16772
            return (noFacade) ? ev :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16773
                new Y.DOMEventFacade(ev, el, _wrappers['event:' + Y.stamp(el) + e.type]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16774
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16776
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16777
         * Generates an unique ID for the element if it does not already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16778
         * have one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16779
         * @method generateId
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16780
         * @param el the element to create the id for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16781
         * @return {string} the resulting id of the element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16782
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16783
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16784
        generateId: function(el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16785
            return Y.DOM.generateID(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16786
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16787
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16788
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16789
         * We want to be able to use getElementsByTagName as a collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16790
         * to attach a group of events to.  Unfortunately, different
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16791
         * browsers return different types of collections.  This function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16792
         * tests to determine if the object is array-like.  It will also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16793
         * fail if the object is an array, but is empty.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16794
         * @method _isValidCollection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16795
         * @param o the object to test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16796
         * @return {boolean} true if the object is array-like and populated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16797
         * @deprecated was not meant to be used directly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16798
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16799
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16800
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16801
        _isValidCollection: shouldIterate,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16802
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16803
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16804
         * hook up any deferred listeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16805
         * @method _load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16806
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16807
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16808
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16809
        _load: function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16810
            if (!_loadComplete) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16811
                // Y.log('Load Complete', 'info', 'event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16812
                _loadComplete = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16814
                // Just in case DOMReady did not go off for some reason
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16815
                // E._ready();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16816
                if (Y.fire) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16817
                    Y.fire(EVENT_READY);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16818
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16819
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16820
                // Available elements may not have been detected before the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16821
                // window load event fires. Try to find them now so that the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16822
                // the user is more likely to get the onAvailable notifications
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16823
                // before the window load notification
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16824
                Event._poll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16825
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16826
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16828
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16829
         * Polling function that runs before the onload event fires,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16830
         * attempting to attach to DOM Nodes as soon as they are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16831
         * available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16832
         * @method _poll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16833
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16834
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16835
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16836
        _poll: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16837
            if (Event.locked) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16838
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16839
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16840
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16841
            if (Y.UA.ie && !YUI.Env.DOMReady) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16842
                // Hold off if DOMReady has not fired and check current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16843
                // readyState to protect against the IE operation aborted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16844
                // issue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16845
                Event.startInterval();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16846
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16847
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16849
            Event.locked = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16851
            // Y.log.debug("poll");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16852
            // keep trying until after the page is loaded.  We need to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16853
            // check the page load state prior to trying to bind the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16854
            // elements so that we can be certain all elements have been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16855
            // tested appropriately
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16856
            var i, len, item, el, notAvail, executeItem,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16857
                tryAgain = !_loadComplete;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16858
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16859
            if (!tryAgain) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16860
                tryAgain = (_retryCount > 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16861
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16863
            // onAvailable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16864
            notAvail = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16866
            executeItem = function (el, item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16867
                var context, ov = item.override;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16868
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16869
                    if (item.compat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16870
                        if (item.override) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16871
                            if (ov === true) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16872
                                context = item.obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16873
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16874
                                context = ov;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16875
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16876
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16877
                            context = el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16878
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16879
                        item.fn.call(context, item.obj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16880
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16881
                        context = item.obj || Y.one(el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16882
                        item.fn.apply(context, (Y.Lang.isArray(ov)) ? ov : []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16883
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16884
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16885
                    Y.log("Error in available or contentReady callback", 'error', 'event');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16886
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16887
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16888
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16889
            // onAvailable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16890
            for (i=0,len=_avail.length; i<len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16891
                item = _avail[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16892
                if (item && !item.checkReady) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16894
                    // el = (item.compat) ? Y.DOM.byId(item.id) : Y.one(item.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16895
                    el = (item.compat) ? Y.DOM.byId(item.id) : Y.Selector.query(item.id, null, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16897
                    if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16898
                        // Y.log('avail: ' + el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16899
                        executeItem(el, item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16900
                        _avail[i] = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16901
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16902
                        // Y.log('NOT avail: ' + el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16903
                        notAvail.push(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16904
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16905
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16906
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16907
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16908
            // onContentReady
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16909
            for (i=0,len=_avail.length; i<len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16910
                item = _avail[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16911
                if (item && item.checkReady) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16913
                    // el = (item.compat) ? Y.DOM.byId(item.id) : Y.one(item.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16914
                    el = (item.compat) ? Y.DOM.byId(item.id) : Y.Selector.query(item.id, null, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16916
                    if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16917
                        // The element is available, but not necessarily ready
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16918
                        // @todo should we test parentNode.nextSibling?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16919
                        if (_loadComplete || (el.get && el.get('nextSibling')) || el.nextSibling) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16920
                            executeItem(el, item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16921
                            _avail[i] = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16922
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16923
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16924
                        notAvail.push(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16925
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16926
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16927
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16929
            _retryCount = (notAvail.length === 0) ? 0 : _retryCount - 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16930
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16931
            if (tryAgain) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16932
                // we may need to strip the nulled out items here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16933
                Event.startInterval();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16934
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16935
                clearInterval(Event._interval);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16936
                Event._interval = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16937
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16938
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16939
            Event.locked = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16941
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16943
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16944
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16945
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16946
         * Removes all listeners attached to the given element via addListener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16947
         * Optionally, the node's children can also be purged.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16948
         * Optionally, you can specify a specific type of event to remove.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16949
         * @method purgeElement
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16950
         * @param {HTMLElement} el the element to purge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16951
         * @param {boolean} recurse recursively purge this element's children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16952
         * as well.  Use with caution.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16953
         * @param {string} type optional type of listener to purge. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16954
         * left out, all listeners will be removed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16955
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16956
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16957
        purgeElement: function(el, recurse, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16958
            // var oEl = (Y.Lang.isString(el)) ? Y.one(el) : el,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16959
            var oEl = (Y.Lang.isString(el)) ?  Y.Selector.query(el, null, true) : el,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16960
                lis = Event.getListeners(oEl, type), i, len, children, child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16962
            if (recurse && oEl) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16963
                lis = lis || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16964
                children = Y.Selector.query('*', oEl);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16965
                len = children.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16966
                for (i = 0; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16967
                    child = Event.getListeners(children[i], type);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16968
                    if (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16969
                        lis = lis.concat(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16970
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16971
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16972
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16973
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16974
            if (lis) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16975
                for (i = 0, len = lis.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16976
                    lis[i].detachAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16977
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16978
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16979
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16980
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16981
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16982
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16983
         * Removes all object references and the DOM proxy subscription for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16984
         * a given event for a DOM node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16985
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16986
         * @method _clean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16987
         * @param wrapper {CustomEvent} Custom event proxy for the DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16988
         *                  subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16989
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16990
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16991
         * @since 3.4.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16992
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16993
        _clean: function (wrapper) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16994
            var key    = wrapper.key,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16995
                domkey = wrapper.domkey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16997
            remove(wrapper.el, wrapper.type, wrapper.fn, wrapper.capture);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16998
            delete _wrappers[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 16999
            delete Y._yuievt.events[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17000
            if (_el_events[domkey]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17001
                delete _el_events[domkey][key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17002
                if (!Y.Object.size(_el_events[domkey])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17003
                    delete _el_events[domkey];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17004
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17005
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17006
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17008
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17009
         * Returns all listeners attached to the given element via addListener.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17010
         * Optionally, you can specify a specific type of event to return.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17011
         * @method getListeners
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17012
         * @param el {HTMLElement|string} the element or element id to inspect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17013
         * @param type {string} optional type of listener to return. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17014
         * left out, all listeners will be returned
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17015
         * @return {CustomEvent} the custom event wrapper for the DOM event(s)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17016
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17017
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17018
        getListeners: function(el, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17019
            var ek = Y.stamp(el, true), evts = _el_events[ek],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17020
                results=[] , key = (type) ? 'event:' + ek + type : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17021
                adapters = _eventenv.plugins;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17022
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17023
            if (!evts) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17024
                return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17025
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17026
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17027
            if (key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17028
                // look for synthetic events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17029
                if (adapters[type] && adapters[type].eventDef) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17030
                    key += '_synth';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17031
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17033
                if (evts[key]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17034
                    results.push(evts[key]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17035
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17037
                // get native events as well
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17038
                key += 'native';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17039
                if (evts[key]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17040
                    results.push(evts[key]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17041
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17043
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17044
                Y.each(evts, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17045
                    results.push(v);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17046
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17047
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17048
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17049
            return (results.length) ? results : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17050
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17051
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17052
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17053
         * Removes all listeners registered by pe.event.  Called
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17054
         * automatically during the unload event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17055
         * @method _unload
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17056
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17057
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17058
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17059
        _unload: function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17060
            Y.each(_wrappers, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17061
                if (v.type == 'unload') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17062
                    v.fire(e);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17063
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17064
                v.detachAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17065
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17066
            remove(win, "unload", onUnload);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17067
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17069
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17070
         * Adds a DOM event directly without the caching, cleanup, context adj, etc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17071
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17072
         * @method nativeAdd
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17073
         * @param {HTMLElement} el      the element to bind the handler to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17074
         * @param {string}      type   the type of event handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17075
         * @param {function}    fn      the callback to invoke
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17076
         * @param {boolen}      capture capture or bubble phase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17077
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17078
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17079
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17080
        nativeAdd: add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17081
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17082
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17083
         * Basic remove listener
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17084
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17085
         * @method nativeRemove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17086
         * @param {HTMLElement} el      the element to bind the handler to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17087
         * @param {string}      type   the type of event handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17088
         * @param {function}    fn      the callback to invoke
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17089
         * @param {boolen}      capture capture or bubble phase
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17090
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17091
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17092
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17093
        nativeRemove: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17094
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17095
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17096
}();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17098
Y.Event = Event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17100
if (config.injected || YUI.Env.windowLoaded) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17101
    onLoad();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17102
} else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17103
    add(win, "load", onLoad);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17104
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17106
// Process onAvailable/onContentReady items when when the DOM is ready in IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17107
if (Y.UA.ie) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17108
    Y.on(EVENT_READY, Event._poll);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17109
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17111
try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17112
    add(win, "unload", onUnload);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17113
} catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17114
    /*jshint maxlen:300*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17115
    Y.log("Registering unload listener failed. This is known to happen in Chrome Packaged Apps and Extensions, which don't support unload, and don't provide a way to test for support", "warn", "event-base");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17116
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17118
Event.Custom = Y.CustomEvent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17119
Event.Subscriber = Y.Subscriber;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17120
Event.Target = Y.EventTarget;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17121
Event.Handle = Y.EventHandle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17122
Event.Facade = Y.EventFacade;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17124
Event._poll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17126
}());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17128
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17129
 * DOM event listener abstraction layer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17130
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17131
 * @submodule event-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17132
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17134
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17135
 * Executes the callback as soon as the specified element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17136
 * is detected in the DOM.  This function expects a selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17137
 * string for the element(s) to detect.  If you already have
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17138
 * an element reference, you don't need this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17139
 * @event available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17140
 * @param type {string} 'available'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17141
 * @param fn {function} the callback function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17142
 * @param el {string} an selector for the element(s) to attach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17143
 * @param context optional argument that specifies what 'this' refers to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17144
 * @param args* 0..n additional arguments to pass on to the callback function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17145
 * These arguments will be added after the event object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17146
 * @return {EventHandle} the detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17147
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17148
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17149
Y.Env.evt.plugins.available = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17150
    on: function(type, fn, id, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17151
        var a = arguments.length > 4 ?  Y.Array(arguments, 4, true) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17152
        return Y.Event.onAvailable.call(Y.Event, id, fn, o, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17153
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17154
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17156
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17157
 * Executes the callback as soon as the specified element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17158
 * is detected in the DOM with a nextSibling property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17159
 * (indicating that the element's children are available).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17160
 * This function expects a selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17161
 * string for the element(s) to detect.  If you already have
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17162
 * an element reference, you don't need this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17163
 * @event contentready
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17164
 * @param type {string} 'contentready'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17165
 * @param fn {function} the callback function to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17166
 * @param el {string} an selector for the element(s) to attach.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17167
 * @param context optional argument that specifies what 'this' refers to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17168
 * @param args* 0..n additional arguments to pass on to the callback function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17169
 * These arguments will be added after the event object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17170
 * @return {EventHandle} the detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17171
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17172
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17173
Y.Env.evt.plugins.contentready = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17174
    on: function(type, fn, id, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17175
        var a = arguments.length > 4 ? Y.Array(arguments, 4, true) : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17176
        return Y.Event.onContentReady.call(Y.Event, id, fn, o, a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17177
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17178
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17181
}, '@VERSION@', {"requires": ["event-custom-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17182
(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17184
var stateChangeListener,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17185
    GLOBAL_ENV   = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17186
    config       = YUI.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17187
    doc          = config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17188
    docElement   = doc && doc.documentElement,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17189
    EVENT_NAME   = 'onreadystatechange',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17190
    pollInterval = config.pollInterval || 40;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17192
if (docElement.doScroll && !GLOBAL_ENV._ieready) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17193
    GLOBAL_ENV._ieready = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17194
        GLOBAL_ENV._ready();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17195
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17197
/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17198
// Internet Explorer: use the doScroll() method on the root element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17199
// This isolates what appears to be a safe moment to manipulate the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17200
// DOM prior to when the document's readyState suggests it is safe to do so.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17201
    if (self !== self.top) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17202
        stateChangeListener = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17203
            if (doc.readyState == 'complete') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17204
                GLOBAL_ENV.remove(doc, EVENT_NAME, stateChangeListener);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17205
                GLOBAL_ENV.ieready();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17206
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17207
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17208
        GLOBAL_ENV.add(doc, EVENT_NAME, stateChangeListener);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17209
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17210
        GLOBAL_ENV._dri = setInterval(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17211
            try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17212
                docElement.doScroll('left');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17213
                clearInterval(GLOBAL_ENV._dri);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17214
                GLOBAL_ENV._dri = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17215
                GLOBAL_ENV._ieready();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17216
            } catch (domNotReady) { }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17217
        }, pollInterval);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17218
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17219
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17220
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17221
})();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17222
YUI.add('event-base-ie', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17224
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17225
 * Custom event engine, DOM event listener abstraction layer, synthetic DOM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17226
 * events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17227
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17228
 * @submodule event-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17229
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17231
function IEEventFacade() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17232
    // IEEventFacade.superclass.constructor.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17233
    Y.DOM2EventFacade.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17234
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17236
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17237
 * (intentially left out of API docs)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17238
 * Alternate Facade implementation that is based on Object.defineProperty, which
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17239
 * is partially supported in IE8.  Properties that involve setup work are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17240
 * deferred to temporary getters using the static _define method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17241
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17242
function IELazyFacade(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17243
    var proxy = Y.config.doc.createEventObject(e),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17244
        proto = IELazyFacade.prototype;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17246
    // TODO: necessary?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17247
    proxy.hasOwnProperty = function () { return true; };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17249
    proxy.init = proto.init;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17250
    proxy.halt = proto.halt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17251
    proxy.preventDefault           = proto.preventDefault;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17252
    proxy.stopPropagation          = proto.stopPropagation;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17253
    proxy.stopImmediatePropagation = proto.stopImmediatePropagation;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17255
    Y.DOM2EventFacade.apply(proxy, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17257
    return proxy;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17258
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17261
var imp = Y.config.doc && Y.config.doc.implementation,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17262
    useLazyFacade = Y.config.lazyEventFacade,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17264
    buttonMap = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17265
        0: 1, // left click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17266
        4: 2, // middle click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17267
        2: 3  // right click
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17268
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17269
    relatedTargetMap = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17270
        mouseout: 'toElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17271
        mouseover: 'fromElement'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17272
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17274
    resolve = Y.DOM2EventFacade.resolve,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17276
    proto = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17277
        init: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17279
            IEEventFacade.superclass.init.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17281
            var e = this._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17282
                x, y, d, b, de, t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17284
            this.target = resolve(e.srcElement);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17286
            if (('clientX' in e) && (!x) && (0 !== x)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17287
                x = e.clientX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17288
                y = e.clientY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17290
                d = Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17291
                b = d.body;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17292
                de = d.documentElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17294
                x += (de.scrollLeft || (b && b.scrollLeft) || 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17295
                y += (de.scrollTop  || (b && b.scrollTop)  || 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17296
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17297
                this.pageX = x;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17298
                this.pageY = y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17299
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17301
            if (e.type == "mouseout") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17302
                t = e.toElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17303
            } else if (e.type == "mouseover") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17304
                t = e.fromElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17305
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17307
            // fallback to t.relatedTarget to support simulated events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17308
            // IE doesn't support setting toElement or fromElement on generic
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17309
            // events, so Y.Event.simulate sets relatedTarget instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17310
            this.relatedTarget = resolve(t || e.relatedTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17312
            // which should contain the unicode key code if this is a key event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17313
            // For click events, which is normalized for which mouse button was
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17314
            // clicked.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17315
            this.which = // chained assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17316
            this.button = e.keyCode || buttonMap[e.button] || e.button;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17317
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17319
        stopPropagation: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17320
            this._event.cancelBubble = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17321
            this._wrapper.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17322
            this.stopped = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17323
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17325
        stopImmediatePropagation: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17326
            this.stopPropagation();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17327
            this._wrapper.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17328
            this.stopped = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17329
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17331
        preventDefault: function(returnValue) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17332
            this._event.returnValue = returnValue || false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17333
            this._wrapper.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17334
            this.prevented = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17335
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17336
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17337
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17338
Y.extend(IEEventFacade, Y.DOM2EventFacade, proto);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17339
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17340
Y.extend(IELazyFacade, Y.DOM2EventFacade, proto);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17341
IELazyFacade.prototype.init = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17342
    var e         = this._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17343
        overrides = this._wrapper.overrides,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17344
        define    = IELazyFacade._define,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17345
        lazyProperties = IELazyFacade._lazyProperties,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17346
        prop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17347
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17348
    this.altKey   = e.altKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17349
    this.ctrlKey  = e.ctrlKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17350
    this.metaKey  = e.metaKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17351
    this.shiftKey = e.shiftKey;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17352
    this.type     = (overrides && overrides.type) || e.type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17353
    this.clientX  = e.clientX;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17354
    this.clientY  = e.clientY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17355
    this.keyCode  = // chained assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17356
    this.charCode = e.keyCode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17357
    this.which    = // chained assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17358
    this.button   = e.keyCode || buttonMap[e.button] || e.button;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17360
    for (prop in lazyProperties) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17361
        if (lazyProperties.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17362
            define(this, prop, lazyProperties[prop]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17363
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17364
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17366
    if (this._touch) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17367
        this._touch(e, this._currentTarget, this._wrapper);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17368
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17369
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17371
IELazyFacade._lazyProperties = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17372
    target: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17373
        return resolve(this._event.srcElement);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17374
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17375
    relatedTarget: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17376
        var e = this._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17377
            targetProp = relatedTargetMap[e.type] || 'relatedTarget';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17379
        // fallback to t.relatedTarget to support simulated events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17380
        // IE doesn't support setting toElement or fromElement on generic
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17381
        // events, so Y.Event.simulate sets relatedTarget instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17382
        return resolve(e[targetProp] || e.relatedTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17383
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17384
    currentTarget: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17385
        return resolve(this._currentTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17386
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17388
    wheelDelta: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17389
        var e = this._event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17391
        if (e.type === "mousewheel" || e.type === "DOMMouseScroll") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17392
            return (e.detail) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17393
                (e.detail * -1) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17394
                // wheelDelta between -80 and 80 result in -1 or 1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17395
                Math.round(e.wheelDelta / 80) || ((e.wheelDelta < 0) ? -1 : 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17396
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17397
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17399
    pageX: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17400
        var e = this._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17401
            val = e.pageX,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17402
            doc, bodyScroll, docScroll;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17404
        if (val === undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17405
            doc = Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17406
            bodyScroll = doc.body && doc.body.scrollLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17407
            docScroll = doc.documentElement.scrollLeft;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17409
            val = e.clientX + (docScroll || bodyScroll || 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17410
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17412
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17413
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17414
    pageY: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17415
        var e = this._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17416
            val = e.pageY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17417
            doc, bodyScroll, docScroll;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17418
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17419
        if (val === undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17420
            doc = Y.config.doc;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17421
            bodyScroll = doc.body && doc.body.scrollTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17422
            docScroll = doc.documentElement.scrollTop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17424
            val = e.clientY + (docScroll || bodyScroll || 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17425
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17427
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17428
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17429
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17430
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17432
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17433
 * Wrapper function for Object.defineProperty that creates a property whose
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17434
 * value will be calulated only when asked for.  After calculating the value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17435
 * the getter wll be removed, so it will behave as a normal property beyond that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17436
 * point.  A setter is also assigned so assigning to the property will clear
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17437
 * the getter, so foo.prop = 'a'; foo.prop; won't trigger the getter,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17438
 * overwriting value 'a'.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17439
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17440
 * Used only by the DOMEventFacades used by IE8 when the YUI configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17441
 * <code>lazyEventFacade</code> is set to true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17442
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17443
 * @method _define
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17444
 * @param o {DOMObject} A DOM object to add the property to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17445
 * @param prop {String} The name of the new property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17446
 * @param valueFn {Function} The function that will return the initial, default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17447
 *                  value for the property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17448
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17449
 * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17450
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17451
IELazyFacade._define = function (o, prop, valueFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17452
    function val(v) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17453
        var ret = (arguments.length) ? v : valueFn.call(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17455
        delete o[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17456
        Object.defineProperty(o, prop, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17457
            value: ret,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17458
            configurable: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17459
            writable: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17460
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17461
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17462
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17463
    Object.defineProperty(o, prop, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17464
        get: val,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17465
        set: val,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17466
        configurable: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17467
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17468
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17470
if (imp && (!imp.hasFeature('Events', '2.0'))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17471
    if (useLazyFacade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17472
        // Make sure we can use the lazy facade logic
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17473
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17474
            Object.defineProperty(Y.config.doc.createEventObject(), 'z', {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17475
        } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17476
            useLazyFacade = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17477
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17478
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17479
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17480
    Y.DOMEventFacade = (useLazyFacade) ? IELazyFacade : IEEventFacade;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17481
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17483
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17484
}, '@VERSION@', {"requires": ["node-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17485
YUI.add('pluginhost-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17486
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17487
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17488
     * Provides the augmentable PluginHost interface, which can be added to any class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17489
     * @module pluginhost
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17490
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17492
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17493
     * Provides the augmentable PluginHost interface, which can be added to any class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17494
     * @module pluginhost-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17495
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17497
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17498
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17499
     * An augmentable class, which provides the augmented class with the ability to host plugins.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17500
     * It adds <a href="#method_plug">plug</a> and <a href="#method_unplug">unplug</a> methods to the augmented class, which can 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17501
     * be used to add or remove plugins from instances of the class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17502
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17503
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17504
     * <p>Plugins can also be added through the constructor configuration object passed to the host class' constructor using
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17505
     * the "plugins" property. Supported values for the "plugins" property are those defined by the <a href="#method_plug">plug</a> method. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17506
     * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17507
     * For example the following code would add the AnimPlugin and IOPlugin to Overlay (the plugin host):
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17508
     * <xmp>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17509
     * var o = new Overlay({plugins: [ AnimPlugin, {fn:IOPlugin, cfg:{section:"header"}}]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17510
     * </xmp>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17511
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17512
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17513
     * Plug.Host's protected <a href="#method_initPlugins">_initPlugins</a> and <a href="#method_destroyPlugins">_destroyPlugins</a> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17514
     * methods should be invoked by the host class at the appropriate point in the host's lifecyle.  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17515
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17516
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17517
     * @class Plugin.Host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17518
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17520
    var L = Y.Lang;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17522
    function PluginHost() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17523
        this._plugins = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17524
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17526
    PluginHost.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17528
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17529
         * Adds a plugin to the host object. This will instantiate the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17530
         * plugin and attach it to the configured namespace on the host object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17531
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17532
         * @method plug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17533
         * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17534
         * @param P {Function | Object |Array} Accepts the plugin class, or an 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17535
         * object with a "fn" property specifying the plugin class and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17536
         * a "cfg" property specifying the configuration for the Plugin.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17537
         * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17538
         * Additionally an Array can also be passed in, with the above function or 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17539
         * object values, allowing the user to add multiple plugins in a single call.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17540
         * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17541
         * @param config (Optional) If the first argument is the plugin class, the second argument
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17542
         * can be the configuration for the plugin.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17543
         * @return {Base} A reference to the host object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17544
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17545
        plug: function(Plugin, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17546
            var i, ln, ns;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17548
            if (L.isArray(Plugin)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17549
                for (i = 0, ln = Plugin.length; i < ln; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17550
                    this.plug(Plugin[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17551
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17552
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17553
                if (Plugin && !L.isFunction(Plugin)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17554
                    config = Plugin.cfg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17555
                    Plugin = Plugin.fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17556
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17558
                // Plugin should be fn by now
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17559
                if (Plugin && Plugin.NS) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17560
                    ns = Plugin.NS;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17561
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17562
                    config = config || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17563
                    config.host = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17564
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17565
                    if (this.hasPlugin(ns)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17566
                        // Update config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17567
                        if (this[ns].setAttrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17568
                            this[ns].setAttrs(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17569
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17570
                        else { Y.log("Attempt to replug an already attached plugin, and we can't setAttrs, because it's not Attribute based: " + ns); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17571
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17572
                        // Create new instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17573
                        this[ns] = new Plugin(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17574
                        this._plugins[ns] = Plugin;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17575
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17576
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17577
                else { Y.log("Attempt to plug in an invalid plugin. Host:" + this + ", Plugin:" + Plugin); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17578
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17579
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17580
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17582
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17583
         * Removes a plugin from the host object. This will destroy the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17584
         * plugin instance and delete the namespace from the host object. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17585
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17586
         * @method unplug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17587
         * @param {String | Function} plugin The namespace of the plugin, or the plugin class with the static NS namespace property defined. If not provided,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17588
         * all registered plugins are unplugged.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17589
         * @return {Base} A reference to the host object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17590
         * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17591
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17592
        unplug: function(plugin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17593
            var ns = plugin, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17594
                plugins = this._plugins;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17595
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17596
            if (plugin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17597
                if (L.isFunction(plugin)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17598
                    ns = plugin.NS;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17599
                    if (ns && (!plugins[ns] || plugins[ns] !== plugin)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17600
                        ns = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17601
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17602
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17603
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17604
                if (ns) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17605
                    if (this[ns]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17606
                        if (this[ns].destroy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17607
                            this[ns].destroy();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17608
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17609
                        delete this[ns];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17610
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17611
                    if (plugins[ns]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17612
                        delete plugins[ns];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17613
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17614
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17615
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17616
                for (ns in this._plugins) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17617
                    if (this._plugins.hasOwnProperty(ns)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17618
                        this.unplug(ns);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17619
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17620
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17621
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17622
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17623
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17625
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17626
         * Determines if a plugin has plugged into this host.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17627
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17628
         * @method hasPlugin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17629
         * @param {String} ns The plugin's namespace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17630
         * @return {Plugin} Returns a truthy value (the plugin instance) if present, or undefined if not.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17631
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17632
        hasPlugin : function(ns) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17633
            return (this._plugins[ns] && this[ns]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17634
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17636
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17637
         * Initializes static plugins registered on the host (using the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17638
         * Base.plug static method) and any plugins passed to the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17639
         * instance through the "plugins" configuration property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17640
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17641
         * @method _initPlugins
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17642
         * @param {Config} config The configuration object with property name/value pairs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17643
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17644
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17645
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17646
        _initPlugins: function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17647
            this._plugins = this._plugins || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17649
            if (this._initConfigPlugins) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17650
                this._initConfigPlugins(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17651
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17652
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17654
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17655
         * Unplugs and destroys all plugins on the host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17656
         * @method _destroyPlugins
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17657
         * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17658
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17659
        _destroyPlugins: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17660
            this.unplug();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17661
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17662
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17664
    Y.namespace("Plugin").Host = PluginHost;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17665
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17666
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17667
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17668
YUI.add('pluginhost-config', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17669
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17670
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17671
     * Adds pluginhost constructor configuration and static configuration support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17672
     * @submodule pluginhost-config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17673
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17675
    var PluginHost = Y.Plugin.Host,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17676
        L = Y.Lang;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17678
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17679
     * A protected initialization method, used by the host class to initialize
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17680
     * plugin configurations passed the constructor, through the config object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17681
     * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17682
     * Host objects should invoke this method at the appropriate time in their
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17683
     * construction lifecycle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17684
     * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17685
     * @method _initConfigPlugins
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17686
     * @param {Object} config The configuration object passed to the constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17687
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17688
     * @for Plugin.Host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17689
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17690
    PluginHost.prototype._initConfigPlugins = function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17692
        // Class Configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17693
        var classes = (this._getClasses) ? this._getClasses() : [this.constructor],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17694
            plug = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17695
            unplug = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17696
            constructor, i, classPlug, classUnplug, pluginClassName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17697
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17698
        // TODO: Room for optimization. Can we apply statically/unplug in same pass?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17699
        for (i = classes.length - 1; i >= 0; i--) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17700
            constructor = classes[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17702
            classUnplug = constructor._UNPLUG;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17703
            if (classUnplug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17704
                // subclasses over-write
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17705
                Y.mix(unplug, classUnplug, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17706
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17708
            classPlug = constructor._PLUG;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17709
            if (classPlug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17710
                // subclasses over-write
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17711
                Y.mix(plug, classPlug, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17712
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17713
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17715
        for (pluginClassName in plug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17716
            if (plug.hasOwnProperty(pluginClassName)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17717
                if (!unplug[pluginClassName]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17718
                    this.plug(plug[pluginClassName]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17719
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17720
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17721
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17722
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17723
        // User Configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17724
        if (config && config.plugins) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17725
            this.plug(config.plugins);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17726
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17727
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17728
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17729
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17730
     * Registers plugins to be instantiated at the class level (plugins 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17731
     * which should be plugged into every instance of the class by default).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17732
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17733
     * @method plug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17734
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17735
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17736
     * @param {Function} hostClass The host class on which to register the plugins
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17737
     * @param {Function | Array} plugin Either the plugin class, an array of plugin classes or an array of objects (with fn and cfg properties defined)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17738
     * @param {Object} config (Optional) If plugin is the plugin class, the configuration for the plugin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17739
     * @for Plugin.Host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17740
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17741
    PluginHost.plug = function(hostClass, plugin, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17742
        // Cannot plug into Base, since Plugins derive from Base [ will cause infinite recurrsion ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17743
        var p, i, l, name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17744
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17745
        if (hostClass !== Y.Base) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17746
            hostClass._PLUG = hostClass._PLUG || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17747
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17748
            if (!L.isArray(plugin)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17749
                if (config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17750
                    plugin = {fn:plugin, cfg:config};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17751
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17752
                plugin = [plugin];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17753
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17754
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17755
            for (i = 0, l = plugin.length; i < l;i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17756
                p = plugin[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17757
                name = p.NAME || p.fn.NAME;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17758
                hostClass._PLUG[name] = p;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17759
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17760
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17761
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17763
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17764
     * Unregisters any class level plugins which have been registered by the host class, or any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17765
     * other class in the hierarchy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17766
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17767
     * @method unplug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17768
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17769
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17770
     * @param {Function} hostClass The host class from which to unregister the plugins
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17771
     * @param {Function | Array} plugin The plugin class, or an array of plugin classes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17772
     * @for Plugin.Host
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17773
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17774
    PluginHost.unplug = function(hostClass, plugin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17775
        var p, i, l, name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17776
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17777
        if (hostClass !== Y.Base) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17778
            hostClass._UNPLUG = hostClass._UNPLUG || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17779
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17780
            if (!L.isArray(plugin)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17781
                plugin = [plugin];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17782
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17783
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17784
            for (i = 0, l = plugin.length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17785
                p = plugin[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17786
                name = p.NAME;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17787
                if (!hostClass._PLUG[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17788
                    hostClass._UNPLUG[name] = p;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17789
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17790
                    delete hostClass._PLUG[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17791
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17792
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17793
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17794
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17797
}, '@VERSION@', {"requires": ["pluginhost-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17798
YUI.add('event-delegate', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17799
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17800
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17801
 * Adds event delegation support to the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17802
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17803
 * @module event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17804
 * @submodule event-delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17805
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17807
var toArray          = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17808
    YLang            = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17809
    isString         = YLang.isString,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17810
    isObject         = YLang.isObject,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17811
    isArray          = YLang.isArray,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17812
    selectorTest     = Y.Selector.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17813
    detachCategories = Y.Env.evt.handles;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17815
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17816
 * <p>Sets up event delegation on a container element.  The delegated event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17817
 * will use a supplied selector or filtering function to test if the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17818
 * references at least one node that should trigger the subscription
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17819
 * callback.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17820
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17821
 * <p>Selector string filters will trigger the callback if the event originated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17822
 * from a node that matches it or is contained in a node that matches it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17823
 * Function filters are called for each Node up the parent axis to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17824
 * subscribing container node, and receive at each level the Node and the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17825
 * object.  The function should return true (or a truthy value) if that Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17826
 * should trigger the subscription callback.  Note, it is possible for filters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17827
 * to match multiple Nodes for a single event.  In this case, the delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17828
 * callback will be executed for each matching Node.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17829
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17830
 * <p>For each matching Node, the callback will be executed with its 'this'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17831
 * object set to the Node matched by the filter (unless a specific context was
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17832
 * provided during subscription), and the provided event's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17833
 * <code>currentTarget</code> will also be set to the matching Node.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17834
 * containing Node from which the subscription was originally made can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17835
 * referenced as <code>e.container</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17836
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17837
 * @method delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17838
 * @param type {String} the event type to delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17839
 * @param fn {Function} the callback function to execute.  This function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17840
 *              will be provided the event object for the delegated event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17841
 * @param el {String|node} the element that is the delegation container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17842
 * @param filter {string|Function} a selector that must match the target of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17843
 *              event or a function to test target and its parents for a match
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17844
 * @param context optional argument that specifies what 'this' refers to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17845
 * @param args* 0..n additional arguments to pass on to the callback function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17846
 *              These arguments will be added after the event object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17847
 * @return {EventHandle} the detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17848
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17849
 * @for Event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17850
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17851
function delegate(type, fn, el, filter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17852
    var args     = toArray(arguments, 0, true),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17853
        query    = isString(el) ? el : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17854
        typeBits, synth, container, categories, cat, i, len, handles, handle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17856
    // Support Y.delegate({ click: fnA, key: fnB }, el, filter, ...);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17857
    // and Y.delegate(['click', 'key'], fn, el, filter, ...);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17858
    if (isObject(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17859
        handles = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17861
        if (isArray(type)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17862
            for (i = 0, len = type.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17863
                args[0] = type[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17864
                handles.push(Y.delegate.apply(Y, args));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17865
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17866
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17867
            // Y.delegate({'click', fn}, el, filter) =>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17868
            // Y.delegate('click', fn, el, filter)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17869
            args.unshift(null); // one arg becomes two; need to make space
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17871
            for (i in type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17872
                if (type.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17873
                    args[0] = i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17874
                    args[1] = type[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17875
                    handles.push(Y.delegate.apply(Y, args));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17876
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17877
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17878
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17879
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17880
        return new Y.EventHandle(handles);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17881
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17882
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17883
    typeBits = type.split(/\|/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17884
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17885
    if (typeBits.length > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17886
        cat  = typeBits.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17887
        args[0] = type = typeBits.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17888
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17890
    synth = Y.Node.DOM_EVENTS[type];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17892
    if (isObject(synth) && synth.delegate) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17893
        handle = synth.delegate.apply(synth, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17894
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17896
    if (!handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17897
        if (!type || !fn || !el || !filter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17898
            Y.log("delegate requires type, callback, parent, & filter", "warn");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17899
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17900
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17901
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17902
        container = (query) ? Y.Selector.query(query, null, true) : el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17903
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17904
        if (!container && isString(el)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17905
            handle = Y.on('available', function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17906
                Y.mix(handle, Y.delegate.apply(Y, args), true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17907
            }, el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17908
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17910
        if (!handle && container) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17911
            args.splice(2, 2, container); // remove the filter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17913
            handle = Y.Event._attach(args, { facade: false });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17914
            handle.sub.filter  = filter;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17915
            handle.sub._notify = delegate.notifySub;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17916
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17917
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17918
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17919
    if (handle && cat) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17920
        categories = detachCategories[cat]  || (detachCategories[cat] = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17921
        categories = categories[type] || (categories[type] = []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17922
        categories.push(handle);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17923
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17925
    return handle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17926
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17927
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17928
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17929
Overrides the <code>_notify</code> method on the normal DOM subscription to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17930
inject the filtering logic and only proceed in the case of a match.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17931
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17932
This method is hosted as a private property of the `delegate` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17933
(e.g. `Y.delegate.notifySub`)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17934
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17935
@method notifySub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17936
@param thisObj {Object} default 'this' object for the callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17937
@param args {Array} arguments passed to the event's <code>fire()</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17938
@param ce {CustomEvent} the custom event managing the DOM subscriptions for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17939
             the subscribed event on the subscribing node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17940
@return {Boolean} false if the event was stopped
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17941
@private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17942
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17943
@since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17944
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17945
delegate.notifySub = function (thisObj, args, ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17946
    // Preserve args for other subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17947
    args = args.slice();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17948
    if (this.args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17949
        args.push.apply(args, this.args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17950
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17952
    // Only notify subs if the event occurred on a targeted element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17953
    var currentTarget = delegate._applyFilter(this.filter, args, ce),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17954
        //container     = e.currentTarget,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17955
        e, i, len, ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17956
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17957
    if (currentTarget) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17958
        // Support multiple matches up the the container subtree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17959
        currentTarget = toArray(currentTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17961
        // The second arg is the currentTarget, but we'll be reusing this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17962
        // facade, replacing the currentTarget for each use, so it doesn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17963
        // matter what element we seed it with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17964
        e = args[0] = new Y.DOMEventFacade(args[0], ce.el, ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17965
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17966
        e.container = Y.one(ce.el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17967
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17968
        for (i = 0, len = currentTarget.length; i < len && !e.stopped; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17969
            e.currentTarget = Y.one(currentTarget[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17970
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17971
            ret = this.fn.apply(this.context || e.currentTarget, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17972
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17973
            if (ret === false) { // stop further notifications
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17974
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17975
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17976
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17977
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17978
        return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17979
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17980
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17981
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17982
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17983
Compiles a selector string into a filter function to identify whether
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17984
Nodes along the parent axis of an event's target should trigger event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17985
notification.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17987
This function is memoized, so previously compiled filter functions are
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17988
returned if the same selector string is provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17989
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17990
This function may be useful when defining synthetic events for delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17991
handling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17992
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17993
Hosted as a property of the `delegate` method (e.g. `Y.delegate.compileFilter`).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17995
@method compileFilter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17996
@param selector {String} the selector string to base the filtration on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17997
@return {Function}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17998
@since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 17999
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18000
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18001
delegate.compileFilter = Y.cached(function (selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18002
    return function (target, e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18003
        return selectorTest(target._node, selector,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18004
            (e.currentTarget === e.target) ? null : e.currentTarget._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18005
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18006
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18008
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18009
Regex to test for disabled elements during filtering. This is only relevant to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18010
IE to normalize behavior with other browsers, which swallow events that occur
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18011
to disabled elements. IE fires the event from the parent element instead of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18012
original target, though it does preserve `event.srcElement` as the disabled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18013
element. IE also supports disabled on `<a>`, but the event still bubbles, so it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18014
acts more like `e.preventDefault()` plus styling. That issue is not handled here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18015
because other browsers fire the event on the `<a>`, so delegate is supported in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18016
both cases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18017
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18018
@property _disabledRE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18019
@type {RegExp}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18020
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18021
@since 3.8.1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18022
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18023
delegate._disabledRE = /^(?:button|input|select|textarea)$/i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18025
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18026
Walks up the parent axis of an event's target, and tests each element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18027
against a supplied filter function.  If any Nodes, including the container,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18028
satisfy the filter, the delegated callback will be triggered for each.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18029
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18030
Hosted as a protected property of the `delegate` method (e.g.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18031
`Y.delegate._applyFilter`).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18032
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18033
@method _applyFilter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18034
@param filter {Function} boolean function to test for inclusion in event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18035
                 notification
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18036
@param args {Array} the arguments that would be passed to subscribers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18037
@param ce   {CustomEvent} the DOM event wrapper
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18038
@return {Node|Node[]|undefined} The Node or Nodes that satisfy the filter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18039
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18040
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18041
delegate._applyFilter = function (filter, args, ce) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18042
    var e         = args[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18043
        container = ce.el, // facadeless events in IE, have no e.currentTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18044
        target    = e.target || e.srcElement,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18045
        match     = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18046
        isContainer = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18047
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18048
    // Resolve text nodes to their containing element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18049
    if (target.nodeType === 3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18050
        target = target.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18051
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18052
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18053
    // For IE. IE propagates events from the parent element of disabled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18054
    // elements, where other browsers swallow the event entirely. To normalize
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18055
    // this in IE, filtering for matching elements should abort if the target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18056
    // is a disabled form control.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18057
    if (target.disabled && delegate._disabledRE.test(target.nodeName)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18058
        return match;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18059
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18060
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18061
    // passing target as the first arg rather than leaving well enough alone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18062
    // making 'this' in the filter function refer to the target.  This is to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18063
    // support bound filter functions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18064
    args.unshift(target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18065
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18066
    if (isString(filter)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18067
        while (target) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18068
            isContainer = (target === container);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18069
            if (selectorTest(target, filter, (isContainer ? null: container))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18070
                match.push(target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18071
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18072
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18073
            if (isContainer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18074
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18075
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18076
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18077
            target = target.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18078
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18079
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18080
        // filter functions are implementer code and should receive wrappers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18081
        args[0] = Y.one(target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18082
        args[1] = new Y.DOMEventFacade(e, container, ce);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18083
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18084
        while (target) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18085
            // filter(target, e, extra args...) - this === target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18086
            if (filter.apply(args[0], args)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18087
                match.push(target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18088
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18089
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18090
            if (target === container) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18091
                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18092
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18094
            target = target.parentNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18095
            args[0] = Y.one(target);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18096
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18097
        args[1] = e; // restore the raw DOM event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18098
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18100
    if (match.length <= 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18101
        match = match[0]; // single match or undefined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18102
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18104
    // remove the target
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18105
    args.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18107
    return match;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18108
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18110
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18111
 * Sets up event delegation on a container element.  The delegated event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18112
 * will use a supplied filter to test if the callback should be executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18113
 * This filter can be either a selector string or a function that returns
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18114
 * a Node to use as the currentTarget for the event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18115
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18116
 * The event object for the delegated event is supplied to the callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18117
 * function.  It is modified slightly in order to support all properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18118
 * that may be needed for event delegation.  'currentTarget' is set to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18119
 * the element that matched the selector string filter or the Node returned
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18120
 * from the filter function.  'container' is set to the element that the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18121
 * listener is delegated from (this normally would be the 'currentTarget').
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18122
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18123
 * Filter functions will be called with the arguments that would be passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18124
 * the callback function, including the event object as the first parameter.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18125
 * The function should return false (or a falsey value) if the success criteria
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18126
 * aren't met, and the Node to use as the event's currentTarget and 'this'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18127
 * object if they are.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18128
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18129
 * @method delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18130
 * @param type {string} the event type to delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18131
 * @param fn {function} the callback function to execute.  This function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18132
 * will be provided the event object for the delegated event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18133
 * @param el {string|node} the element that is the delegation container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18134
 * @param filter {string|function} a selector that must match the target of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18135
 * event or a function that returns a Node or false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18136
 * @param context optional argument that specifies what 'this' refers to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18137
 * @param args* 0..n additional arguments to pass on to the callback function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18138
 * These arguments will be added after the event object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18139
 * @return {EventHandle} the detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18140
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18141
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18142
Y.delegate = Y.Event.delegate = delegate;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18145
}, '@VERSION@', {"requires": ["node-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18146
YUI.add('node-event-delegate', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18148
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18149
 * Functionality to make the node a delegated event container
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18150
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18151
 * @submodule node-event-delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18152
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18154
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18155
 * <p>Sets up a delegation listener for an event occurring inside the Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18156
 * The delegated event will be verified against a supplied selector or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18157
 * filtering function to test if the event references at least one node that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18158
 * should trigger the subscription callback.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18159
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18160
 * <p>Selector string filters will trigger the callback if the event originated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18161
 * from a node that matches it or is contained in a node that matches it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18162
 * Function filters are called for each Node up the parent axis to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18163
 * subscribing container node, and receive at each level the Node and the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18164
 * object.  The function should return true (or a truthy value) if that Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18165
 * should trigger the subscription callback.  Note, it is possible for filters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18166
 * to match multiple Nodes for a single event.  In this case, the delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18167
 * callback will be executed for each matching Node.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18168
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18169
 * <p>For each matching Node, the callback will be executed with its 'this'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18170
 * object set to the Node matched by the filter (unless a specific context was
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18171
 * provided during subscription), and the provided event's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18172
 * <code>currentTarget</code> will also be set to the matching Node.  The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18173
 * containing Node from which the subscription was originally made can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18174
 * referenced as <code>e.container</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18175
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18176
 * @method delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18177
 * @param type {String} the event type to delegate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18178
 * @param fn {Function} the callback function to execute.  This function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18179
 *              will be provided the event object for the delegated event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18180
 * @param spec {String|Function} a selector that must match the target of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18181
 *              event or a function to test target and its parents for a match
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18182
 * @param context {Object} optional argument that specifies what 'this' refers to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18183
 * @param args* {any} 0..n additional arguments to pass on to the callback function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18184
 *              These arguments will be added after the event object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18185
 * @return {EventHandle} the detach handle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18186
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18187
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18188
Y.Node.prototype.delegate = function(type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18190
    var args = Y.Array(arguments, 0, true),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18191
        index = (Y.Lang.isObject(type) && !Y.Lang.isArray(type)) ? 1 : 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18193
    args.splice(index, 0, this._node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18195
    return Y.delegate.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18196
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18199
}, '@VERSION@', {"requires": ["node-base", "event-delegate"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18200
YUI.add('node-pluginhost', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18202
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18203
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18204
 * @submodule node-pluginhost
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18205
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18207
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18208
 * Registers plugins to be instantiated at the class level (plugins
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18209
 * which should be plugged into every instance of Node by default).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18210
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18211
 * @method plug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18212
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18213
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18214
 * @param {Function | Array} plugin Either the plugin class, an array of plugin classes or an array of objects (with fn and cfg properties defined)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18215
 * @param {Object} config (Optional) If plugin is the plugin class, the configuration for the plugin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18216
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18217
Y.Node.plug = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18218
    var args = Y.Array(arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18219
    args.unshift(Y.Node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18220
    Y.Plugin.Host.plug.apply(Y.Base, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18221
    return Y.Node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18222
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18224
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18225
 * Unregisters any class level plugins which have been registered by the Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18226
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18227
 * @method unplug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18228
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18229
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18230
 * @param {Function | Array} plugin The plugin class, or an array of plugin classes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18231
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18232
Y.Node.unplug = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18233
    var args = Y.Array(arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18234
    args.unshift(Y.Node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18235
    Y.Plugin.Host.unplug.apply(Y.Base, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18236
    return Y.Node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18237
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18239
Y.mix(Y.Node, Y.Plugin.Host, false, null, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18241
// allow batching of plug/unplug via NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18242
// doesn't use NodeList.importMethod because we need real Nodes (not tmpNode)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18243
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18244
 * Adds a plugin to each node in the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18245
 * This will instantiate the plugin and attach it to the configured namespace on each node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18246
 * @method plug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18247
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18248
 * @param P {Function | Object |Array} Accepts the plugin class, or an 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18249
 * object with a "fn" property specifying the plugin class and 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18250
 * a "cfg" property specifying the configuration for the Plugin.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18251
 * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18252
 * Additionally an Array can also be passed in, with the above function or 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18253
 * object values, allowing the user to add multiple plugins in a single call.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18254
 * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18255
 * @param config (Optional) If the first argument is the plugin class, the second argument
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18256
 * can be the configuration for the plugin.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18257
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18258
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18259
Y.NodeList.prototype.plug = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18260
    var args = arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18261
    Y.NodeList.each(this, function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18262
        Y.Node.prototype.plug.apply(Y.one(node), args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18263
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18264
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18265
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18267
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18268
 * Removes a plugin from all nodes in the NodeList. This will destroy the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18269
 * plugin instance and delete the namespace each node. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18270
 * @method unplug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18271
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18272
 * @param {String | Function} plugin The namespace of the plugin, or the plugin class with the static NS namespace property defined. If not provided,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18273
 * all registered plugins are unplugged.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18274
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18275
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18276
Y.NodeList.prototype.unplug = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18277
    var args = arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18278
    Y.NodeList.each(this, function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18279
        Y.Node.prototype.unplug.apply(Y.one(node), args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18280
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18281
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18282
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18285
}, '@VERSION@', {"requires": ["node-base", "pluginhost"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18286
YUI.add('node-screen', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18288
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18289
 * Extended Node interface for managing regions and screen positioning.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18290
 * Adds support for positioning elements and normalizes window size and scroll detection. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18291
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18292
 * @submodule node-screen
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18293
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18295
// these are all "safe" returns, no wrapping required
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18296
Y.each([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18297
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18298
     * Returns the inner width of the viewport (exludes scrollbar). 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18299
     * @config winWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18300
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18301
     * @type {Int}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18302
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18303
    'winWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18305
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18306
     * Returns the inner height of the viewport (exludes scrollbar). 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18307
     * @config winHeight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18308
     * @type {Int}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18309
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18310
    'winHeight',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18312
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18313
     * Document width 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18314
     * @config docWidth
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18315
     * @type {Int}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18316
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18317
    'docWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18319
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18320
     * Document height 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18321
     * @config docHeight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18322
     * @type {Int}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18323
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18324
    'docHeight',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18326
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18327
     * Pixel distance the page has been scrolled horizontally 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18328
     * @config docScrollX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18329
     * @type {Int}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18330
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18331
    'docScrollX',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18333
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18334
     * Pixel distance the page has been scrolled vertically 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18335
     * @config docScrollY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18336
     * @type {Int}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18337
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18338
    'docScrollY'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18339
    ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18340
    function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18341
        Y.Node.ATTRS[name] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18342
            getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18343
                var args = Array.prototype.slice.call(arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18344
                args.unshift(Y.Node.getDOMNode(this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18346
                return Y.DOM[name].apply(this, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18347
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18348
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18349
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18350
);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18352
Y.Node.ATTRS.scrollLeft = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18353
    getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18354
        var node = Y.Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18355
        return ('scrollLeft' in node) ? node.scrollLeft : Y.DOM.docScrollX(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18356
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18357
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18358
    setter: function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18359
        var node = Y.Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18360
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18361
            if ('scrollLeft' in node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18362
                node.scrollLeft = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18363
            } else if (node.document || node.nodeType === 9) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18364
                Y.DOM._getWin(node).scrollTo(val, Y.DOM.docScrollY(node)); // scroll window if win or doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18365
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18366
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18367
            Y.log('unable to set scrollLeft for ' + node, 'error', 'Node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18368
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18369
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18370
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18372
Y.Node.ATTRS.scrollTop = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18373
    getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18374
        var node = Y.Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18375
        return ('scrollTop' in node) ? node.scrollTop : Y.DOM.docScrollY(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18376
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18378
    setter: function(val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18379
        var node = Y.Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18380
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18381
            if ('scrollTop' in node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18382
                node.scrollTop = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18383
            } else if (node.document || node.nodeType === 9) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18384
                Y.DOM._getWin(node).scrollTo(Y.DOM.docScrollX(node), val); // scroll window if win or doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18385
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18386
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18387
            Y.log('unable to set scrollTop for ' + node, 'error', 'Node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18388
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18389
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18390
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18392
Y.Node.importMethod(Y.DOM, [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18393
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18394
 * Gets the current position of the node in page coordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18395
 * @method getXY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18396
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18397
 * @return {Array} The XY position of the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18398
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18399
    'getXY',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18400
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18401
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18402
 * Set the position of the node in page coordinates, regardless of how the node is positioned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18403
 * @method setXY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18404
 * @param {Array} xy Contains X & Y values for new position (coordinates are page-based)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18405
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18406
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18407
    'setXY',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18409
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18410
 * Gets the current position of the node in page coordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18411
 * @method getX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18412
 * @return {Int} The X position of the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18413
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18414
    'getX',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18416
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18417
 * Set the position of the node in page coordinates, regardless of how the node is positioned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18418
 * @method setX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18419
 * @param {Int} x X value for new position (coordinates are page-based)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18420
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18421
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18422
    'setX',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18424
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18425
 * Gets the current position of the node in page coordinates. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18426
 * @method getY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18427
 * @return {Int} The Y position of the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18428
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18429
    'getY',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18430
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18431
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18432
 * Set the position of the node in page coordinates, regardless of how the node is positioned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18433
 * @method setY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18434
 * @param {Int} y Y value for new position (coordinates are page-based)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18435
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18436
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18437
    'setY',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18439
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18440
 * Swaps the XY position of this node with another node. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18441
 * @method swapXY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18442
 * @param {Node | HTMLElement} otherNode The node to swap with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18443
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18444
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18445
    'swapXY'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18446
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18447
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18448
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18449
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18450
 * @submodule node-screen
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18451
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18452
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18453
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18454
 * Returns a region object for the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18455
 * @config region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18456
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18457
 * @type Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18458
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18459
Y.Node.ATTRS.region = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18460
    getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18461
        var node = this.getDOMNode(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18462
            region;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18464
        if (node && !node.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18465
            if (node.nodeType === 9) { // document
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18466
                node = node.documentElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18467
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18468
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18469
        if (Y.DOM.isWindow(node)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18470
            region = Y.DOM.viewportRegion(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18471
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18472
            region = Y.DOM.region(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18473
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18474
        return region;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18475
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18476
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18478
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18479
 * Returns a region object for the node's viewport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18480
 * @config viewportRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18481
 * @type Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18482
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18483
Y.Node.ATTRS.viewportRegion = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18484
    getter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18485
        return Y.DOM.viewportRegion(Y.Node.getDOMNode(this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18486
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18487
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18489
Y.Node.importMethod(Y.DOM, 'inViewportRegion');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18490
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18491
// these need special treatment to extract 2nd node arg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18492
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18493
 * Compares the intersection of the node with another node or region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18494
 * @method intersect
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18495
 * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18496
 * @param {Node|Object} node2 The node or region to compare with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18497
 * @param {Object} altRegion An alternate region to use (rather than this node's).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18498
 * @return {Object} An object representing the intersection of the regions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18499
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18500
Y.Node.prototype.intersect = function(node2, altRegion) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18501
    var node1 = Y.Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18502
    if (Y.instanceOf(node2, Y.Node)) { // might be a region object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18503
        node2 = Y.Node.getDOMNode(node2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18504
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18505
    return Y.DOM.intersect(node1, node2, altRegion);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18506
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18508
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18509
 * Determines whether or not the node is within the giving region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18510
 * @method inRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18511
 * @param {Node|Object} node2 The node or region to compare with.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18512
 * @param {Boolean} all Whether or not all of the node must be in the region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18513
 * @param {Object} altRegion An alternate region to use (rather than this node's).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18514
 * @return {Boolean} True if in region, false if not.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18515
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18516
Y.Node.prototype.inRegion = function(node2, all, altRegion) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18517
    var node1 = Y.Node.getDOMNode(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18518
    if (Y.instanceOf(node2, Y.Node)) { // might be a region object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18519
        node2 = Y.Node.getDOMNode(node2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18520
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18521
    return Y.DOM.inRegion(node1, node2, all, altRegion);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18522
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18525
}, '@VERSION@', {"requires": ["dom-screen", "node-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18526
YUI.add('node-style', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18528
(function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18529
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18530
 * Extended Node interface for managing node styles.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18531
 * @module node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18532
 * @submodule node-style
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18533
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18535
Y.mix(Y.Node.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18536
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18537
     * Sets a style property of the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18538
     * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18539
     * @method setStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18540
     * @param {String} attr The style attribute to set. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18541
     * @param {String|Number} val The value. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18542
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18543
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18544
    setStyle: function(attr, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18545
        Y.DOM.setStyle(this._node, attr, val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18546
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18547
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18549
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18550
     * Sets multiple style properties on the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18551
     * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18552
     * @method setStyles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18553
     * @param {Object} hash An object literal of property:value pairs. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18554
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18555
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18556
    setStyles: function(hash) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18557
        Y.DOM.setStyles(this._node, hash);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18558
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18559
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18561
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18562
     * Returns the style's current value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18563
     * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18564
     * @method getStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18565
     * @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18566
     * @param {String} attr The style attribute to retrieve. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18567
     * @return {String} The current value of the style property for the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18568
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18570
     getStyle: function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18571
        return Y.DOM.getStyle(this._node, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18572
     },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18574
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18575
     * Returns the computed value for the given style property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18576
     * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18577
     * @method getComputedStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18578
     * @param {String} attr The style attribute to retrieve. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18579
     * @return {String} The computed value of the style property for the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18580
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18581
     getComputedStyle: function(attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18582
        return Y.DOM.getComputedStyle(this._node, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18583
     }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18584
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18586
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18587
 * Returns an array of values for each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18588
 * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18589
 * @method getStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18590
 * @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18591
 * @see Node.getStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18592
 * @param {String} attr The style attribute to retrieve. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18593
 * @return {Array} The current values of the style property for the element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18594
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18596
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18597
 * Returns an array of the computed value for each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18598
 * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18599
 * @method getComputedStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18600
 * @see Node.getComputedStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18601
 * @param {String} attr The style attribute to retrieve. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18602
 * @return {Array} The computed values for each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18603
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18605
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18606
 * Sets a style property on each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18607
 * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18608
 * @method setStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18609
 * @see Node.setStyle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18610
 * @param {String} attr The style attribute to set. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18611
 * @param {String|Number} val The value. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18612
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18613
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18614
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18615
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18616
 * Sets multiple style properties on each node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18617
 * Use camelCase (e.g. 'backgroundColor') for multi-word properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18618
 * @method setStyles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18619
 * @see Node.setStyles
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18620
 * @param {Object} hash An object literal of property:value pairs. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18621
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18622
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18624
// These are broken out to handle undefined return (avoid false positive for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18625
// chainable)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18627
Y.NodeList.importMethod(Y.Node.prototype, ['getStyle', 'getComputedStyle', 'setStyle', 'setStyles']);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18628
})(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18631
}, '@VERSION@', {"requires": ["dom-style", "node-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18632
YUI.add('querystring-stringify-simple', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18633
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18634
/*global Y */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18635
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18636
 * <p>Provides Y.QueryString.stringify method for converting objects to Query Strings.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18637
 * This is a subset implementation of the full querystring-stringify.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18638
 * <p>This module provides the bare minimum functionality (encoding a hash of simple values),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18639
 * without the additional support for nested data structures.  Every key-value pair is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18640
 * encoded by encodeURIComponent.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18641
 * <p>This module provides a minimalistic way for io to handle  single-level objects
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18642
 * as transaction data.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18643
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18644
 * @module querystring
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18645
 * @submodule querystring-stringify-simple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18646
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18648
var QueryString = Y.namespace("QueryString"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18649
    EUC = encodeURIComponent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18651
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18652
QueryString.stringify = function (obj, c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18653
    var qs = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18654
        // Default behavior is false; standard key notation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18655
        s = c && c.arrayKey ? true : false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18656
        key, i, l;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18658
    for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18659
        if (obj.hasOwnProperty(key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18660
            if (Y.Lang.isArray(obj[key])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18661
                for (i = 0, l = obj[key].length; i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18662
                    qs.push(EUC(s ? key + '[]' : key) + '=' + EUC(obj[key][i]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18663
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18664
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18665
            else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18666
                qs.push(EUC(key) + '=' + EUC(obj[key]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18667
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18668
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18669
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18671
    return qs.join('&');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18672
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18675
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18676
YUI.add('io-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18678
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18679
Base IO functionality. Provides basic XHR transport support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18681
@module io
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18682
@submodule io-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18683
@for IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18684
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18686
var // List of events that comprise the IO event lifecycle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18687
    EVENTS = ['start', 'complete', 'end', 'success', 'failure', 'progress'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18689
    // Whitelist of used XHR response object properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18690
    XHR_PROPS = ['status', 'statusText', 'responseText', 'responseXML'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18692
    win = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18693
    uid = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18695
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18696
The IO class is a utility that brokers HTTP requests through a simplified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18697
interface.  Specifically, it allows JavaScript to make HTTP requests to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18698
a resource without a page reload.  The underlying transport for making
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18699
same-domain requests is the XMLHttpRequest object.  IO can also use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18700
Flash, if specified as a transport, for cross-domain requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18702
@class IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18703
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18704
@param {Object} config Object of EventTarget's publish method configurations
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18705
                    used to configure IO's events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18706
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18707
function IO (config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18708
    var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18710
    io._uid = 'io:' + uid++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18711
    io._init(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18712
    Y.io._map[io._uid] = io;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18713
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18715
IO.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18716
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18717
    //  Properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18718
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18720
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18721
    * A counter that increments for each transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18722
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18723
    * @property _id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18724
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18725
    * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18726
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18727
    _id: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18728
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18729
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18730
    * Object of IO HTTP headers sent with each transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18731
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18732
    * @property _headers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18733
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18734
    * @type {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18735
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18736
    _headers: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18737
        'X-Requested-With' : 'XMLHttpRequest'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18738
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18740
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18741
    * Object that stores timeout values for any transaction with a defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18742
    * "timeout" configuration property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18743
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18744
    * @property _timeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18745
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18746
    * @type {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18747
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18748
    _timeout: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18749
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18750
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18751
    //  Methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18752
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18754
    _init: function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18755
        var io = this, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18757
        io.cfg = config || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18758
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18759
        Y.augment(io, Y.EventTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18760
        for (i = 0, len = EVENTS.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18761
            // Publish IO global events with configurations, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18762
            // IO global events are set to broadcast by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18763
            // These events use the "io:" namespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18764
            io.publish('io:' + EVENTS[i], Y.merge({ broadcast: 1 }, config));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18765
            // Publish IO transaction events with configurations, if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18766
            // any.  These events use the "io-trn:" namespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18767
            io.publish('io-trn:' + EVENTS[i], config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18768
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18769
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18770
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18771
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18772
    * Method that creates a unique transaction object for each request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18773
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18774
    * @method _create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18775
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18776
    * @param {Object} cfg Configuration object subset to determine if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18777
    *                 the transaction is an XDR or file upload,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18778
    *                 requiring an alternate transport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18779
    * @param {Number} id Transaction id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18780
    * @return {Object} The transaction object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18781
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18782
    _create: function(config, id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18783
        var io = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18784
            transaction = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18785
                id : Y.Lang.isNumber(id) ? id : io._id++,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18786
                uid: io._uid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18787
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18788
            alt = config.xdr ? config.xdr.use : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18789
            form = config.form && config.form.upload ? 'iframe' : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18790
            use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18791
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18792
        if (alt === 'native') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18793
            // Non-IE and IE >= 10  can use XHR level 2 and not rely on an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18794
            // external transport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18795
            alt = Y.UA.ie && !SUPPORTS_CORS ? 'xdr' : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18797
            // Prevent "pre-flight" OPTIONS request by removing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18798
            // `X-Requested-With` HTTP header from CORS requests. This header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18799
            // can be added back on a per-request basis, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18800
            io.setHeader('X-Requested-With');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18801
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18802
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18803
        use = alt || form;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18804
        transaction = use ? Y.merge(Y.IO.customTransport(use), transaction) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18805
                            Y.merge(Y.IO.defaultTransport(), transaction);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18807
        if (transaction.notify) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18808
            config.notify = function (e, t, c) { io.notify(e, t, c); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18809
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18810
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18811
        if (!use) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18812
            if (win && win.FormData && config.data instanceof win.FormData) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18813
                transaction.c.upload.onprogress = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18814
                    io.progress(transaction, e, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18815
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18816
                transaction.c.onload = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18817
                    io.load(transaction, e, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18818
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18819
                transaction.c.onerror = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18820
                    io.error(transaction, e, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18821
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18822
                transaction.upload = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18823
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18824
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18825
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18826
        return transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18827
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18829
    _destroy: function(transaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18830
        if (win && !transaction.notify && !transaction.xdr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18831
            if (XHR && !transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18832
                transaction.c.onreadystatechange = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18833
            } else if (transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18834
                transaction.c.upload.onprogress = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18835
                transaction.c.onload = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18836
                transaction.c.onerror = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18837
            } else if (Y.UA.ie && !transaction.e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18838
                // IE, when using XMLHttpRequest as an ActiveX Object, will throw
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18839
                // a "Type Mismatch" error if the event handler is set to "null".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18840
                transaction.c.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18841
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18842
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18843
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18844
        transaction = transaction.c = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18845
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18847
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18848
    * Method for creating and firing events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18849
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18850
    * @method _evt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18851
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18852
    * @param {String} eventName Event to be published.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18853
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18854
    * @param {Object} config Configuration data subset for event subscription.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18855
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18856
    _evt: function(eventName, transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18857
        var io          = this, params,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18858
            args        = config['arguments'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18859
            emitFacade  = io.cfg.emitFacade,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18860
            globalEvent = "io:" + eventName,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18861
            trnEvent    = "io-trn:" + eventName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18863
        // Workaround for #2532107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18864
        this.detach(trnEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18866
        if (transaction.e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18867
            transaction.c = { status: 0, statusText: transaction.e };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18868
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18869
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18870
        // Fire event with parameters or an Event Facade.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18871
        params = [ emitFacade ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18872
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18873
                id: transaction.id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18874
                data: transaction.c,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18875
                cfg: config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18876
                'arguments': args
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18877
            } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18878
            transaction.id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18879
        ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18881
        if (!emitFacade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18882
            if (eventName === EVENTS[0] || eventName === EVENTS[2]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18883
                if (args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18884
                    params.push(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18885
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18886
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18887
                if (transaction.evt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18888
                    params.push(transaction.evt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18889
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18890
                    params.push(transaction.c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18891
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18892
                if (args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18893
                    params.push(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18894
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18895
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18896
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18898
        params.unshift(globalEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18899
        // Fire global events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18900
        io.fire.apply(io, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18901
        // Fire transaction events, if receivers are defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18902
        if (config.on) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18903
            params[0] = trnEvent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18904
            io.once(trnEvent, config.on[eventName], config.context || Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18905
            io.fire.apply(io, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18906
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18907
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18909
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18910
    * Fires event "io:start" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18911
    * start event, if `config.on.start` is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18912
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18913
    * @method start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18914
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18915
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18916
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18917
    start: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18918
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18919
        * Signals the start of an IO request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18920
        * @event io:start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18921
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18922
        this._evt(EVENTS[0], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18923
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18925
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18926
    * Fires event "io:complete" and creates, fires a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18927
    * transaction-specific "complete" event, if config.on.complete is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18928
    * defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18929
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18930
    * @method complete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18931
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18932
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18933
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18934
    complete: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18935
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18936
        * Signals the completion of the request-response phase of a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18937
        * transaction. Response status and data are accessible, if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18938
        * available, in this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18939
        * @event io:complete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18940
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18941
        this._evt(EVENTS[1], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18942
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18944
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18945
    * Fires event "io:end" and creates, fires a transaction-specific "end"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18946
    * event, if config.on.end is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18947
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18948
    * @method end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18949
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18950
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18951
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18952
    end: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18953
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18954
        * Signals the end of the transaction lifecycle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18955
        * @event io:end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18956
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18957
        this._evt(EVENTS[2], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18958
        this._destroy(transaction);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18959
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18961
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18962
    * Fires event "io:success" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18963
    * "success" event, if config.on.success is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18964
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18965
    * @method success
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18966
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18967
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18968
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18969
    success: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18970
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18971
        * Signals an HTTP response with status in the 2xx range.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18972
        * Fires after io:complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18973
        * @event io:success
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18974
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18975
        this._evt(EVENTS[3], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18976
        this.end(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18977
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18978
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18979
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18980
    * Fires event "io:failure" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18981
    * "failure" event, if config.on.failure is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18982
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18983
    * @method failure
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18984
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18985
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18986
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18987
    failure: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18988
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18989
        * Signals an HTTP response with status outside of the 2xx range.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18990
        * Fires after io:complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18991
        * @event io:failure
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18992
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18993
        this._evt(EVENTS[4], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18994
        this.end(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18995
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18997
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18998
    * Fires event "io:progress" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 18999
    * "progress" event -- for XMLHttpRequest file upload -- if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19000
    * config.on.progress is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19001
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19002
    * @method progress
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19003
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19004
    * @param {Object} progress event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19005
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19006
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19007
    progress: function(transaction, e, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19008
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19009
        * Signals the interactive state during a file upload transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19010
        * This event fires after io:start and before io:complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19011
        * @event io:progress
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19012
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19013
        transaction.evt = e;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19014
        this._evt(EVENTS[5], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19015
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19016
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19017
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19018
    * Fires event "io:complete" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19019
    * "complete" event -- for XMLHttpRequest file upload -- if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19020
    * config.on.complete is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19021
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19022
    * @method load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19023
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19024
    * @param {Object} load event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19025
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19026
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19027
    load: function (transaction, e, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19028
        transaction.evt = e.target;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19029
        this._evt(EVENTS[1], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19030
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19032
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19033
    * Fires event "io:failure" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19034
    * "failure" event -- for XMLHttpRequest file upload -- if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19035
    * config.on.failure is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19036
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19037
    * @method error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19038
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19039
    * @param {Object} error event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19040
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19041
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19042
    error: function (transaction, e, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19043
        transaction.evt = e;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19044
        this._evt(EVENTS[4], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19045
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19047
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19048
    * Retry an XDR transaction, using the Flash tranport, if the native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19049
    * transport fails.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19050
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19051
    * @method _retry
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19052
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19053
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19054
    * @param {String} uri Qualified path to transaction resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19055
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19056
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19057
    _retry: function(transaction, uri, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19058
        this._destroy(transaction);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19059
        config.xdr.use = 'flash';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19060
        return this.send(uri, config, transaction.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19061
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19062
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19063
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19064
    * Method that concatenates string data for HTTP GET transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19065
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19066
    * @method _concat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19067
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19068
    * @param {String} uri URI or root data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19069
    * @param {String} data Data to be concatenated onto URI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19070
    * @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19071
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19072
    _concat: function(uri, data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19073
        uri += (uri.indexOf('?') === -1 ? '?' : '&') + data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19074
        return uri;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19075
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19076
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19077
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19078
    * Stores default client headers for all transactions. If a label is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19079
    * passed with no value argument, the header will be deleted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19080
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19081
    * @method setHeader
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19082
    * @param {String} name HTTP header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19083
    * @param {String} value HTTP header value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19084
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19085
    setHeader: function(name, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19086
        if (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19087
            this._headers[name] = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19088
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19089
            delete this._headers[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19090
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19091
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19092
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19093
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19094
    * Method that sets all HTTP headers to be sent in a transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19095
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19096
    * @method _setHeaders
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19097
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19098
    * @param {Object} transaction - XHR instance for the specific transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19099
    * @param {Object} headers - HTTP headers for the specific transaction, as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19100
    *                    defined in the configuration object passed to YUI.io().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19101
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19102
    _setHeaders: function(transaction, headers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19103
        headers = Y.merge(this._headers, headers);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19104
        Y.Object.each(headers, function(value, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19105
            if (value !== 'disable') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19106
                transaction.setRequestHeader(name, headers[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19107
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19108
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19109
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19111
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19112
    * Starts timeout count if the configuration object has a defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19113
    * timeout property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19114
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19115
    * @method _startTimeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19116
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19117
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19118
    * @param {Object} timeout Timeout in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19119
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19120
    _startTimeout: function(transaction, timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19121
        var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19123
        io._timeout[transaction.id] = setTimeout(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19124
            io._abort(transaction, 'timeout');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19125
        }, timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19126
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19128
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19129
    * Clears the timeout interval started by _startTimeout().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19130
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19131
    * @method _clearTimeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19132
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19133
    * @param {Number} id - Transaction id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19134
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19135
    _clearTimeout: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19136
        clearTimeout(this._timeout[id]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19137
        delete this._timeout[id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19138
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19140
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19141
    * Method that determines if a transaction response qualifies as success
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19142
    * or failure, based on the response HTTP status code, and fires the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19143
    * appropriate success or failure events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19144
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19145
    * @method _result
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19146
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19147
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19148
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19149
    * @param {Object} config Configuration object passed to io().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19150
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19151
    _result: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19152
        var status;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19153
        // Firefox will throw an exception if attempting to access
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19154
        // an XHR object's status property, after a request is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19155
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19156
            status = transaction.c.status;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19157
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19158
            status = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19159
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19161
        // IE reports HTTP 204 as HTTP 1223.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19162
        if (status >= 200 && status < 300 || status === 304 || status === 1223) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19163
            this.success(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19164
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19165
            this.failure(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19166
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19167
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19169
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19170
    * Event handler bound to onreadystatechange.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19171
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19172
    * @method _rS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19173
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19174
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19175
    * @param {Object} config Configuration object passed to YUI.io().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19176
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19177
    _rS: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19178
        var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19180
        if (transaction.c.readyState === 4) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19181
            if (config.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19182
                io._clearTimeout(transaction.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19183
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19185
            // Yield in the event of request timeout or abort.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19186
            setTimeout(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19187
                io.complete(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19188
                io._result(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19189
            }, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19190
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19191
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19193
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19194
    * Terminates a transaction due to an explicit abort or timeout.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19195
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19196
    * @method _abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19197
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19198
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19199
    * @param {String} type Identifies timed out or aborted transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19200
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19201
    _abort: function(transaction, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19202
        if (transaction && transaction.c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19203
            transaction.e = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19204
            transaction.c.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19205
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19206
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19208
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19209
    * Requests a transaction. `send()` is implemented as `Y.io()`.  Each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19210
    * transaction may include a configuration object.  Its properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19211
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19212
    * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19213
    *   <dt>method</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19214
    *     <dd>HTTP method verb (e.g., GET or POST). If this property is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19215
    *         not defined, the default value will be GET.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19216
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19217
    *   <dt>data</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19218
    *     <dd>This is the name-value string that will be sent as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19219
    *     transaction data. If the request is HTTP GET, the data become
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19220
    *     part of querystring. If HTTP POST, the data are sent in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19221
    *     message body.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19222
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19223
    *   <dt>xdr</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19224
    *     <dd>Defines the transport to be used for cross-domain requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19225
    *     By setting this property, the transaction will use the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19226
    *     transport instead of XMLHttpRequest. The properties of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19227
    *     transport object are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19228
    *     <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19229
    *       <dt>use</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19230
    *         <dd>The transport to be used: 'flash' or 'native'</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19231
    *       <dt>dataType</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19232
    *         <dd>Set the value to 'XML' if that is the expected response
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19233
    *         content type.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19234
    *       <dt>credentials</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19235
    *         <dd>Set the value to 'true' to set XHR.withCredentials property to true.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19236
    *     </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19237
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19238
    *   <dt>form</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19239
    *     <dd>Form serialization configuration object.  Its properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19240
    *     <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19241
    *       <dt>id</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19242
    *         <dd>Node object or id of HTML form</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19243
    *       <dt>useDisabled</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19244
    *         <dd>`true` to also serialize disabled form field values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19245
    *         (defaults to `false`)</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19246
    *     </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19247
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19248
    *   <dt>on</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19249
    *     <dd>Assigns transaction event subscriptions. Available events are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19250
    *     <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19251
    *       <dt>start</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19252
    *         <dd>Fires when a request is sent to a resource.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19253
    *       <dt>complete</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19254
    *         <dd>Fires when the transaction is complete.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19255
    *       <dt>success</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19256
    *         <dd>Fires when the HTTP response status is within the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19257
    *         range.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19258
    *       <dt>failure</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19259
    *         <dd>Fires when the HTTP response status is outside the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19260
    *         range, if an exception occurs, if the transation is aborted,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19261
    *         or if the transaction exceeds a configured `timeout`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19262
    *       <dt>end</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19263
    *         <dd>Fires at the conclusion of the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19264
    *            lifecycle, after `success` or `failure`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19265
    *     </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19266
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19267
    *     <p>Callback functions for `start` and `end` receive the id of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19268
    *     transaction as a first argument. For `complete`, `success`, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19269
    *     `failure`, callbacks receive the id and the response object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19270
    *     (usually the XMLHttpRequest instance).  If the `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19271
    *     property was included in the configuration object passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19272
    *     `Y.io()`, the configured data will be passed to all callbacks as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19273
    *     the last argument.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19274
    *     </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19275
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19276
    *   <dt>sync</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19277
    *     <dd>Pass `true` to make a same-domain transaction synchronous.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19278
    *     <strong>CAVEAT</strong>: This will negatively impact the user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19279
    *     experience. Have a <em>very</em> good reason if you intend to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19280
    *     this.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19281
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19282
    *   <dt>context</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19283
    *     <dd>The "`this'" object for all configured event handlers. If a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19284
    *     specific context is needed for individual callbacks, bind the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19285
    *     callback to a context using `Y.bind()`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19286
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19287
    *   <dt>headers</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19288
    *     <dd>Object map of transaction headers to send to the server. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19289
    *     object keys are the header names and the values are the header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19290
    *     values.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19291
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19292
    *   <dt>timeout</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19293
    *     <dd>Millisecond threshold for the transaction before being
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19294
    *     automatically aborted.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19295
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19296
    *   <dt>arguments</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19297
    *     <dd>User-defined data passed to all registered event handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19298
    *     This value is available as the second argument in the "start" and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19299
    *     "end" event handlers. It is the third argument in the "complete",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19300
    *     "success", and "failure" event handlers. <strong>Be sure to quote
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19301
    *     this property name in the transaction configuration as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19302
    *     "arguments" is a reserved word in JavaScript</strong> (e.g.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19303
    *     `Y.io({ ..., "arguments": stuff })`).</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19304
    * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19305
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19306
    * @method send
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19307
    * @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19308
    * @param {String} uri Qualified path to transaction resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19309
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19310
    * @param {Number} id Transaction id, if already set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19311
    * @return {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19312
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19313
    send: function(uri, config, id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19314
        var transaction, method, i, len, sync, data,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19315
            io = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19316
            u = uri,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19317
            response = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19319
        config = config ? Y.Object(config) : {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19320
        transaction = io._create(config, id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19321
        method = config.method ? config.method.toUpperCase() : 'GET';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19322
        sync = config.sync;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19323
        data = config.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19325
        // Serialize a map object into a key-value string using
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19326
        // querystring-stringify-simple.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19327
        if ((Y.Lang.isObject(data) && !data.nodeType) && !transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19328
            if (Y.QueryString && Y.QueryString.stringify) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19329
                Y.log('Stringifying config.data for request', 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19330
                config.data = data = Y.QueryString.stringify(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19331
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19332
                Y.log('Failed to stringify config.data object, likely because `querystring-stringify-simple` is missing.', 'warn', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19333
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19334
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19336
        if (config.form) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19337
            if (config.form.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19338
                // This is a file upload transaction, calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19339
                // upload() in io-upload-iframe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19340
                return io.upload(transaction, uri, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19341
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19342
                // Serialize HTML form data into a key-value string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19343
                data = io._serialize(config.form, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19344
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19345
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19347
        // Convert falsy values to an empty string. This way IE can't be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19348
        // rediculous and translate `undefined` to "undefined".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19349
        data || (data = '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19350
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19351
        if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19352
            switch (method) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19353
                case 'GET':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19354
                case 'HEAD':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19355
                case 'DELETE':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19356
                    u = io._concat(u, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19357
                    data = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19358
                    Y.log('HTTP' + method + ' with data.  The querystring is: ' + u, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19359
                    break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19360
                case 'POST':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19361
                case 'PUT':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19362
                    // If Content-Type is defined in the configuration object, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19363
                    // or as a default header, it will be used instead of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19364
                    // 'application/x-www-form-urlencoded; charset=UTF-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19365
                    config.headers = Y.merge({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19366
                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19367
                    }, config.headers);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19368
                    break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19369
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19370
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19372
        if (transaction.xdr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19373
            // Route data to io-xdr module for flash and XDomainRequest.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19374
            return io.xdr(u, transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19375
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19376
        else if (transaction.notify) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19377
            // Route data to custom transport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19378
            return transaction.c.send(transaction, uri, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19379
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19381
        if (!sync && !transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19382
            transaction.c.onreadystatechange = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19383
                io._rS(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19384
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19385
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19387
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19388
            // Determine if request is to be set as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19389
            // synchronous or asynchronous.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19390
            transaction.c.open(method, u, !sync, config.username || null, config.password || null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19391
            io._setHeaders(transaction.c, config.headers || {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19392
            io.start(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19394
            // Will work only in browsers that implement the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19395
            // Cross-Origin Resource Sharing draft.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19396
            if (config.xdr && config.xdr.credentials && SUPPORTS_CORS) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19397
                transaction.c.withCredentials = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19398
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19400
            // Using "null" with HTTP POST will result in a request
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19401
            // with no Content-Length header defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19402
            transaction.c.send(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19404
            if (sync) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19405
                // Create a response object for synchronous transactions,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19406
                // mixing id and arguments properties with the xhr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19407
                // properties whitelist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19408
                for (i = 0, len = XHR_PROPS.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19409
                    response[XHR_PROPS[i]] = transaction.c[XHR_PROPS[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19410
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19412
                response.getAllResponseHeaders = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19413
                    return transaction.c.getAllResponseHeaders();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19414
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19416
                response.getResponseHeader = function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19417
                    return transaction.c.getResponseHeader(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19418
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19420
                io.complete(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19421
                io._result(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19422
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19423
                return response;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19424
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19425
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19426
            if (transaction.xdr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19427
                // This exception is usually thrown by browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19428
                // that do not support XMLHttpRequest Level 2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19429
                // Retry the request with the XDR transport set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19430
                // to 'flash'.  If the Flash transport is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19431
                // initialized or available, the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19432
                // will resolve to a transport error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19433
                return io._retry(transaction, uri, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19434
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19435
                io.complete(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19436
                io._result(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19437
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19438
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19440
        // If config.timeout is defined, and the request is standard XHR,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19441
        // initialize timeout polling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19442
        if (config.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19443
            io._startTimeout(transaction, config.timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19444
            Y.log('Configuration timeout set to: ' + config.timeout, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19445
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19447
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19448
            id: transaction.id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19449
            abort: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19450
                return transaction.c ? io._abort(transaction, 'abort') : false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19451
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19452
            isInProgress: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19453
                return transaction.c ? (transaction.c.readyState % 4) : false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19454
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19455
            io: io
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19456
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19457
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19458
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19460
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19461
Method for initiating an ajax call.  The first argument is the url end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19462
point for the call.  The second argument is an object to configure the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19463
transaction and attach event subscriptions.  The configuration object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19464
supports the following properties:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19465
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19466
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19467
  <dt>method</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19468
    <dd>HTTP method verb (e.g., GET or POST). If this property is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19469
        not defined, the default value will be GET.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19471
  <dt>data</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19472
    <dd>This is the name-value string that will be sent as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19473
    transaction data. If the request is HTTP GET, the data become
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19474
    part of querystring. If HTTP POST, the data are sent in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19475
    message body.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19476
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19477
  <dt>xdr</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19478
    <dd>Defines the transport to be used for cross-domain requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19479
    By setting this property, the transaction will use the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19480
    transport instead of XMLHttpRequest. The properties of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19481
    transport object are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19482
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19483
      <dt>use</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19484
        <dd>The transport to be used: 'flash' or 'native'</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19485
      <dt>dataType</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19486
        <dd>Set the value to 'XML' if that is the expected response
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19487
        content type.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19488
    </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19490
  <dt>form</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19491
    <dd>Form serialization configuration object.  Its properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19492
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19493
      <dt>id</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19494
        <dd>Node object or id of HTML form</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19495
      <dt>useDisabled</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19496
        <dd>`true` to also serialize disabled form field values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19497
        (defaults to `false`)</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19498
    </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19500
  <dt>on</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19501
    <dd>Assigns transaction event subscriptions. Available events are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19502
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19503
      <dt>start</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19504
        <dd>Fires when a request is sent to a resource.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19505
      <dt>complete</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19506
        <dd>Fires when the transaction is complete.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19507
      <dt>success</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19508
        <dd>Fires when the HTTP response status is within the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19509
        range.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19510
      <dt>failure</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19511
        <dd>Fires when the HTTP response status is outside the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19512
        range, if an exception occurs, if the transation is aborted,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19513
        or if the transaction exceeds a configured `timeout`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19514
      <dt>end</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19515
        <dd>Fires at the conclusion of the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19516
           lifecycle, after `success` or `failure`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19517
    </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19519
    <p>Callback functions for `start` and `end` receive the id of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19520
    transaction as a first argument. For `complete`, `success`, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19521
    `failure`, callbacks receive the id and the response object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19522
    (usually the XMLHttpRequest instance).  If the `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19523
    property was included in the configuration object passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19524
    `Y.io()`, the configured data will be passed to all callbacks as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19525
    the last argument.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19526
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19528
  <dt>sync</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19529
    <dd>Pass `true` to make a same-domain transaction synchronous.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19530
    <strong>CAVEAT</strong>: This will negatively impact the user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19531
    experience. Have a <em>very</em> good reason if you intend to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19532
    this.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19533
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19534
  <dt>context</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19535
    <dd>The "`this'" object for all configured event handlers. If a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19536
    specific context is needed for individual callbacks, bind the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19537
    callback to a context using `Y.bind()`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19539
  <dt>headers</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19540
    <dd>Object map of transaction headers to send to the server. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19541
    object keys are the header names and the values are the header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19542
    values.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19544
  <dt>timeout</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19545
    <dd>Millisecond threshold for the transaction before being
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19546
    automatically aborted.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19548
  <dt>arguments</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19549
    <dd>User-defined data passed to all registered event handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19550
    This value is available as the second argument in the "start" and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19551
    "end" event handlers. It is the third argument in the "complete",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19552
    "success", and "failure" event handlers. <strong>Be sure to quote
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19553
    this property name in the transaction configuration as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19554
    "arguments" is a reserved word in JavaScript</strong> (e.g.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19555
    `Y.io({ ..., "arguments": stuff })`).</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19556
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19558
@method io
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19559
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19560
@param {String} url qualified path to transaction resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19561
@param {Object} config configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19562
@return {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19563
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19564
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19565
Y.io = function(url, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19566
    // Calling IO through the static interface will use and reuse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19567
    // an instance of IO.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19568
    var transaction = Y.io._map['io:0'] || new IO();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19569
    return transaction.send.apply(transaction, [url, config]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19570
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19572
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19573
Method for setting and deleting IO HTTP headers to be sent with every
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19574
request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19576
Hosted as a property on the `io` function (e.g. `Y.io.header`).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19578
@method header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19579
@param {String} name HTTP header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19580
@param {String} value HTTP header value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19581
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19582
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19583
Y.io.header = function(name, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19584
    // Calling IO through the static interface will use and reuse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19585
    // an instance of IO.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19586
    var transaction = Y.io._map['io:0'] || new IO();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19587
    transaction.setHeader(name, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19588
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19589
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19590
Y.IO = IO;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19591
// Map of all IO instances created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19592
Y.io._map = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19593
var XHR = win && win.XMLHttpRequest,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19594
    XDR = win && win.XDomainRequest,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19595
    AX = win && win.ActiveXObject,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19596
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19597
    // Checks for the presence of the `withCredentials` in an XHR instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19598
    // object, which will be present if the environment supports CORS.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19599
    SUPPORTS_CORS = XHR && 'withCredentials' in (new XMLHttpRequest());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19602
Y.mix(Y.IO, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19603
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19604
    * The ID of the default IO transport, defaults to `xhr`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19605
    * @property _default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19606
    * @type {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19607
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19608
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19609
    _default: 'xhr',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19610
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19611
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19612
    * @method defaultTransport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19613
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19614
    * @param {String} [id] The transport to set as the default, if empty a new transport is created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19615
    * @return {Object} The transport object with a `send` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19616
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19617
    defaultTransport: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19618
        if (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19619
            Y.log('Setting default IO to: ' + id, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19620
            Y.IO._default = id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19621
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19622
            var o = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19623
                c: Y.IO.transports[Y.IO._default](),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19624
                notify: Y.IO._default === 'xhr' ? false : true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19625
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19626
            Y.log('Creating default transport: ' + Y.IO._default, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19627
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19628
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19629
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19630
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19631
    * An object hash of custom transports available to IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19632
    * @property transports
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19633
    * @type {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19634
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19635
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19636
    transports: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19637
        xhr: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19638
            return XHR ? new XMLHttpRequest() :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19639
                AX ? new ActiveXObject('Microsoft.XMLHTTP') : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19640
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19641
        xdr: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19642
            return XDR ? new XDomainRequest() : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19643
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19644
        iframe: function () { return {}; },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19645
        flash: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19646
        nodejs: null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19647
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19648
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19649
    * Create a custom transport of type and return it's object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19650
    * @method customTransport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19651
    * @param {String} id The id of the transport to create.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19652
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19653
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19654
    customTransport: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19655
        var o = { c: Y.IO.transports[id]() };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19657
        o[(id === 'xdr' || id === 'flash') ? 'xdr' : 'notify'] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19658
        return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19659
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19660
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19661
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19662
Y.mix(Y.IO.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19663
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19664
    * Fired from the notify method of the transport which in turn fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19665
    * the event on the IO object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19666
    * @method notify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19667
    * @param {String} event The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19668
    * @param {Object} transaction The transaction object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19669
    * @param {Object} config The configuration object for this transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19670
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19671
    notify: function(event, transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19672
        var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19674
        switch (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19675
            case 'timeout':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19676
            case 'abort':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19677
            case 'transport error':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19678
                transaction.c = { status: 0, statusText: event };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19679
                event = 'failure';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19680
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19681
                io[event].apply(io, [transaction, config]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19682
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19683
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19684
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19686
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19687
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19689
}, '@VERSION@', {"requires": ["event-custom-base", "querystring-stringify-simple"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19690
YUI.add('json-parse', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19692
var _JSON = Y.config.global.JSON;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19694
Y.namespace('JSON').parse = function (obj, reviver, space) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19695
    return _JSON.parse((typeof obj === 'string' ? obj : obj + ''), reviver, space);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19696
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19697
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19699
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19700
YUI.add('transition', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19702
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19703
* Provides the transition method for Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19704
* Transition has no API of its own, but adds the transition method to Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19705
*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19706
* @module transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19707
* @requires node-style
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19708
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19710
var CAMEL_VENDOR_PREFIX = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19711
    VENDOR_PREFIX = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19712
    DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19713
    DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19714
    DOCUMENT_STYLE = DOCUMENT[DOCUMENT_ELEMENT].style,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19715
    TRANSITION_CAMEL = 'transition',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19716
    TRANSITION_PROPERTY_CAMEL = 'transitionProperty',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19717
    TRANSITION_PROPERTY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19718
    TRANSITION_DURATION,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19719
    TRANSITION_TIMING_FUNCTION,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19720
    TRANSITION_DELAY,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19721
    TRANSITION_END,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19722
    ON_TRANSITION_END,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19724
    EMPTY_OBJ = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19726
    VENDORS = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19727
        'Webkit',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19728
        'Moz'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19729
    ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19731
    VENDOR_TRANSITION_END = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19732
        Webkit: 'webkitTransitionEnd'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19733
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19734
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19735
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19736
 * A class for constructing transition instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19737
 * Adds the "transition" method to Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19738
 * @class Transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19739
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19740
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19742
Transition = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19743
    this.init.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19744
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19746
// One off handling of transform-prefixing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19747
Transition._TRANSFORM = 'transform';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19749
Transition._toCamel = function(property) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19750
    property = property.replace(/-([a-z])/gi, function(m0, m1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19751
        return m1.toUpperCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19752
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19754
    return property;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19755
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19757
Transition._toHyphen = function(property) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19758
    property = property.replace(/([A-Z]?)([a-z]+)([A-Z]?)/g, function(m0, m1, m2, m3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19759
        var str = ((m1) ? '-' + m1.toLowerCase() : '') + m2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19761
        if (m3) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19762
            str += '-' + m3.toLowerCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19763
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19764
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19765
        return str;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19766
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19767
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19768
    return property;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19769
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19770
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19771
Transition.SHOW_TRANSITION = 'fadeIn';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19772
Transition.HIDE_TRANSITION = 'fadeOut';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19773
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19774
Transition.useNative = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19776
// Map transition properties to vendor-specific versions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19777
if ('transition' in DOCUMENT_STYLE 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19778
    && 'transitionProperty' in DOCUMENT_STYLE 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19779
    && 'transitionDuration' in DOCUMENT_STYLE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19780
    && 'transitionTimingFunction' in DOCUMENT_STYLE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19781
    && 'transitionDelay' in DOCUMENT_STYLE) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19782
    Transition.useNative = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19783
    Transition.supported = true; // TODO: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19784
} else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19785
    Y.Array.each(VENDORS, function(val) { // then vendor specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19786
        var property = val + 'Transition';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19787
        if (property in DOCUMENT[DOCUMENT_ELEMENT].style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19788
            CAMEL_VENDOR_PREFIX = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19789
            VENDOR_PREFIX       = Transition._toHyphen(val) + '-';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19791
            Transition.useNative = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19792
            Transition.supported = true; // TODO: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19793
            Transition._VENDOR_PREFIX = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19794
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19795
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19796
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19798
// Map transform property to vendor-specific versions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19799
// One-off required for cssText injection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19800
if (typeof DOCUMENT_STYLE.transform === 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19801
    Y.Array.each(VENDORS, function(val) { // then vendor specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19802
        var property = val + 'Transform';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19803
        if (typeof DOCUMENT_STYLE[property] !== 'undefined') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19804
            Transition._TRANSFORM = property;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19805
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19806
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19807
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19809
if (CAMEL_VENDOR_PREFIX) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19810
    TRANSITION_CAMEL          = CAMEL_VENDOR_PREFIX + 'Transition';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19811
    TRANSITION_PROPERTY_CAMEL = CAMEL_VENDOR_PREFIX + 'TransitionProperty';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19812
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19813
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19814
TRANSITION_PROPERTY        = VENDOR_PREFIX + 'transition-property';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19815
TRANSITION_DURATION        = VENDOR_PREFIX + 'transition-duration';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19816
TRANSITION_TIMING_FUNCTION = VENDOR_PREFIX + 'transition-timing-function';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19817
TRANSITION_DELAY           = VENDOR_PREFIX + 'transition-delay';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19818
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19819
TRANSITION_END    = 'transitionend';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19820
ON_TRANSITION_END = 'on' + CAMEL_VENDOR_PREFIX.toLowerCase() + 'transitionend';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19821
TRANSITION_END    = VENDOR_TRANSITION_END[CAMEL_VENDOR_PREFIX] || TRANSITION_END;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19822
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19823
Transition.fx = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19824
Transition.toggles = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19825
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19826
Transition._hasEnd = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19828
Transition._reKeywords = /^(?:node|duration|iterations|easing|delay|on|onstart|onend)$/i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19829
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19830
Y.Node.DOM_EVENTS[TRANSITION_END] = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19831
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19832
Transition.NAME = 'transition';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19833
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19834
Transition.DEFAULT_EASING = 'ease';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19835
Transition.DEFAULT_DURATION = 0.5;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19836
Transition.DEFAULT_DELAY = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19837
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19838
Transition._nodeAttrs = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19840
Transition.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19841
    constructor: Transition,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19842
    init: function(node, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19843
        var anim = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19844
        anim._node = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19845
        if (!anim._running && config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19846
            anim._config = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19847
            node._transition = anim; // cache for reuse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19849
            anim._duration = ('duration' in config) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19850
                config.duration: anim.constructor.DEFAULT_DURATION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19852
            anim._delay = ('delay' in config) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19853
                config.delay: anim.constructor.DEFAULT_DELAY;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19855
            anim._easing = config.easing || anim.constructor.DEFAULT_EASING;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19856
            anim._count = 0; // track number of animated properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19857
            anim._running = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19858
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19859
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19861
        return anim;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19862
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19863
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19864
    addProperty: function(prop, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19865
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19866
            node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19867
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19868
            nodeInstance = Y.one(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19869
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19870
            computed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19871
            compareVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19872
            dur,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19873
            attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19874
            val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19876
        if (!attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19877
            attrs = Transition._nodeAttrs[uid] = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19878
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19879
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19880
        attr = attrs[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19881
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19882
        // might just be a value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19883
        if (config && config.value !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19884
            val = config.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19885
        } else if (config !== undefined) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19886
            val = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19887
            config = EMPTY_OBJ;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19888
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19890
        if (typeof val === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19891
            val = val.call(nodeInstance, nodeInstance);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19892
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19894
        if (attr && attr.transition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19895
            // take control if another transition owns this property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19896
            if (attr.transition !== anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19897
                attr.transition._count--; // remapping attr to this transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19898
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19899
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19901
        anim._count++; // properties per transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19902
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19903
        // make 0 async and fire events
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19904
        dur = ((typeof config.duration !== 'undefined') ? config.duration :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19905
                    anim._duration) || 0.0001;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19907
        attrs[prop] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19908
            value: val,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19909
            duration: dur,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19910
            delay: (typeof config.delay !== 'undefined') ? config.delay :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19911
                    anim._delay,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19913
            easing: config.easing || anim._easing,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19914
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19915
            transition: anim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19916
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19917
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19918
        // native end event doesnt fire when setting to same value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19919
        // supplementing with timer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19920
        // val may be a string or number (height: 0, etc), but computedStyle is always string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19921
        computed = Y.DOM.getComputedStyle(node, prop);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19922
        compareVal = (typeof val === 'string') ? computed : parseFloat(computed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19924
        if (Transition.useNative && compareVal === val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19925
            setTimeout(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19926
                anim._onNativeEnd.call(node, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19927
                    propertyName: prop,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19928
                    elapsedTime: dur
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19929
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19930
            }, dur * 1000);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19931
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19932
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19934
    removeProperty: function(prop) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19935
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19936
            attrs = Transition._nodeAttrs[Y.stamp(anim._node)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19938
        if (attrs && attrs[prop]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19939
            delete attrs[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19940
            anim._count--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19941
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19943
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19944
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19945
    initAttrs: function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19946
        var attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19947
            node = this._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19948
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19949
        if (config.transform && !config[Transition._TRANSFORM]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19950
            config[Transition._TRANSFORM] = config.transform;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19951
            delete config.transform; // TODO: copy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19952
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19953
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19954
        for (attr in config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19955
            if (config.hasOwnProperty(attr) && !Transition._reKeywords.test(attr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19956
                this.addProperty(attr, config[attr]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19958
                // when size is auto or % webkit starts from zero instead of computed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19959
                // (https://bugs.webkit.org/show_bug.cgi?id=16020)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19960
                // TODO: selective set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19961
                if (node.style[attr] === '') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19962
                    Y.DOM.setStyle(node, attr, Y.DOM.getComputedStyle(node, attr));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19963
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19964
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19965
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19966
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19967
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19968
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19969
     * Starts or an animation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19970
     * @method run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19971
     * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19972
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19973
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19974
    run: function(callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19975
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19976
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19977
            config = anim._config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19978
            data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19979
                type: 'transition:start',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19980
                config: config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19981
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19982
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19984
        if (!anim._running) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19985
            anim._running = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19987
            if (config.on && config.on.start) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19988
                config.on.start.call(Y.one(node), data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19989
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19991
            anim.initAttrs(anim._config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19992
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19993
            anim._callback = callback;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19994
            anim._start();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19995
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19998
        return anim;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 19999
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20001
    _start: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20002
        this._runNative();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20003
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20004
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20005
    _prepDur: function(dur) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20006
        dur = parseFloat(dur) * 1000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20008
        return dur + 'ms';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20009
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20011
    _runNative: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20012
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20013
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20014
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20015
            style = node.style,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20016
            computed = node.ownerDocument.defaultView.getComputedStyle(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20017
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20018
            cssText = '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20019
            cssTransition = computed[Transition._toCamel(TRANSITION_PROPERTY)],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20021
            transitionText = TRANSITION_PROPERTY + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20022
            duration = TRANSITION_DURATION + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20023
            easing = TRANSITION_TIMING_FUNCTION + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20024
            delay = TRANSITION_DELAY + ': ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20025
            hyphy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20026
            attr,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20027
            name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20029
        // preserve existing transitions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20030
        if (cssTransition !== 'all') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20031
            transitionText += cssTransition + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20032
            duration += computed[Transition._toCamel(TRANSITION_DURATION)] + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20033
            easing += computed[Transition._toCamel(TRANSITION_TIMING_FUNCTION)] + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20034
            delay += computed[Transition._toCamel(TRANSITION_DELAY)] + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20035
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20036
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20037
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20038
        // run transitions mapped to this instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20039
        for (name in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20040
            hyphy = Transition._toHyphen(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20041
            attr = attrs[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20042
            if ((attr = attrs[name]) && attr.transition === anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20043
                if (name in node.style) { // only native styles allowed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20044
                    duration += anim._prepDur(attr.duration) + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20045
                    delay += anim._prepDur(attr.delay) + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20046
                    easing += (attr.easing) + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20047
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20048
                    transitionText += hyphy + ',';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20049
                    cssText += hyphy + ': ' + attr.value + '; ';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20050
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20051
                    this.removeProperty(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20052
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20053
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20054
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20055
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20056
        transitionText = transitionText.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20057
        duration = duration.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20058
        easing = easing.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20059
        delay = delay.replace(/,$/, ';');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20060
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20061
        // only one native end event per node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20062
        if (!Transition._hasEnd[uid]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20063
            node.addEventListener(TRANSITION_END, anim._onNativeEnd, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20064
            Transition._hasEnd[uid] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20065
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20066
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20067
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20068
        style.cssText += transitionText + duration + easing + delay + cssText;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20069
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20070
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20071
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20072
    _end: function(elapsed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20073
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20074
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20075
            callback = anim._callback,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20076
            config = anim._config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20077
            data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20078
                type: 'transition:end',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20079
                config: config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20080
                elapsedTime: elapsed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20081
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20082
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20083
            nodeInstance = Y.one(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20084
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20085
        anim._running = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20086
        anim._callback = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20088
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20089
            if (config.on && config.on.end) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20090
                setTimeout(function() { // IE: allow previous update to finish
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20091
                    config.on.end.call(nodeInstance, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20092
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20093
                    // nested to ensure proper fire order
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20094
                    if (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20095
                        callback.call(nodeInstance, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20096
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20097
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20098
                }, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20099
            } else if (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20100
                setTimeout(function() { // IE: allow previous update to finish
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20101
                    callback.call(nodeInstance, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20102
                }, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20103
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20104
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20106
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20108
    _endNative: function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20109
        var node = this._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20110
            value = node.ownerDocument.defaultView.getComputedStyle(node, '')[Transition._toCamel(TRANSITION_PROPERTY)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20112
        name = Transition._toHyphen(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20113
        if (typeof value === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20114
            value = value.replace(new RegExp('(?:^|,\\s)' + name + ',?'), ',');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20115
            value = value.replace(/^,|,$/, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20116
            node.style[TRANSITION_CAMEL] = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20117
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20118
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20120
    _onNativeEnd: function(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20121
        var node = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20122
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20123
            event = e,//e._event,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20124
            name = Transition._toCamel(event.propertyName),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20125
            elapsed = event.elapsedTime,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20126
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20127
            attr = attrs[name],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20128
            anim = (attr) ? attr.transition : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20129
            data,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20130
            config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20132
        if (anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20133
            anim.removeProperty(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20134
            anim._endNative(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20135
            config = anim._config[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20137
            data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20138
                type: 'propertyEnd',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20139
                propertyName: name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20140
                elapsedTime: elapsed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20141
                config: config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20142
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20144
            if (config && config.on && config.on.end) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20145
                config.on.end.call(Y.one(node), data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20146
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20148
            if (anim._count <= 0)  { // after propertyEnd fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20149
                anim._end(elapsed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20150
                node.style[TRANSITION_PROPERTY_CAMEL] = ''; // clean up style
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20151
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20152
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20153
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20154
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20155
    destroy: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20156
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20157
            node = anim._node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20158
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20159
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20160
            node.removeEventListener(TRANSITION_END, anim._onNativeEnd, false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20161
            anim._node = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20162
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20163
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20164
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20166
Y.Transition = Transition;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20167
Y.TransitionNative = Transition; // TODO: remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20169
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20170
 *   Animate one or more css properties to a given value. Requires the "transition" module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20171
 *   <pre>example usage:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20172
 *       Y.one('#demo').transition({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20173
 *           duration: 1, // in seconds, default is 0.5
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20174
 *           easing: 'ease-out', // default is 'ease'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20175
 *           delay: '1', // delay start for 1 second, default is 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20176
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20177
 *           height: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20178
 *           width: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20179
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20180
 *           opacity: { // per property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20181
 *               value: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20182
 *               duration: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20183
 *               delay: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20184
 *               easing: 'ease-in'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20185
 *           }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20186
 *       });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20187
 *   </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20188
 *   @for Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20189
 *   @method transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20190
 *   @param {Object} config An object containing one or more style properties, a duration and an easing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20191
 *   @param {Function} callback A function to run after the transition has completed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20192
 *   @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20193
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20194
Y.Node.prototype.transition = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20195
    var
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20196
        transitionAttrs = Transition._nodeAttrs[Y.stamp(this._node)],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20197
        anim = (transitionAttrs) ? transitionAttrs.transition || null : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20198
        fxConfig,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20199
        prop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20201
    if (typeof name === 'string') { // named effect, pull config from registry
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20202
        if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20203
            callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20204
            config = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20205
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20207
        fxConfig = Transition.fx[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20209
        if (config && typeof config !== 'boolean') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20210
            config = Y.clone(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20212
            for (prop in fxConfig) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20213
                if (fxConfig.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20214
                    if (! (prop in config)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20215
                        config[prop] = fxConfig[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20216
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20217
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20218
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20219
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20220
            config = fxConfig;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20221
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20223
    } else { // name is a config, config is a callback or undefined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20224
        callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20225
        config = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20226
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20228
    if (anim && !anim._running) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20229
        anim.init(this, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20230
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20231
        anim = new Transition(this._node, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20232
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20234
    anim.run(callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20235
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20236
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20238
Y.Node.prototype.show = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20239
    this._show(); // show prior to transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20240
    if (name && Y.Transition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20241
        if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20242
            if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20243
                callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20244
                config = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20245
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20246
            name = Transition.SHOW_TRANSITION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20247
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20248
        this.transition(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20249
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20250
    else if (name && !Y.Transition) { Y.log('unable to transition show; missing transition module', 'warn', 'node'); }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20251
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20252
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20253
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20254
Y.NodeList.prototype.show = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20255
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20256
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20257
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20259
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20260
        Y.one(node).show(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20261
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20262
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20263
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20264
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20268
var _wrapCallBack = function(anim, fn, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20269
    return function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20270
        if (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20271
            fn.call(anim);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20272
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20273
        if (callback && typeof callback === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20274
            callback.apply(anim._node, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20275
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20276
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20277
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20279
Y.Node.prototype.hide = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20280
    if (name && Y.Transition) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20281
        if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20282
            callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20283
            config = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20284
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20286
        callback = _wrapCallBack(this, this._hide, callback); // wrap with existing callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20287
        if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20288
            if (typeof config === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20289
                callback = config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20290
                config = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20291
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20292
            name = Transition.HIDE_TRANSITION;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20293
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20294
        this.transition(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20295
    } else if (name && !Y.Transition) { Y.log('unable to transition hide; missing transition module', 'warn', 'node');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20296
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20297
        this._hide();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20298
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20299
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20300
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20301
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20302
Y.NodeList.prototype.hide = function(name, config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20303
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20304
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20305
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20307
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20308
        Y.one(node).hide(name, config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20309
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20311
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20312
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20314
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20315
 *   Animate one or more css properties to a given value. Requires the "transition" module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20316
 *   <pre>example usage:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20317
 *       Y.all('.demo').transition({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20318
 *           duration: 1, // in seconds, default is 0.5
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20319
 *           easing: 'ease-out', // default is 'ease'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20320
 *           delay: '1', // delay start for 1 second, default is 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20321
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20322
 *           height: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20323
 *           width: '10px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20324
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20325
 *           opacity: { // per property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20326
 *               value: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20327
 *               duration: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20328
 *               delay: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20329
 *               easing: 'ease-in'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20330
 *           }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20331
 *       });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20332
 *   </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20333
 *   @for NodeList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20334
 *   @method transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20335
 *   @param {Object} config An object containing one or more style properties, a duration and an easing.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20336
 *   @param {Function} callback A function to run after the transition has completed. The callback fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20337
 *       once per item in the NodeList.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20338
 *   @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20339
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20340
Y.NodeList.prototype.transition = function(config, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20341
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20342
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20343
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20345
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20346
        Y.one(node).transition(config, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20347
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20349
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20350
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20352
Y.Node.prototype.toggleView = function(name, on, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20353
    this._toggles = this._toggles || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20354
    callback = arguments[arguments.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20356
    if (typeof name !== 'string') { // no transition, just toggle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20357
        on = name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20358
        this._toggleView(on, callback); // call original _toggleView in Y.Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20359
        return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20360
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20361
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20362
    if (typeof on === 'function') { // Ignore "on" if used for callback argument.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20363
        on = undefined;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20364
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20365
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20366
    if (typeof on === 'undefined' && name in this._toggles) { // reverse current toggle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20367
        on = ! this._toggles[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20368
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20369
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20370
    on = (on) ? 1 : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20371
    if (on) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20372
        this._show();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20373
    }  else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20374
        callback = _wrapCallBack(this, this._hide, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20375
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20377
    this._toggles[name] = on;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20378
    this.transition(Y.Transition.toggles[name][on], callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20380
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20381
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20383
Y.NodeList.prototype.toggleView = function(name, on, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20384
    var nodes = this._nodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20385
        i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20386
        node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20388
    while ((node = nodes[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20389
        node = Y.one(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20390
        node.toggleView.apply(node, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20391
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20393
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20394
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20396
Y.mix(Transition.fx, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20397
    fadeOut: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20398
        opacity: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20399
        duration: 0.5,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20400
        easing: 'ease-out'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20401
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20403
    fadeIn: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20404
        opacity: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20405
        duration: 0.5,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20406
        easing: 'ease-in'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20407
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20409
    sizeOut: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20410
        height: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20411
        width: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20412
        duration: 0.75,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20413
        easing: 'ease-out'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20414
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20416
    sizeIn: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20417
        height: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20418
            return node.get('scrollHeight') + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20419
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20420
        width: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20421
            return node.get('scrollWidth') + 'px';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20422
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20423
        duration: 0.5,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20424
        easing: 'ease-in',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20426
        on: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20427
            start: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20428
                var overflow = this.getStyle('overflow');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20429
                if (overflow !== 'hidden') { // enable scrollHeight/Width
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20430
                    this.setStyle('overflow', 'hidden');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20431
                    this._transitionOverflow = overflow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20432
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20433
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20435
            end: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20436
                if (this._transitionOverflow) { // revert overridden value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20437
                    this.setStyle('overflow', this._transitionOverflow);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20438
                    delete this._transitionOverflow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20439
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20440
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20441
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20442
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20443
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20444
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20445
Y.mix(Transition.toggles, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20446
    size: ['sizeOut', 'sizeIn'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20447
    fade: ['fadeOut', 'fadeIn']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20448
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20450
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20451
}, '@VERSION@', {"requires": ["node-style"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20452
YUI.add('selector-css2', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20454
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20455
 * The selector module provides helper methods allowing CSS2 Selectors to be used with DOM elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20456
 * @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20457
 * @submodule selector-css2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20458
 * @for Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20459
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20461
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20462
 * Provides helper methods for collecting and filtering DOM elements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20463
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20465
var PARENT_NODE = 'parentNode',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20466
    TAG_NAME = 'tagName',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20467
    ATTRIBUTES = 'attributes',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20468
    COMBINATOR = 'combinator',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20469
    PSEUDOS = 'pseudos',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20471
    Selector = Y.Selector,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20472
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20473
    SelectorCSS2 = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20474
        _reRegExpTokens: /([\^\$\?\[\]\*\+\-\.\(\)\|\\])/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20475
        SORT_RESULTS: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20476
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20477
        // TODO: better detection, document specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20478
        _isXML: (function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20479
            var isXML = (Y.config.doc.createElement('div').tagName !== 'DIV');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20480
            return isXML;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20481
        }()),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20483
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20484
         * Mapping of shorthand tokens to corresponding attribute selector 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20485
         * @property shorthand
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20486
         * @type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20487
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20488
        shorthand: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20489
            '\\#(-?[_a-z0-9]+[-\\w\\uE000]*)': '[id=$1]',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20490
            '\\.(-?[_a-z]+[-\\w\\uE000]*)': '[className~=$1]'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20491
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20493
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20494
         * List of operators and corresponding boolean functions. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20495
         * These functions are passed the attribute and the current node's value of the attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20496
         * @property operators
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20497
         * @type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20498
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20499
        operators: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20500
            '': function(node, attr) { return Y.DOM.getAttribute(node, attr) !== ''; }, // Just test for existence of attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20501
            '~=': '(?:^|\\s+){val}(?:\\s+|$)', // space-delimited
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20502
            '|=': '^{val}-?' // optional hyphen-delimited
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20503
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20504
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20505
        pseudos: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20506
           'first-child': function(node) { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20507
                return Y.DOM._children(node[PARENT_NODE])[0] === node; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20508
            } 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20509
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20511
        _bruteQuery: function(selector, root, firstOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20512
            var ret = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20513
                nodes = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20514
                tokens = Selector._tokenize(selector),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20515
                token = tokens[tokens.length - 1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20516
                rootDoc = Y.DOM._getDoc(root),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20517
                child,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20518
                id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20519
                className,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20520
                tagName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20522
            if (token) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20523
                // prefilter nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20524
                id = token.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20525
                className = token.className;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20526
                tagName = token.tagName || '*';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20528
                if (root.getElementsByTagName) { // non-IE lacks DOM api on doc frags
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20529
                    // try ID first, unless no root.all && root not in document
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20530
                    // (root.all works off document, but not getElementById)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20531
                    if (id && (root.all || (root.nodeType === 9 || Y.DOM.inDoc(root)))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20532
                        nodes = Y.DOM.allById(id, root);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20533
                    // try className
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20534
                    } else if (className) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20535
                        nodes = root.getElementsByClassName(className);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20536
                    } else { // default to tagName
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20537
                        nodes = root.getElementsByTagName(tagName);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20538
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20540
                } else { // brute getElementsByTagName()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20541
                    child = root.firstChild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20542
                    while (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20543
                        // only collect HTMLElements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20544
                        // match tag to supplement missing getElementsByTagName
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20545
                        if (child.tagName && (tagName === '*' || child.tagName === tagName)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20546
                            nodes.push(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20547
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20548
                        child = child.nextSibling || child.firstChild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20549
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20550
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20551
                if (nodes.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20552
                    ret = Selector._filterNodes(nodes, tokens, firstOnly);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20553
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20554
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20556
            return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20557
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20558
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20559
        _filterNodes: function(nodes, tokens, firstOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20560
            var i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20561
                j,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20562
                len = tokens.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20563
                n = len - 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20564
                result = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20565
                node = nodes[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20566
                tmpNode = node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20567
                getters = Y.Selector.getters,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20568
                operator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20569
                combinator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20570
                token,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20571
                path,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20572
                pass,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20573
                value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20574
                tests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20575
                test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20576
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20577
            for (i = 0; (tmpNode = node = nodes[i++]);) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20578
                n = len - 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20579
                path = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20580
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20581
                testLoop:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20582
                while (tmpNode && tmpNode.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20583
                    token = tokens[n];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20584
                    tests = token.tests;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20585
                    j = tests.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20586
                    if (j && !pass) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20587
                        while ((test = tests[--j])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20588
                            operator = test[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20589
                            if (getters[test[0]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20590
                                value = getters[test[0]](tmpNode, test[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20591
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20592
                                value = tmpNode[test[0]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20593
                                if (test[0] === 'tagName' && !Selector._isXML) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20594
                                    value = value.toUpperCase();    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20595
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20596
                                if (typeof value != 'string' && value !== undefined && value.toString) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20597
                                    value = value.toString(); // coerce for comparison
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20598
                                } else if (value === undefined && tmpNode.getAttribute) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20599
                                    // use getAttribute for non-standard attributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20600
                                    value = tmpNode.getAttribute(test[0], 2); // 2 === force string for IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20601
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20602
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20604
                            if ((operator === '=' && value !== test[2]) ||  // fast path for equality
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20605
                                (typeof operator !== 'string' && // protect against String.test monkey-patch (Moo)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20606
                                operator.test && !operator.test(value)) ||  // regex test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20607
                                (!operator.test && // protect against RegExp as function (webkit)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20608
                                        typeof operator === 'function' && !operator(tmpNode, test[0], test[2]))) { // function test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20609
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20610
                                // skip non element nodes or non-matching tags
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20611
                                if ((tmpNode = tmpNode[path])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20612
                                    while (tmpNode &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20613
                                        (!tmpNode.tagName ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20614
                                            (token.tagName && token.tagName !== tmpNode.tagName))
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20615
                                    ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20616
                                        tmpNode = tmpNode[path]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20617
                                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20618
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20619
                                continue testLoop;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20620
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20621
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20622
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20624
                    n--; // move to next token
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20625
                    // now that we've passed the test, move up the tree by combinator
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20626
                    if (!pass && (combinator = token.combinator)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20627
                        path = combinator.axis;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20628
                        tmpNode = tmpNode[path];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20630
                        // skip non element nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20631
                        while (tmpNode && !tmpNode.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20632
                            tmpNode = tmpNode[path]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20633
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20634
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20635
                        if (combinator.direct) { // one pass only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20636
                            path = null; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20637
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20639
                    } else { // success if we made it this far
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20640
                        result.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20641
                        if (firstOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20642
                            return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20643
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20644
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20645
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20646
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20647
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20648
            node = tmpNode = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20649
            return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20650
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20651
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20652
        combinators: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20653
            ' ': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20654
                axis: 'parentNode'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20655
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20657
            '>': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20658
                axis: 'parentNode',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20659
                direct: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20660
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20661
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20663
            '+': {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20664
                axis: 'previousSibling',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20665
                direct: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20666
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20667
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20669
        _parsers: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20670
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20671
                name: ATTRIBUTES,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20672
                re: /^\uE003(-?[a-z]+[\w\-]*)+([~\|\^\$\*!=]=?)?['"]?([^\uE004'"]*)['"]?\uE004/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20673
                fn: function(match, token) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20674
                    var operator = match[2] || '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20675
                        operators = Selector.operators,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20676
                        escVal = (match[3]) ? match[3].replace(/\\/g, '') : '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20677
                        test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20679
                    // add prefiltering for ID and CLASS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20680
                    if ((match[1] === 'id' && operator === '=') ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20681
                            (match[1] === 'className' &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20682
                            Y.config.doc.documentElement.getElementsByClassName &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20683
                            (operator === '~=' || operator === '='))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20684
                        token.prefilter = match[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20686
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20687
                        match[3] = escVal; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20689
                        // escape all but ID for prefilter, which may run through QSA (via Dom.allById)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20690
                        token[match[1]] = (match[1] === 'id') ? match[3] : escVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20692
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20694
                    // add tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20695
                    if (operator in operators) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20696
                        test = operators[operator];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20697
                        if (typeof test === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20698
                            match[3] = escVal.replace(Selector._reRegExpTokens, '\\$1');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20699
                            test = new RegExp(test.replace('{val}', match[3]));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20700
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20701
                        match[2] = test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20702
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20703
                    if (!token.last || token.prefilter !== match[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20704
                        return match.slice(1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20705
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20706
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20707
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20708
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20709
                name: TAG_NAME,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20710
                re: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20711
                fn: function(match, token) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20712
                    var tag = match[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20713
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20714
                    if (!Selector._isXML) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20715
                        tag = tag.toUpperCase();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20716
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20718
                    token.tagName = tag;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20720
                    if (tag !== '*' && (!token.last || token.prefilter)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20721
                        return [TAG_NAME, '=', tag];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20722
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20723
                    if (!token.prefilter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20724
                        token.prefilter = 'tagName';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20725
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20726
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20727
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20728
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20729
                name: COMBINATOR,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20730
                re: /^\s*([>+~]|\s)\s*/,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20731
                fn: function(match, token) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20732
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20733
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20734
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20735
                name: PSEUDOS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20736
                re: /^:([\-\w]+)(?:\uE005['"]?([^\uE005]*)['"]?\uE006)*/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20737
                fn: function(match, token) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20738
                    var test = Selector[PSEUDOS][match[1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20739
                    if (test) { // reorder match array and unescape special chars for tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20740
                        if (match[2]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20741
                            match[2] = match[2].replace(/\\/g, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20742
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20743
                        return [match[2], test]; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20744
                    } else { // selector token not supported (possibly missing CSS3 module)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20745
                        return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20746
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20747
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20748
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20749
            ],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20751
        _getToken: function(token) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20752
            return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20753
                tagName: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20754
                id: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20755
                className: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20756
                attributes: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20757
                combinator: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20758
                tests: []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20759
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20760
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20761
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20762
        /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20763
            Break selector into token units per simple selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20764
            Combinator is attached to the previous token.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20765
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20766
        _tokenize: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20767
            selector = selector || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20768
            selector = Selector._parseSelector(Y.Lang.trim(selector)); 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20769
            var token = Selector._getToken(),     // one token per simple selector (left selector holds combinator)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20770
                query = selector, // original query for debug report
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20771
                tokens = [],    // array of tokens
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20772
                found = false,  // whether or not any matches were found this pass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20773
                match,         // the regex match
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20774
                test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20775
                i, parser;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20776
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20777
            /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20778
                Search for selector patterns, store, and strip them from the selector string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20779
                until no patterns match (invalid selector) or we run out of chars.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20781
                Multiple attributes and pseudos are allowed, in any order.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20782
                for example:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20783
                    'form:first-child[type=button]:not(button)[lang|=en]'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20784
            */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20785
            outer:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20786
            do {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20787
                found = false; // reset after full pass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20788
                for (i = 0; (parser = Selector._parsers[i++]);) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20789
                    if ( (match = parser.re.exec(selector)) ) { // note assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20790
                        if (parser.name !== COMBINATOR ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20791
                            token.selector = selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20792
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20793
                        selector = selector.replace(match[0], ''); // strip current match from selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20794
                        if (!selector.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20795
                            token.last = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20796
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20798
                        if (Selector._attrFilters[match[1]]) { // convert class to className, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20799
                            match[1] = Selector._attrFilters[match[1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20800
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20802
                        test = parser.fn(match, token);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20803
                        if (test === false) { // selector not supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20804
                            found = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20805
                            break outer;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20806
                        } else if (test) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20807
                            token.tests.push(test);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20808
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20810
                        if (!selector.length || parser.name === COMBINATOR) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20811
                            tokens.push(token);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20812
                            token = Selector._getToken(token);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20813
                            if (parser.name === COMBINATOR) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20814
                                token.combinator = Y.Selector.combinators[match[1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20815
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20816
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20817
                        found = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20818
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20819
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20820
            } while (found && selector.length);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20822
            if (!found || selector.length) { // not fully parsed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20823
                Y.log('query: ' + query + ' contains unsupported token in: ' + selector, 'warn', 'Selector');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20824
                tokens = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20825
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20826
            return tokens;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20827
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20829
        _replaceMarkers: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20830
            selector = selector.replace(/\[/g, '\uE003');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20831
            selector = selector.replace(/\]/g, '\uE004');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20833
            selector = selector.replace(/\(/g, '\uE005');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20834
            selector = selector.replace(/\)/g, '\uE006');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20835
            return selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20836
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20837
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20838
        _replaceShorthand: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20839
            var shorthand = Y.Selector.shorthand,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20840
                re;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20841
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20842
            for (re in shorthand) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20843
                if (shorthand.hasOwnProperty(re)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20844
                    selector = selector.replace(new RegExp(re, 'gi'), shorthand[re]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20845
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20846
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20847
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20848
            return selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20849
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20851
        _parseSelector: function(selector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20852
            var replaced = Y.Selector._replaceSelector(selector),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20853
                selector = replaced.selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20855
            // replace shorthand (".foo, #bar") after pseudos and attrs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20856
            // to avoid replacing unescaped chars
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20857
            selector = Y.Selector._replaceShorthand(selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20858
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20859
            selector = Y.Selector._restore('attr', selector, replaced.attrs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20860
            selector = Y.Selector._restore('pseudo', selector, replaced.pseudos);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20861
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20862
            // replace braces and parens before restoring escaped chars
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20863
            // to avoid replacing ecaped markers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20864
            selector = Y.Selector._replaceMarkers(selector);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20865
            selector = Y.Selector._restore('esc', selector, replaced.esc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20867
            return selector;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20868
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20869
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20870
        _attrFilters: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20871
            'class': 'className',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20872
            'for': 'htmlFor'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20873
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20874
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20875
        getters: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20876
            href: function(node, attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20877
                return Y.DOM.getAttribute(node, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20878
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20879
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20880
            id: function(node, attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20881
                return Y.DOM.getId(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20882
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20883
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20884
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20886
Y.mix(Y.Selector, SelectorCSS2, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20887
Y.Selector.getters.src = Y.Selector.getters.rel = Y.Selector.getters.href;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20888
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20889
// IE wants class with native queries
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20890
if (Y.Selector.useNative && Y.config.doc.querySelector) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20891
    Y.Selector.shorthand['\\.(-?[_a-z]+[-\\w]*)'] = '[class~=$1]';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20892
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20894
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20895
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20896
}, '@VERSION@', {"requires": ["selector-native"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20897
YUI.add('selector-css3', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20898
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20899
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20900
 * The selector css3 module provides support for css3 selectors.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20901
 * @module dom
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20902
 * @submodule selector-css3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20903
 * @for Selector
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20904
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20905
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20906
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20907
    an+b = get every _a_th node starting at the _b_th
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20908
    0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20909
    1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20910
    an+0 = get every _a_th element, "0" may be omitted 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20911
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20912
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20913
Y.Selector._reNth = /^(?:([\-]?\d*)(n){1}|(odd|even)$)*([\-+]?\d*)$/;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20914
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20915
Y.Selector._getNth = function(node, expr, tag, reverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20916
    Y.Selector._reNth.test(expr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20917
    var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20918
        n = RegExp.$2, // "n"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20919
        oddeven = RegExp.$3, // "odd" or "even"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20920
        b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20921
        result = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20922
        siblings = Y.DOM._children(node.parentNode, tag),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20923
        op;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20925
    if (oddeven) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20926
        a = 2; // always every other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20927
        op = '+';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20928
        n = 'n';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20929
        b = (oddeven === 'odd') ? 1 : 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20930
    } else if ( isNaN(a) ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20931
        a = (n) ? 1 : 0; // start from the first or no repeat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20932
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20934
    if (a === 0) { // just the first
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20935
        if (reverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20936
            b = siblings.length - b + 1; 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20937
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20938
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20939
        if (siblings[b - 1] === node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20940
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20941
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20942
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20943
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20944
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20945
    } else if (a < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20946
        reverse = !!reverse;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20947
        a = Math.abs(a);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20948
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20949
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20950
    if (!reverse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20951
        for (var i = b - 1, len = siblings.length; i < len; i += a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20952
            if ( i >= 0 && siblings[i] === node ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20953
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20954
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20955
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20956
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20957
        for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20958
            if ( i < len && siblings[i] === node ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20959
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20960
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20961
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20962
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20963
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20964
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20965
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20966
Y.mix(Y.Selector.pseudos, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20967
    'root': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20968
        return node === node.ownerDocument.documentElement;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20969
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20970
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20971
    'nth-child': function(node, expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20972
        return Y.Selector._getNth(node, expr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20973
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20974
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20975
    'nth-last-child': function(node, expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20976
        return Y.Selector._getNth(node, expr, null, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20977
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20978
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20979
    'nth-of-type': function(node, expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20980
        return Y.Selector._getNth(node, expr, node.tagName);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20981
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20982
     
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20983
    'nth-last-of-type': function(node, expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20984
        return Y.Selector._getNth(node, expr, node.tagName, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20985
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20986
     
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20987
    'last-child': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20988
        var children = Y.DOM._children(node.parentNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20989
        return children[children.length - 1] === node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20990
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20991
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20992
    'first-of-type': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20993
        return Y.DOM._children(node.parentNode, node.tagName)[0] === node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20994
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20995
     
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20996
    'last-of-type': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20997
        var children = Y.DOM._children(node.parentNode, node.tagName);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20998
        return children[children.length - 1] === node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 20999
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21000
     
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21001
    'only-child': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21002
        var children = Y.DOM._children(node.parentNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21003
        return children.length === 1 && children[0] === node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21004
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21006
    'only-of-type': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21007
        var children = Y.DOM._children(node.parentNode, node.tagName);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21008
        return children.length === 1 && children[0] === node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21009
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21010
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21011
    'empty': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21012
        return node.childNodes.length === 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21013
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21014
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21015
    'not': function(node, expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21016
        return !Y.Selector.test(node, expr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21017
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21019
    'contains': function(node, expr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21020
        var text = node.innerText || node.textContent || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21021
        return text.indexOf(expr) > -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21022
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21023
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21024
    'checked': function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21025
        return (node.checked === true || node.selected === true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21026
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21028
    enabled: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21029
        return (node.disabled !== undefined && !node.disabled);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21030
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21032
    disabled: function(node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21033
        return (node.disabled);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21034
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21035
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21037
Y.mix(Y.Selector.operators, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21038
    '^=': '^{val}', // Match starts with value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21039
    '$=': '{val}$', // Match ends with value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21040
    '*=': '{val}' // Match contains value as substring 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21041
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21043
Y.Selector.combinators['~'] = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21044
    axis: 'previousSibling'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21045
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21047
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21048
}, '@VERSION@', {"requires": ["selector-native", "selector-css2"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21049
YUI.add('yui-log', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21050
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21051
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21052
 * Provides console log capability and exposes a custom event for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21053
 * console implementations. This module is a `core` YUI module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21054
 * <a href="../classes/YUI.html#method_log">it's documentation is located under the YUI class</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21055
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21056
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21057
 * @submodule yui-log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21058
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21059
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21060
var INSTANCE = Y,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21061
    LOGEVENT = 'yui:log',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21062
    UNDEFINED = 'undefined',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21063
    LEVELS = { debug: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21064
               info: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21065
               warn: 4,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21066
               error: 8 };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21067
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21068
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21069
 * If the 'debug' config is true, a 'yui:log' event will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21070
 * dispatched, which the Console widget and anything else
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21071
 * can consume.  If the 'useBrowserConsole' config is true, it will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21072
 * write to the browser console if available.  YUI-specific log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21073
 * messages will only be present in the -debug versions of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21074
 * JS files.  The build system is supposed to remove log statements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21075
 * from the raw and minified versions of the files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21076
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21077
 * @method log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21078
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21079
 * @param  {String}  msg  The message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21080
 * @param  {String}  cat  The log category for the message.  Default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21081
 *                        categories are "info", "warn", "error", time".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21082
 *                        Custom categories can be used as well. (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21083
 * @param  {String}  src  The source of the the message (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21084
 * @param  {boolean} silent If true, the log event won't fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21085
 * @return {YUI}      YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21086
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21087
INSTANCE.log = function(msg, cat, src, silent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21088
    var bail, excl, incl, m, f, minlevel,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21089
        Y = INSTANCE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21090
        c = Y.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21091
        publisher = (Y.fire) ? Y : YUI.Env.globalEvents;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21092
    // suppress log message if the config is off or the event stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21093
    // or the event call stack contains a consumer of the yui:log event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21094
    if (c.debug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21095
        // apply source filters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21096
        src = src || "";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21097
        if (typeof src !== "undefined") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21098
            excl = c.logExclude;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21099
            incl = c.logInclude;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21100
            if (incl && !(src in incl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21101
                bail = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21102
            } else if (incl && (src in incl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21103
                bail = !incl[src];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21104
            } else if (excl && (src in excl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21105
                bail = excl[src];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21106
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21108
            // Determine the current minlevel as defined in configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21109
            Y.config.logLevel = Y.config.logLevel || 'debug';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21110
            minlevel = LEVELS[Y.config.logLevel.toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21112
            if (cat in LEVELS && LEVELS[cat] < minlevel) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21113
                // Skip this message if the we don't meet the defined minlevel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21114
                bail = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21115
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21116
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21117
        if (!bail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21118
            if (c.useBrowserConsole) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21119
                m = (src) ? src + ': ' + msg : msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21120
                if (Y.Lang.isFunction(c.logFn)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21121
                    c.logFn.call(Y, msg, cat, src);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21122
                } else if (typeof console !== UNDEFINED && console.log) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21123
                    f = (cat && console[cat] && (cat in LEVELS)) ? cat : 'log';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21124
                    console[f](m);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21125
                } else if (typeof opera !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21126
                    opera.postError(m);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21127
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21128
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21130
            if (publisher && !silent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21132
                if (publisher === Y && (!publisher.getEvent(LOGEVENT))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21133
                    publisher.publish(LOGEVENT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21134
                        broadcast: 2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21135
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21136
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21138
                publisher.fire(LOGEVENT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21139
                    msg: msg,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21140
                    cat: cat,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21141
                    src: src
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21142
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21143
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21144
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21145
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21147
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21148
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21150
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21151
 * Write a system message.  This message will be preserved in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21152
 * minified and raw versions of the YUI files, unlike log statements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21153
 * @method message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21154
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21155
 * @param  {String}  msg  The message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21156
 * @param  {String}  cat  The log category for the message.  Default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21157
 *                        categories are "info", "warn", "error", time".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21158
 *                        Custom categories can be used as well. (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21159
 * @param  {String}  src  The source of the the message (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21160
 * @param  {boolean} silent If true, the log event won't fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21161
 * @return {YUI}      YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21162
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21163
INSTANCE.message = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21164
    return INSTANCE.log.apply(INSTANCE, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21165
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21168
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21169
YUI.add('dump', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21171
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21172
 * Returns a simple string representation of the object or array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21173
 * Other types of objects will be returned unprocessed.  Arrays
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21174
 * are expected to be indexed.  Use object notation for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21175
 * associative arrays.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21176
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21177
 * If included, the dump method is added to the YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21178
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21179
 * @module dump
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21180
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21181
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21182
    var L = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21183
        OBJ = '{...}',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21184
        FUN = 'f(){...}',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21185
        COMMA = ', ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21186
        ARROW = ' => ',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21188
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21189
     * Returns a simple string representation of the object or array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21190
     * Other types of objects will be returned unprocessed.  Arrays
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21191
     * are expected to be indexed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21192
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21193
     * @method dump
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21194
     * @param {Object} o The object to dump.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21195
     * @param {Number} d How deep to recurse child objects, default 3.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21196
     * @return {String} the dump result.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21197
     * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21198
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21199
    dump = function(o, d) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21200
        var i, len, s = [], type = L.type(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21202
        // Cast non-objects to string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21203
        // Skip dates because the std toString is what we want
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21204
        // Skip HTMLElement-like objects because trying to dump
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21205
        // an element will cause an unhandled exception in FF 2.x
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21206
        if (!L.isObject(o)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21207
            return o + '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21208
        } else if (type == 'date') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21209
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21210
        } else if (o.nodeType && o.tagName) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21211
            return o.tagName + '#' + o.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21212
        } else if (o.document && o.navigator) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21213
            return 'window';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21214
        } else if (o.location && o.body) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21215
            return 'document';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21216
        } else if (type == 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21217
            return FUN;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21218
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21220
        // dig into child objects the depth specifed. Default 3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21221
        d = (L.isNumber(d)) ? d : 3;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21223
        // arrays [1, 2, 3]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21224
        if (type == 'array') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21225
            s.push('[');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21226
            for (i = 0, len = o.length; i < len; i = i + 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21227
                if (L.isObject(o[i])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21228
                    s.push((d > 0) ? L.dump(o[i], d - 1) : OBJ);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21229
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21230
                    s.push(o[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21231
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21232
                s.push(COMMA);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21233
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21234
            if (s.length > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21235
                s.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21236
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21237
            s.push(']');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21238
        // regexp /foo/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21239
        } else if (type == 'regexp') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21240
            s.push(o.toString());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21241
        // objects {k1 => v1, k2 => v2}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21242
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21243
            s.push('{');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21244
            for (i in o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21245
                if (o.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21246
                    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21247
                        s.push(i + ARROW);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21248
                        if (L.isObject(o[i])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21249
                            s.push((d > 0) ? L.dump(o[i], d - 1) : OBJ);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21250
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21251
                            s.push(o[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21252
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21253
                        s.push(COMMA);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21254
                    } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21255
                        s.push('Error: ' + e.message);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21256
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21257
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21258
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21259
            if (s.length > 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21260
                s.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21261
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21262
            s.push('}');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21263
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21264
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21265
        return s.join('');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21266
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21268
    Y.dump = dump;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21269
    L.dump = dump;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21271
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21273
}, '@VERSION@', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21274
YUI.add('transition-timer', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21276
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21277
* Provides the base Transition class, for animating numeric properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21278
*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21279
* @module transition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21280
* @submodule transition-timer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21281
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21284
var Transition = Y.Transition;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21286
Y.mix(Transition.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21287
    _start: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21288
        if (Transition.useNative) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21289
            this._runNative();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21290
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21291
            this._runTimer();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21292
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21293
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21295
    _runTimer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21296
        var anim = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21297
        anim._initAttrs();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21299
        Transition._running[Y.stamp(anim)] = anim;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21300
        anim._startTime = new Date();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21301
        Transition._startTimer();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21302
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21304
    _endTimer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21305
        var anim = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21306
        delete Transition._running[Y.stamp(anim)];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21307
        anim._startTime = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21308
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21310
    _runFrame: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21311
        var t = new Date() - this._startTime;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21312
        this._runAttrs(t);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21313
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21315
    _runAttrs: function(time) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21316
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21317
            node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21318
            config = anim._config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21319
            uid = Y.stamp(node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21320
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21321
            customAttr = Transition.behaviors,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21322
            done = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21323
            allDone = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21324
            data,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21325
            name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21326
            attribute,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21327
            setter,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21328
            elapsed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21329
            delay,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21330
            d,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21331
            t,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21332
            i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21334
        for (name in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21335
            if ((attribute = attrs[name]) && attribute.transition === anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21336
                d = attribute.duration;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21337
                delay = attribute.delay;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21338
                elapsed = (time - delay) / 1000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21339
                t = time;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21340
                data = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21341
                    type: 'propertyEnd',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21342
                    propertyName: name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21343
                    config: config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21344
                    elapsedTime: elapsed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21345
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21346
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21347
                setter = (i in customAttr && 'set' in customAttr[i]) ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21348
                        customAttr[i].set : Transition.DEFAULT_SETTER;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21349
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21350
                done = (t >= d);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21352
                if (t > d) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21353
                    t = d;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21354
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21356
                if (!delay || time >= delay) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21357
                    setter(anim, name, attribute.from, attribute.to, t - delay, d - delay,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21358
                        attribute.easing, attribute.unit);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21360
                    if (done) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21361
                        delete attrs[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21362
                        anim._count--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21364
                        if (config[name] && config[name].on && config[name].on.end) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21365
                            config[name].on.end.call(Y.one(node), data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21366
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21368
                        //node.fire('transition:propertyEnd', data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21369
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21370
                        if (!allDone && anim._count <= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21371
                            allDone = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21372
                            anim._end(elapsed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21373
                            anim._endTimer();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21374
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21375
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21376
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21378
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21379
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21380
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21382
    _initAttrs: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21383
        var anim = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21384
            customAttr = Transition.behaviors,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21385
            uid = Y.stamp(anim._node),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21386
            attrs = Transition._nodeAttrs[uid],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21387
            attribute,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21388
            duration,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21389
            delay,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21390
            easing,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21391
            val,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21392
            name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21393
            mTo,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21394
            mFrom,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21395
            unit, begin, end;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21397
        for (name in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21398
            if ((attribute = attrs[name]) && attribute.transition === anim) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21399
                duration = attribute.duration * 1000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21400
                delay = attribute.delay * 1000;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21401
                easing = attribute.easing;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21402
                val = attribute.value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21404
                // only allow supported properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21405
                if (name in anim._node.style || name in Y.DOM.CUSTOM_STYLES) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21406
                    begin = (name in customAttr && 'get' in customAttr[name])  ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21407
                            customAttr[name].get(anim, name) : Transition.DEFAULT_GETTER(anim, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21409
                    mFrom = Transition.RE_UNITS.exec(begin);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21410
                    mTo = Transition.RE_UNITS.exec(val);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21412
                    begin = mFrom ? mFrom[1] : begin;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21413
                    end = mTo ? mTo[1] : val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21414
                    unit = mTo ? mTo[2] : mFrom ?  mFrom[2] : ''; // one might be zero TODO: mixed units
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21416
                    if (!unit && Transition.RE_DEFAULT_UNIT.test(name)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21417
                        unit = Transition.DEFAULT_UNIT;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21418
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21420
                    if (typeof easing === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21421
                        if (easing.indexOf('cubic-bezier') > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21422
                            easing = easing.substring(13, easing.length - 1).split(',');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21423
                        } else if (Transition.easings[easing]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21424
                            easing = Transition.easings[easing];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21425
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21426
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21428
                    attribute.from = Number(begin);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21429
                    attribute.to = Number(end);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21430
                    attribute.unit = unit;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21431
                    attribute.easing = easing;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21432
                    attribute.duration = duration + delay;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21433
                    attribute.delay = delay;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21434
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21435
                    delete attrs[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21436
                    anim._count--;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21437
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21438
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21439
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21440
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21442
    destroy: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21443
        this.detachAll();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21444
        this._node = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21445
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21446
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21447
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21448
Y.mix(Y.Transition, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21449
    _runtimeAttrs: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21450
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21451
     * Regex of properties that should use the default unit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21452
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21453
     * @property RE_DEFAULT_UNIT
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21454
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21455
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21456
    RE_DEFAULT_UNIT: /^width|height|top|right|bottom|left|margin.*|padding.*|border.*$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21457
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21458
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21459
     * The default unit to use with properties that pass the RE_DEFAULT_UNIT test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21460
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21461
     * @property DEFAULT_UNIT
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21462
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21463
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21464
    DEFAULT_UNIT: 'px',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21465
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21466
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21467
     * Time in milliseconds passed to setInterval for frame processing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21468
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21469
     * @property intervalTime
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21470
     * @default 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21471
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21472
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21473
    intervalTime: 20,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21474
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21475
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21476
     * Bucket for custom getters and setters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21477
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21478
     * @property behaviors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21479
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21480
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21481
    behaviors: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21482
        left: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21483
            get: function(anim, attr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21484
                return Y.DOM._getAttrOffset(anim._node, attr);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21485
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21486
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21487
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21489
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21490
     * The default setter to use when setting object properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21491
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21492
     * @property DEFAULT_SETTER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21493
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21494
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21495
    DEFAULT_SETTER: function(anim, att, from, to, elapsed, duration, fn, unit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21496
        from = Number(from);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21497
        to = Number(to);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21499
        var node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21500
            val = Transition.cubicBezier(fn, elapsed / duration);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21501
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21502
        val = from + val[0] * (to - from);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21504
        if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21505
            if (att in node.style || att in Y.DOM.CUSTOM_STYLES) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21506
                unit = unit || '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21507
                Y.DOM.setStyle(node, att, val + unit);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21508
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21509
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21510
            anim._end();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21511
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21512
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21513
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21514
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21515
     * The default getter to use when getting object properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21516
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21517
     * @property DEFAULT_GETTER
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21518
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21519
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21520
    DEFAULT_GETTER: function(anim, att) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21521
        var node = anim._node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21522
            val = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21524
        if (att in node.style || att in Y.DOM.CUSTOM_STYLES) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21525
            val = Y.DOM.getComputedStyle(node, att);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21526
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21528
        return val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21529
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21531
    _startTimer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21532
        if (!Transition._timer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21533
            Transition._timer = setInterval(Transition._runFrame, Transition.intervalTime);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21534
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21535
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21537
    _stopTimer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21538
        clearInterval(Transition._timer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21539
        Transition._timer = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21540
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21542
    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21543
     * Called per Interval to handle each animation frame.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21544
     * @method _runFrame
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21545
     * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21546
     * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21547
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21548
    _runFrame: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21549
        var done = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21550
            anim;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21551
        for (anim in Transition._running) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21552
            if (Transition._running[anim]._runFrame) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21553
                done = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21554
                Transition._running[anim]._runFrame();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21555
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21556
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21558
        if (done) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21559
            Transition._stopTimer();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21560
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21561
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21562
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21563
    cubicBezier: function(p, t) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21564
        var x0 = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21565
            y0 = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21566
            x1 = p[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21567
            y1 = p[1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21568
            x2 = p[2],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21569
            y2 = p[3],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21570
            x3 = 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21571
            y3 = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21573
            A = x3 - 3 * x2 + 3 * x1 - x0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21574
            B = 3 * x2 - 6 * x1 + 3 * x0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21575
            C = 3 * x1 - 3 * x0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21576
            D = x0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21577
            E = y3 - 3 * y2 + 3 * y1 - y0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21578
            F = 3 * y2 - 6 * y1 + 3 * y0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21579
            G = 3 * y1 - 3 * y0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21580
            H = y0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21582
            x = (((A*t) + B)*t + C)*t + D,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21583
            y = (((E*t) + F)*t + G)*t + H;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21585
        return [x, y];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21586
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21588
    easings: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21589
        ease: [0.25, 0, 1, 0.25],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21590
        linear: [0, 0, 1, 1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21591
        'ease-in': [0.42, 0, 1, 1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21592
        'ease-out': [0, 0, 0.58, 1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21593
        'ease-in-out': [0.42, 0, 0.58, 1]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21594
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21596
    _running: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21597
    _timer: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21599
    RE_UNITS: /^(-?\d*\.?\d*){1}(em|ex|px|in|cm|mm|pt|pc|%)*$/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21600
}, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21602
Transition.behaviors.top = Transition.behaviors.bottom = Transition.behaviors.right = Transition.behaviors.left;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21604
Y.Transition = Transition;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21605
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21607
}, '@VERSION@', {"requires": ["transition"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21608
YUI.add('yui', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21609
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21610
// empty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21611
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21613
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21614
}, '@VERSION@', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21615
    "use": [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21616
        "yui",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21617
        "oop",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21618
        "dom",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21619
        "event-custom-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21620
        "event-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21621
        "pluginhost",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21622
        "node",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21623
        "event-delegate",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21624
        "io-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21625
        "json-parse",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21626
        "transition",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21627
        "selector-css3",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21628
        "dom-style-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21629
        "querystring-stringify-simple"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21630
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21631
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
 21632
var Y = YUI().use('*');