src/cm/media/js/lib/yui/yui_3.10.3/build/yui-base/yui-base.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
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 = '3.10.3',
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
    },
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
    Executes the named method on the specified YUI instance if that method is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
    whitelisted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
    @method applyTo
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    @param {String} id YUI instance id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    @param {String} method Name of the method to execute. For example:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
        'Object.keys'.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    @param {Array} args Arguments to apply to the method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
    @return {Mixed} Return value from the applied method, or `null` if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
        specified instance was not found or the method was not whitelisted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    applyTo: function(id, method, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
        if (!(method in APPLY_TO_AUTH)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
            this.log(method + ': applyTo not allowed', 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
            return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
        var instance = instances[id], nest, m, i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
        if (instance) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
            nest = method.split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
            m = instance;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
            for (i = 0; i < nest.length; i = i + 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
                m = m[nest[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
                if (!m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
                    this.log('applyTo not found: ' + method, 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
            return m && m.apply(instance, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
        return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
    },
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
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
   573
as a dependency for other modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
The easiest way to create a first-class YUI module is to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
<a href="http://yui.github.com/shifter/">Shifter</a>, the YUI component build
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
tool.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
Shifter will automatically wrap your module code in a `YUI.add()` call along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
with any configuration info required for the module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
    YUI.add('davglass', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
        Y.davglass = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
    }, '3.4.0', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
        requires: ['harley-davidson', 'mt-dew']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
@method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
@param {String} name Module name.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
@param {Function} fn Function containing module code. This function will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
    executed whenever the module is attached to a specific YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
    @param {YUI} fn.Y The YUI instance to which this module is attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
    @param {String} fn.name Name of the module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
@param {String} version Module version number. This is currently used only for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
    informational purposes, and is not used internally by YUI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
@param {Object} [config] Module config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
    @param {Array} [config.requires] Array of other module names that must be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
        attached before this module can be attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
    @param {Array} [config.optional] Array of optional module names that should
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
        be attached before this module is attached if they've already been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
        loaded. If the `loadOptional` YUI option is `true`, optional modules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
        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
   609
        requirements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    @param {Array} [config.use] Array of module names that are included within
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
        or otherwise provided by this module, and which should be attached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
        automatically when this module is attached. This makes it possible to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
        create "virtual rollup" modules that simply attach a collection of other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
        modules or submodules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
@return {YUI} This YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
    add: function(name, fn, version, details) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
        details = details || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
        var env = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
            mod = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
                name: name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
                fn: fn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
                version: version,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
                details: details
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
            //Instance hash so we don't apply it to the same instance twice
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
            applied = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
            loader, inst,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
            i, versions = env.versions;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
        env.mods[name] = mod;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
        versions[version] = versions[version] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
        versions[version][name] = mod;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
        for (i in instances) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
            if (instances.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
                inst = instances[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
                if (!applied[inst.id]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
                    applied[inst.id] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
                    loader = inst.Env._loader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
                    if (loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
                        if (!loader.moduleInfo[name] || loader.moduleInfo[name].temp) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
                            loader.addModule(details, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
                    }
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
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
    Executes the callback function associated with each required module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
    attaching the module to this YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
    @method _attach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
    @param {Array} r The array of modules to attach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    @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
   661
        is not attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
    _attach: function(r, moot) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
        var i, name, mod, details, req, use, after,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
            mods = YUI.Env.mods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
            aliases = YUI.Env.aliases,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
            Y = this, j,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
            cache = YUI.Env._renderedMods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
            loader = Y.Env._loader,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
            done = Y.Env._attached,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
            len = r.length, loader, def, go,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
            c = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
        //Check for conditional modules (in a second+ instance) and add their requirements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
        //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
   677
        for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
            name = r[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
            mod = mods[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
            c.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
            if (loader && loader.conditions[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
                for (j in loader.conditions[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
                    if (loader.conditions[name].hasOwnProperty(j)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
                        def = loader.conditions[name][j];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
                        go = def && ((def.ua && Y.UA[def.ua]) || (def.test && def.test(Y)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                        if (go) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
                            c.push(def.name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
                    }
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
        r = c;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
        len = r.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
        for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
            if (!done[r[i]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
                name = r[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
                mod = mods[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
                if (aliases && aliases[name] && !mod) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
                    Y._attach(aliases[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
                    continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
                if (!mod) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
                    if (loader && loader.moduleInfo[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
                        mod = loader.moduleInfo[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
                        moot = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
                    //if (!loader || !loader.moduleInfo[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
                    //if ((!loader || !loader.moduleInfo[name]) && !moot) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
                    if (!moot && name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
                        if ((name.indexOf('skin-') === -1) && (name.indexOf('css') === -1)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
                            Y.Env._missed.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
                            Y.Env._missed = Y.Array.dedupe(Y.Env._missed);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
                            Y.message('NOT loaded: ' + name, 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
                    done[name] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
                    //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
   724
                    //We need to remove it from the missed list ^davglass
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
                    for (j = 0; j < Y.Env._missed.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
                        if (Y.Env._missed[j] === name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
                            Y.message('Found: ' + name + ' (was reported as missing earlier)', 'warn', 'yui');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
                            Y.Env._missed.splice(j, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
                    /*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
                        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
   733
                        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
   734
                        have been redefined inside the fetched file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
                    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
                    if (loader && cache && cache[name] && cache[name].temp) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
                        loader.getRequires(cache[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                        req = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
                        for (j in loader.moduleInfo[name].expanded_map) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
                            if (loader.moduleInfo[name].expanded_map.hasOwnProperty(j)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
                                req.push(j);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
                        Y._attach(req);
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
                    details = mod.details;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
                    req = details.requires;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
                    use = details.use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
                    after = details.after;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
                    //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
   752
                    if (details.lang) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
                        req = req || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
                        req.unshift('intl');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
                    if (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
                        for (j = 0; j < req.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
                            if (!done[req[j]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
                                if (!Y._attach(req)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
                                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
                                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
                    if (after) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
                        for (j = 0; j < after.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
                            if (!done[after[j]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
                                if (!Y._attach(after, true)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
                                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
                                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
                    if (mod.fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
                            if (Y.config.throwFail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
                                mod.fn(Y, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
                                try {
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
                                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
                                    Y.error('Attach error: ' + name, e, name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
                                return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
                    if (use) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
                        for (j = 0; j < use.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
                            if (!done[use[j]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
                                if (!Y._attach(use)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
                                    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
                                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
                                break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
                    }
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
        return true;
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
    Delays the `use` callback until another event has taken place such as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
    `window.onload`, `domready`, `contentready`, or `available`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
    @method _delayCallback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
    @param {Function} cb The original `use` callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
    @param {String|Object} until Either an event name ('load', 'domready', etc.)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
        or an object containing event/args keys for contentready/available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    @return {Function}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
    _delayCallback: function(cb, until) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
        var Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
            mod = ['event-base'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
        until = (Y.Lang.isObject(until) ? until : { event: until });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
        if (until.event === 'load') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
            mod.push('event-synthetic');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
        return function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
            var args = arguments;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
            Y._use(mod, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
                Y.on(until.event, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
                    args[1].delayUntil = until.event;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
                    cb.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
                }, until.args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
    Attaches one or more modules to this YUI instance. When this is executed,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
    the requirements of the desired modules are analyzed, and one of several
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
    things can happen:
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
      * All required modules have already been loaded, and just need to be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
        attached to this YUI instance. In this case, the `use()` callback will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
        be executed synchronously after the modules are attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
      * 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
   856
        available, or the `bootstrap` config option is `false`. In this case,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
        a warning is issued indicating that modules are missing, but all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
        available modules will still be attached and the `use()` callback will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
        be executed synchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
      * 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
   862
        Get utility is, and `bootstrap` is not `false`. In this case, the Get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
        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
   864
        the following state:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
      * One or more modules are missing and the Loader is available. In this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
        case, the Loader will be used to resolve the dependency tree for the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
        missing modules and load them and their dependencies. When the Loader is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
        finished loading modules, the `use()` callback will be executed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        asynchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
        // Loads and attaches dd and its dependencies.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
        YUI().use('dd', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
        // Loads and attaches dd and node as well as all of their dependencies.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
        YUI().use(['dd', 'node'], function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
        // Attaches all modules that have already been loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
        YUI().use('*', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
        // Attaches a gallery module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
        YUI().use('gallery-yql', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
        // Attaches a YUI 2in3 module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
        YUI().use('yui2-datatable', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
            // ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
    @method use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
    @param {String|Array} modules* One or more module names to attach.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
    @param {Function} [callback] Callback function to be executed once all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
        specified modules and their dependencies have been attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
    @param {YUI} callback.Y The YUI instance created for this sandbox.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
    @param {Object} callback.status Object containing `success`, `msg` and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
        `data` properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
    use: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
        var args = SLICE.call(arguments, 0),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
            callback = args[args.length - 1],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
            Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
            i = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
            name,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
            Env = Y.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
            provisioned = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
        // The last argument supplied to use can be a load complete callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
        if (Y.Lang.isFunction(callback)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
            args.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
            if (Y.config.delayUntil) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
                callback = Y._delayCallback(callback, Y.config.delayUntil);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
            callback = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
        if (Y.Lang.isArray(args[0])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
            args = args[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
        if (Y.config.cacheUse) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
            while ((name = args[i++])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
                if (!Env._attached[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
                    provisioned = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
                    break;
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
            if (provisioned) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
                if (args.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
                Y._notify(callback, ALREADY_DONE, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
                return Y;
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
        if (Y._loading) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
            Y._useQueue = Y._useQueue || new Y.Queue();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
            Y._useQueue.add([args, callback]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
            Y._use(args, function(Y, response) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
                Y._notify(callback, response, args);
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
    Handles Loader notifications about attachment/load errors.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
    @method _notify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
    @param {Function} callback Callback to pass to `Y.config.loadErrorFn`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
    @param {Object} response Response returned from Loader.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
    @param {Array} args Arguments passed from Loader.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
    _notify: function(callback, response, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
        if (!response.success && this.config.loadErrorFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
            this.config.loadErrorFn.call(this, this, callback, response, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
        } else if (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
            if (this.Env._missed && this.Env._missed.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
                response.msg = 'Missing modules: ' + this.Env._missed.join();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
                response.success = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
            if (this.config.throwFail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
                callback(this, response);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
                    callback(this, response);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
                    this.error('use callback error', e, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
    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
   989
    logic is performed at a time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
    @method _use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
    @param {String} args* One or more modules to attach.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
    @param {Function} [callback] Function to call once all required modules have
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
        been attached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
    @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
    _use: function(args, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
        if (!this.Array) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
            this._attach(['yui-base']);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
        var len, loader, handleBoot,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
            Y = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
            G_ENV = YUI.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
            mods = G_ENV.mods,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
            Env = Y.Env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
            used = Env._used,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
            aliases = G_ENV.aliases,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
            queue = G_ENV._loaderQueue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
            firstArg = args[0],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
            YArray = Y.Array,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
            config = Y.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
            boot = config.bootstrap,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
            missing = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
            i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
            r = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
            ret = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
            fetchCSS = config.fetchCSS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
            process = function(names, skip) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
                var i = 0, a = [], name, len, m, req, use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
                if (!names.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
                    return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
                if (aliases) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
                    len = names.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
                    for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
                        if (aliases[names[i]] && !mods[names[i]]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
                            a = [].concat(a, aliases[names[i]]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
                            a.push(names[i]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
                    names = a;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
                len = names.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
                for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
                    name = names[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
                    if (!skip) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
                        r.push(name);
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
                    // only attach a module once
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
                    if (used[name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
                        continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
                    m = mods[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
                    req = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
                    use = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
                    if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
                        used[name] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
                        req = m.details.requires;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
                        use = m.details.use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
                        // CSS files don't register themselves, see if it has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
                        // been loaded
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
                        if (!G_ENV._loaded[VERSION][name]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
                            missing.push(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
                        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
                            used[name] = true; // probably css
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
                    // make sure requirements are attached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
                    if (req && req.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
                        process(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
                    // make sure we grab the submodule dependencies too
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
                    if (use && use.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
                        process(use, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
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
            handleLoader = function(fromLoader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
                var response = fromLoader || {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
                        success: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
                        msg: 'not dynamic'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
                    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
                    redo, origMissing,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
                    ret = true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
                    data = response.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
                Y._loading = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
                if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
                    origMissing = missing;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
                    missing = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
                    r = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
                    process(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
                    redo = missing.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
                    if (redo) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
                        if ([].concat(missing).sort().join() ==
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
                                origMissing.sort().join()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
                            redo = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
                if (redo && data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
                    Y._loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
                    Y._use(missing, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
                        if (Y._attach(data)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
                            Y._notify(callback, response, data);
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
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
                    if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
                        ret = Y._attach(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
                    if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
                        Y._notify(callback, response, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
                    }
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
                if (Y._useQueue && Y._useQueue.size() && !Y._loading) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
                    Y._use.apply(Y, Y._useQueue.next());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
        // YUI().use('*'); // bind everything available
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
        if (firstArg === '*') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
            args = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
            for (i in mods) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
                if (mods.hasOwnProperty(i)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
                    args.push(i);
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
            ret = Y._attach(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
            if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
                handleLoader();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
            return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
        if ((mods.loader || mods['loader-base']) && !Y.Loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
            Y._attach(['loader' + ((!mods.loader) ? '-base' : '')]);
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1152
        // use loader to expand dependencies and sort the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
        // requirements if it is available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
        if (boot && Y.Loader && args.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
            loader = getLoader(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
            loader.require(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
            loader.ignoreRegistered = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
            loader._boot = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
            loader.calculate(null, (fetchCSS) ? null : 'js');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
            args = loader.sorted;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
            loader._boot = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
        process(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
        len = missing.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
        if (len) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
            missing = YArray.dedupe(missing);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
            len = missing.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
        // dynamic load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
        if (boot && len && Y.Loader) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
            Y._loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
            loader = getLoader(Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
            loader.onEnd = handleLoader;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
            loader.context = Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
            loader.data = args;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
            loader.ignoreRegistered = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
            loader.require(missing);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
            loader.insert(null, (fetchCSS) ? null : 'js');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
        } else if (boot && len && Y.Get && !Env.bootstrapped) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
            Y._loading = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
            handleBoot = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
                Y._loading = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1192
                queue.running = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
                Env.bootstrapped = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
                G_ENV._bootstrapping = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
                if (Y._attach(['loader'])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
                    Y._use(args, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
            if (G_ENV._bootstrapping) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
                queue.add(handleBoot);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
                G_ENV._bootstrapping = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
                Y.Get.script(config.base + config.loaderPath, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
                    onEnd: handleBoot
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
            ret = Y._attach(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
            if (ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
                handleLoader();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
            }
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
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
    Utility method for safely creating namespaces if they don't already exist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
    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
  1223
    instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
    When called statically, a namespace will be created on the YUI global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
    object:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
        // Create `YUI.your.namespace.here` as nested objects, preserving any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
        // objects that already exist instead of overwriting them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
        YUI.namespace('your.namespace.here');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
    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
  1233
    that instance:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
        // Creates `Y.property.package`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
        Y.namespace('property.package');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
    Dots in the input string cause `namespace` to create nested objects for each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
    token. If any part of the requested namespace already exists, the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
    object will be left in place and will not be overwritten. This allows
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
    multiple calls to `namespace` to preserve existing namespaced properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
    If the first token in the namespace string is "YAHOO", that token is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
    discarded. This is legacy behavior for backwards compatibility with YUI 2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
    Be careful with namespace tokens. Reserved words may work in some browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
    and not others. For instance, the following will fail in some browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1248
    because the supported version of JavaScript reserves the word "long":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1250
        Y.namespace('really.long.nested.namespace');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1252
    Note: If you pass multiple arguments to create multiple namespaces, only the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1253
    last one created is returned from this function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1255
    @method namespace
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1256
    @param {String} namespace* One or more namespaces to create.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1257
    @return {Object} Reference to the last namespace object created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1258
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1259
    namespace: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1260
        var a = arguments, o, i = 0, j, d, arg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1262
        for (; i < a.length; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1263
            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
  1264
            arg = a[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1265
            if (arg.indexOf(PERIOD) > -1) { //Skip this if no "." is present
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1266
                d = arg.split(PERIOD);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1267
                for (j = (d[0] == 'YAHOO') ? 1 : 0; j < d.length; j++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1268
                    o[d[j]] = o[d[j]] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1269
                    o = o[d[j]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1270
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1271
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1272
                o[arg] = o[arg] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1273
                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
  1274
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1275
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1276
        return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1277
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1279
    // this is replaced if the log module is included
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1280
    log: NOOP,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1281
    message: NOOP,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1282
    // this is replaced if the dump module is included
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1283
    dump: function (o) { return ''+o; },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1285
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1286
    Reports an error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1288
    The reporting mechanism is controlled by the `throwFail` configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1289
    attribute. If `throwFail` is falsy, the message is logged. If `throwFail` is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1290
    truthy, a JS exception is thrown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1292
    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
  1293
    that the exception was handled and keep it from being thrown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1295
    @method error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1296
    @param {String} msg Error message.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1297
    @param {Error|String} [e] JavaScript error object or an error string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1298
    @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
  1299
        which the error occurred).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1300
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1301
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1302
    error: function(msg, e, src) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1303
        //TODO Add check for window.onerror here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1304
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1305
        var Y = this, ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1307
        if (Y.config.errorFn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1308
            ret = Y.config.errorFn.apply(Y, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1309
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1311
        if (!ret) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1312
            throw (e || new Error(msg));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1313
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1314
            Y.message(msg, 'error', ''+src); // don't scrub this one
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1315
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1317
        return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1318
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1319
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1320
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1321
    Generates an id string that is unique among all YUI instances in this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1322
    execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1324
    @method guid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1325
    @param {String} [pre] Prefix.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1326
    @return {String} Unique id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1327
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1328
    guid: function(pre) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1329
        var id = this.Env._guidp + '_' + (++this.Env._uidx);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1330
        return (pre) ? (pre + id) : id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1331
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1333
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1334
    Returns a unique id associated with the given object and (if *readOnly* is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1335
    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
  1336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1337
    Stamping an object involves adding a `_yuid` property to it that contains
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1338
    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
  1339
    nodes have a `uniqueID` property that contains a browser-generated unique
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1340
    id, which will be used instead of a YUI-generated id when available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1342
    @method stamp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1343
    @param {Object} o Object to stamp.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1344
    @param {Boolean} readOnly If truthy and the given object has not already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1345
        been stamped, the object will not be modified and `null` will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1346
        returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1347
    @return {String} Object's unique id, or `null` if *readOnly* was truthy and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1348
        the given object was not already stamped.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1349
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1350
    stamp: function(o, readOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1351
        var uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1352
        if (!o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1353
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1354
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1356
        // IE generates its own unique ID for dom nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1357
        // The uniqueID property of a document node returns a new ID
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1358
        if (o.uniqueID && o.nodeType && o.nodeType !== 9) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1359
            uid = o.uniqueID;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1360
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1361
            uid = (typeof o === 'string') ? o : o._yuid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1362
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1364
        if (!uid) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1365
            uid = this.guid();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1366
            if (!readOnly) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1367
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1368
                    o._yuid = uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1369
                } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1370
                    uid = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1371
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1372
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1373
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1374
        return uid;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1375
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1376
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1377
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1378
    Destroys this YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1380
    @method destroy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1381
    @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1382
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1383
    destroy: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1384
        var Y = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1385
        if (Y.Event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1386
            Y.Event._unload();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1387
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1388
        delete instances[Y.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1389
        delete Y.Env;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1390
        delete Y.config;
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
    Safe `instanceof` wrapper that works around a memory leak in IE when the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1395
    object being tested is `window` or `document`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1397
    Unless you are testing objects that may be `window` or `document`, you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1398
    should use the native `instanceof` operator instead of this method.
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 instanceOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1401
    @param {Object} o Object to check.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1402
    @param {Object} type Class to check against.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1403
    @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1404
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1405
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1407
    YUI.prototype = proto;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1409
    // inheritance utilities are not available yet
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1410
    for (prop in proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1411
        if (proto.hasOwnProperty(prop)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1412
            YUI[prop] = proto[prop];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1413
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1414
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1416
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1417
    Applies a configuration to all YUI instances in this execution context.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1418
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1419
    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
  1420
    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
  1421
    centrally-managed config object. This way they can all call
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1422
    `YUI.applyConfig({})` instead of overwriting the single global config.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1424
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1426
        YUI.applyConfig({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1427
            modules: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1428
                davglass: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1429
                    fullpath: './davglass.js'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1430
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1431
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1432
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1434
        YUI.applyConfig({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1435
            modules: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1436
                foo: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1437
                    fullpath: './foo.js'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1438
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1439
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1440
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1442
        YUI().use('davglass', function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1443
            // Module davglass will be available here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1444
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1446
    @method applyConfig
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1447
    @param {Object} o Configuration object to apply.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1448
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1449
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1450
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1451
    YUI.applyConfig = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1452
        if (!o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1453
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1454
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1455
        //If there is a GlobalConfig, apply it first to set the defaults
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1456
        if (YUI.GlobalConfig) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1457
            this.prototype.applyConfig.call(this, YUI.GlobalConfig);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1458
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1459
        //Apply this config to it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1460
        this.prototype.applyConfig.call(this, o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1461
        //Reset GlobalConfig to the combined config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1462
        YUI.GlobalConfig = this.config;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1463
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1464
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1465
    // set up the environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1466
    YUI._init();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1468
    if (hasWin) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1469
        // add a window load event at load time so we can capture
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1470
        // the case where it fires before dynamic loading is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1471
        // complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1472
        add(window, 'load', handleLoad);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1473
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1474
        handleLoad();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1475
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1476
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1477
    YUI.Env.add = add;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1478
    YUI.Env.remove = remove;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1479
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1480
    /*global exports*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1481
    // Support the CommonJS method for exporting our single global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1482
    if (typeof exports == 'object') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1483
        exports.YUI = YUI;
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 a method to be called when `Get.script` is called in Node.js
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1486
        * `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
  1487
        * to this method before attaching it. Commonly used for code coverage
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1488
        * instrumentation. <strong>Calling this multiple times will only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1489
        * attach the last hook method</strong>. This method is only
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1490
        * available in Node.js.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1491
        * @method setLoadHook
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1492
        * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1493
        * @param {Function} fn The function to set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1494
        * @param {String} fn.data The content of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1495
        * @param {String} fn.path The file path of the file
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.setLoadHook = function(fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1498
            YUI._getLoadHook = fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1499
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1500
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1501
        * Load hook for `Y.Get.script` in Node.js, see `YUI.setLoadHook`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1502
        * @method _getLoadHook
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1503
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1504
        * @param {String} data The content of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1505
        * @param {String} path The file path of the file
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1506
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1507
        YUI._getLoadHook = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1508
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1510
}());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1511
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1513
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1514
Config object that contains all of the configuration options for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1515
this `YUI` instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1516
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1517
This object is supplied by the implementer when instantiating YUI. Some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1518
properties have default values if they are not supplied by the implementer.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1520
This object should not be updated directly because some values are cached. Use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1521
`applyConfig()` to update the config object on a YUI instance that has already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1522
been configured.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1524
@class config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1525
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1526
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1528
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1529
If `true` (the default), YUI will "bootstrap" the YUI Loader and module metadata
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1530
if they're needed to load additional dependencies and aren't already available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1532
Setting this to `false` will prevent YUI from automatically loading the Loader
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1533
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
  1534
or handle dependency resolution yourself.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1536
@property {Boolean} bootstrap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1537
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1538
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1540
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1542
@property {Object} aliases
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1543
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1544
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1545
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1546
A hash of module group definitions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1548
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
  1549
combo spec to use when dynamically loading the modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1551
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1552
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1553
    groups: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1554
        yui2: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1555
            // specify whether or not this group has a combo service
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1556
            combine: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1558
            // The comboSeperator to use with this group's combo handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1559
            comboSep: ';',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1561
            // The maxURLLength for this server
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1562
            maxURLLength: 500,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1564
            // the base path for non-combo paths
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1565
            base: 'http://yui.yahooapis.com/2.8.0r4/build/',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1567
            // the path to the combo service
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1568
            comboBase: 'http://yui.yahooapis.com/combo?',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1570
            // a fragment to prepend to the path attribute when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1571
            // when building combo urls
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1572
            root: '2.8.0r4/build/',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1574
            // the module definitions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1575
            modules:  {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1576
                yui2_yde: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1577
                    path: "yahoo-dom-event/yahoo-dom-event.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1578
                },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1579
                yui2_anim: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1580
                    path: "animation/animation.js",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1581
                    requires: ['yui2_yde']
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
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1587
@property {Object} groups
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1588
**/
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
Path to the Loader JS file, relative to the `base` path.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1593
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
  1594
available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1596
@property {String} loaderPath
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1597
@default "loader/loader-min.js"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1598
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1600
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1601
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
  1602
`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
  1603
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
  1604
already loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1605
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1606
@property {Boolean|String} fetchCSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1607
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1608
**/
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
Default gallery version used to build gallery module urls.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1613
@property {String} gallery
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1614
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1615
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1617
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1618
Default YUI 2 version used to build YUI 2 module urls.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1619
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1620
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
  1621
`2in3` config for pulling different revisions of the wrapped YUI 2 modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1622
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1623
@property {String} yui2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1624
@default "2.9.0"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1625
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1626
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1627
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1628
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1629
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
  1630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1631
@property {String} 2in3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1632
@default "4"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1633
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1634
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1636
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1637
Alternate console log function that should be used in environments without a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1638
supported native console. This function is executed with the YUI instance as its
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1639
`this` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1641
@property {Function} logFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1642
@since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1643
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1644
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1645
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1646
The minimum log level to log messages for. Log levels are defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1647
incrementally. Messages greater than or equal to the level specified will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1648
be shown. All others will be discarded. The order of log levels in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1649
increasing priority is:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1651
    debug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1652
    info
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1653
    warn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1654
    error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1656
@property {String} logLevel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1657
@default 'debug'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1658
@since 3.10.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1659
**/
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
Callback to execute when `Y.error()` is called. It receives the error message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1663
and a JavaScript error object if one was provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1665
This function is executed with the YUI instance as its `this` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1666
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1667
Returning `true` from this function will prevent an exception from being thrown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1669
@property {Function} errorFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1670
@param {String} errorFn.msg Error message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1671
@param {Object} [errorFn.err] Error object (if one was provided).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1672
@since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1673
**/
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
A callback to execute when Loader fails to load one or more resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1678
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
  1679
module fails to register itself when the `requireRegistration` config is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1681
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
  1682
loader succeeds. Otherwise, `use()` will always executes unless there was a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1683
JavaScript error when attaching a module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1684
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1685
@property {Function} loadErrorFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1686
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1687
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1689
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1690
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
  1691
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
  1692
loaded script does not register a YUI module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1693
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1694
@property {Boolean} requireRegistration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1695
@default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1696
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1697
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1699
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1700
Cache serviced use() requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1702
@property {Boolean} cacheUse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1703
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1704
@since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1705
@deprecated No longer used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1706
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1708
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1709
Whether or not YUI should use native ES5 functionality when available for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1710
features like `Y.Array.each()`, `Y.Object()`, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1711
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1712
When `false`, YUI will always use its own fallback implementations instead of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1713
relying on ES5 functionality, even when ES5 functionality is available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1715
@property {Boolean} useNativeES5
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1716
@default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1717
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1718
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1720
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1721
 * Leverage native JSON stringify if the browser has a native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1722
 * implementation.  In general, this is a good idea.  See the Known Issues
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1723
 * section in the JSON user guide for caveats.  The default value is true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1724
 * for browsers with native JSON support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1725
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1726
 * @property useNativeJSONStringify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1727
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1728
 * @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1729
 * @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1730
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1732
 /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1733
 * Leverage native JSON parse if the browser has a native implementation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1734
 * 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
  1735
 * JSON user guide for caveats.  The default value is true for browsers with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1736
 * native JSON support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1737
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1738
 * @property useNativeJSONParse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1739
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1740
 * @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1741
 * @since 3.8.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1742
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1744
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1745
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
  1746
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1747
@property {Object|String} delayUntil
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1748
@since 3.6.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1749
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1751
You can use `load` or `domready` strings by default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1752
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1753
    YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1754
        delayUntil: 'domready'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1755
    }, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1756
        // This will not execute until 'domeready' occurs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1757
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1758
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1759
Or you can delay until a node is available (with `available` or `contentready`):
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1761
    YUI({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1762
        delayUntil: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1763
            event: 'available',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1764
            args : '#foo'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1765
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1766
    }, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1767
        // This will not execute until a node matching the selector "#foo" is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1768
        // available in the DOM.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1769
    });
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
YUI.add('yui-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1773
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1774
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1775
 * YUI stub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1776
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1777
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1778
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1779
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1780
 * The YUI module contains the components required for building the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1781
 * seed file.  This includes the script loading mechanism, a simple queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1782
 * and the core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1783
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1784
 * @submodule yui-base
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
 * Provides core language utilites and extensions used throughout YUI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1789
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1790
 * @class Lang
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1791
 * @static
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
var L = Y.Lang || (Y.Lang = {}),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1796
STRING_PROTO = String.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1797
TOSTRING     = Object.prototype.toString,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1799
TYPES = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1800
    'undefined'        : 'undefined',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1801
    'number'           : 'number',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1802
    'boolean'          : 'boolean',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1803
    'string'           : 'string',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1804
    '[object Function]': 'function',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1805
    '[object RegExp]'  : 'regexp',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1806
    '[object Array]'   : 'array',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1807
    '[object Date]'    : 'date',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1808
    '[object Error]'   : 'error'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1809
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1810
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1811
SUBREGEX        = /\{\s*([^|}]+?)\s*(?:\|([^}]*))?\s*\}/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1812
TRIMREGEX       = /^\s+|\s+$/g,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1813
NATIVE_FN_REGEX = /\{\s*\[(?:native code|function)\]\s*\}/i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1815
// -- Protected Methods --------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1817
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1818
Returns `true` if the given function appears to be implemented in native code,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1819
`false` otherwise. Will always return `false` -- even in ES5-capable browsers --
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1820
if the `useNativeES5` YUI config option is set to `false`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1822
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
  1823
functions, but it can be useful for determining whether a function like
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1824
`Array.prototype.forEach` is native or a JS shim provided by another library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1825
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1826
There's a great article by @kangax discussing certain flaws with this technique:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1827
<http://perfectionkills.com/detecting-built-in-host-methods/>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1829
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
  1830
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
  1831
negatives have minimal consequences. It's used internally to avoid using
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1832
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
  1833
other libraries.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1834
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1835
@method _isNative
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1836
@param {Function} fn Function to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1837
@return {Boolean} `true` if _fn_ appears to be native, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1838
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1839
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1840
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1841
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1842
L._isNative = function (fn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1843
    return !!(Y.config.useNativeES5 && fn && NATIVE_FN_REGEX.test(fn));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1844
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1846
// -- Public Methods -----------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1847
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1848
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1849
 * Determines whether or not the provided item is an array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1850
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1851
 * Returns `false` for array-like collections such as the function `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1852
 * collection or `HTMLElement` collections. Use `Y.Array.test()` if you want to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1853
 * test for an array-like collection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1854
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1855
 * @method isArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1856
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1857
 * @return {boolean} true if o is an array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1858
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1859
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1860
L.isArray = L._isNative(Array.isArray) ? Array.isArray : function (o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1861
    return L.type(o) === 'array';
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1865
 * Determines whether or not the provided item is a boolean.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1866
 * @method isBoolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1867
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1868
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1869
 * @return {boolean} true if o is a boolean.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1870
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1871
L.isBoolean = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1872
    return typeof o === 'boolean';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1873
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1874
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1875
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1876
 * Determines whether or not the supplied item is a date instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1877
 * @method isDate
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1878
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1879
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1880
 * @return {boolean} true if o is a date.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1881
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1882
L.isDate = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1883
    return L.type(o) === 'date' && o.toString() !== 'Invalid Date' && !isNaN(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1884
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1886
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1887
 * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1888
 * Determines whether or not the provided item is a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1889
 * Note: Internet Explorer thinks certain functions are objects:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1890
 * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1891
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1892
 * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1893
 * var obj = document.createElement("object");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1894
 * Y.Lang.isFunction(obj.getAttribute) // reports false in IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1895
 * &nbsp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1896
 * var input = document.createElement("input"); // append to body
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1897
 * Y.Lang.isFunction(input.focus) // reports false in IE
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1898
 * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1899
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1900
 * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1901
 * You will have to implement additional tests if these functions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1902
 * matter to you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1903
 * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1904
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1905
 * @method isFunction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1906
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1907
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1908
 * @return {boolean} true if o is a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1909
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1910
L.isFunction = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1911
    return L.type(o) === 'function';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1912
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1913
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1914
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1915
 * Determines whether or not the provided item is null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1916
 * @method isNull
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1917
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1918
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1919
 * @return {boolean} true if o is null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1920
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1921
L.isNull = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1922
    return o === null;
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
 * Determines whether or not the provided item is a legal number.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1927
 * @method isNumber
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1928
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1929
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1930
 * @return {boolean} true if o is a number.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1931
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1932
L.isNumber = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1933
    return typeof o === 'number' && isFinite(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1934
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1935
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1936
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1937
 * Determines whether or not the provided item is of type object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1938
 * or function. Note that arrays are also objects, so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1939
 * <code>Y.Lang.isObject([]) === true</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1940
 * @method isObject
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1941
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1942
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1943
 * @param failfn {boolean} fail if the input is a function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1944
 * @return {boolean} true if o is an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1945
 * @see isPlainObject
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1946
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1947
L.isObject = function(o, failfn) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1948
    var t = typeof o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1949
    return (o && (t === 'object' ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1950
        (!failfn && (t === 'function' || L.isFunction(o))))) || false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1951
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1952
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1953
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1954
 * Determines whether or not the provided item is a string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1955
 * @method isString
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1956
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1957
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1958
 * @return {boolean} true if o is a string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1959
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1960
L.isString = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1961
    return typeof o === 'string';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1962
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1963
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1964
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1965
 * Determines whether or not the provided item is undefined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1966
 * @method isUndefined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1967
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1968
 * @param o The object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1969
 * @return {boolean} true if o is undefined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1970
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1971
L.isUndefined = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1972
    return typeof o === 'undefined';
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
 * A convenience method for detecting a legitimate non-null value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1977
 * Returns false for null/undefined/NaN, true for other values,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1978
 * including 0/false/''
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1979
 * @method isValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1980
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1981
 * @param o The item to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1982
 * @return {boolean} true if it is not null/undefined/NaN || false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1983
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1984
L.isValue = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1985
    var t = L.type(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1986
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1987
    switch (t) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1988
        case 'number':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1989
            return isFinite(o);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1991
        case 'null': // fallthru
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1992
        case 'undefined':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1993
            return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1994
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1995
        default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1996
            return !!t;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1997
    }
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
 * Returns the current time in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2002
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2003
 * @method now
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2004
 * @return {Number} Current time in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2005
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2006
 * @since 3.3.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2007
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2008
L.now = Date.now || function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2009
    return new Date().getTime();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2010
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2011
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2012
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2013
 * Lightweight version of <code>Y.substitute</code>. Uses the same template
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2014
 * structure as <code>Y.substitute</code>, but doesn't support recursion,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2015
 * auto-object coersion, or formats.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2016
 * @method sub
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2017
 * @param {string} s String to be modified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2018
 * @param {object} o Object containing replacement values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2019
 * @return {string} the substitute result.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2020
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2021
 * @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2022
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2023
L.sub = function(s, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2024
    return s.replace ? s.replace(SUBREGEX, function (match, key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2025
        return L.isUndefined(o[key]) ? match : o[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2026
    }) : s;
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2030
 * Returns a string without any leading or trailing whitespace.  If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2031
 * the input is not a string, the input will be returned untouched.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2032
 * @method trim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2033
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2034
 * @param s {string} the string to trim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2035
 * @return {string} the trimmed string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2036
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2037
L.trim = STRING_PROTO.trim ? function(s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2038
    return s && s.trim ? s.trim() : s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2039
} : function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2040
    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2041
        return s.replace(TRIMREGEX, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2042
    } catch (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2043
        return s;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2044
    }
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
 * Returns a string without any leading whitespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2049
 * @method trimLeft
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2050
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2051
 * @param s {string} the string to trim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2052
 * @return {string} the trimmed string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2053
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2054
L.trimLeft = STRING_PROTO.trimLeft ? function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2055
    return s.trimLeft();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2056
} : function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2057
    return s.replace(/^\s+/, '');
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2061
 * Returns a string without any trailing whitespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2062
 * @method trimRight
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2063
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2064
 * @param s {string} the string to trim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2065
 * @return {string} the trimmed string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2066
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2067
L.trimRight = STRING_PROTO.trimRight ? function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2068
    return s.trimRight();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2069
} : function (s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2070
    return s.replace(/\s+$/, '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2071
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2072
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2073
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2074
Returns one of the following strings, representing the type of the item passed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2075
in:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2076
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2077
 * "array"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2078
 * "boolean"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2079
 * "date"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2080
 * "error"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2081
 * "function"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2082
 * "null"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2083
 * "number"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2084
 * "object"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2085
 * "regexp"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2086
 * "string"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2087
 * "undefined"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2088
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2089
Known issues:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2090
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2091
 * `typeof HTMLElementCollection` returns function in Safari, but
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2092
    `Y.Lang.type()` reports "object", which could be a good thing --
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2093
    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
  2094
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2095
@method type
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2096
@param o the item to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2097
@return {string} the detected type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2098
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2099
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2100
L.type = function(o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2101
    return TYPES[typeof o] || TYPES[TOSTRING.call(o)] || (o ? 'object' : 'null');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2102
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2103
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2104
@module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2105
@submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2106
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2108
var Lang   = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2109
    Native = Array.prototype,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2111
    hasOwn = Object.prototype.hasOwnProperty;
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
Provides utility methods for working with arrays. Additional array helpers can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2115
be found in the `collection` and `array-extras` modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2116
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2117
`Y.Array(thing)` returns a native array created from _thing_. Depending on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2118
_thing_'s type, one of the following will happen:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2120
  * Arrays are returned unmodified unless a non-zero _startIndex_ is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2121
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2122
  * Array-like collections (see `Array.test()`) are converted to arrays.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2123
  * For everything else, a new array is created with _thing_ as the sole
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2124
    item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2126
Note: elements that are also collections, such as `<form>` and `<select>`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2127
elements, are not automatically converted to arrays. To force a conversion,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2128
pass `true` as the value of the _force_ parameter.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2129
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2130
@class Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2131
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2132
@param {Any} thing The thing to arrayify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2133
@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
  2134
  collection, a subset of items starting at the specified index will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2135
  returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2136
@param {Boolean} [force=false] If `true`, _thing_ will be treated as an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2137
  array-like collection no matter what.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2138
@return {Array} A native array created from _thing_, according to the rules
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2139
  described above.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2140
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2141
function YArray(thing, startIndex, force) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2142
    var len, result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2144
    /*jshint expr: true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2145
    startIndex || (startIndex = 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2147
    if (force || YArray.test(thing)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2148
        // IE throws when trying to slice HTMLElement collections.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2149
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2150
            return Native.slice.call(thing, startIndex);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2151
        } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2152
            result = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2154
            for (len = thing.length; startIndex < len; ++startIndex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2155
                result.push(thing[startIndex]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2156
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2158
            return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2159
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2160
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2162
    return [thing];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2163
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2165
Y.Array = YArray;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2167
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2168
Dedupes an array of strings, returning an array that's guaranteed to contain
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2169
only one copy of a given string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2171
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
  2172
with strings, whereas `unique` may be used with other types (but is slower).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2173
Using `dedupe()` with non-string values may result in unexpected behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2175
@method dedupe
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2176
@param {String[]} array Array of strings to dedupe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2177
@return {Array} Deduped copy of _array_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2178
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2179
@since 3.4.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
YArray.dedupe = function (array) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2182
    var hash    = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2183
        results = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2184
        i, item, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2186
    for (i = 0, len = array.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2187
        item = array[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2189
        if (!hasOwn.call(hash, item)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2190
            hash[item] = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2191
            results.push(item);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2192
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2193
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2195
    return results;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2196
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2198
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2199
Executes the supplied function on each item in the array. This method wraps
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2200
the native ES5 `Array.forEach()` method if available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2202
@method each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2203
@param {Array} array Array to iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2204
@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
  2205
  will receive the following arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2206
    @param {Any} fn.item Current array item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2207
    @param {Number} fn.index Current array index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2208
    @param {Array} fn.array Array being iterated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2209
@param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2210
@return {YUI} The YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2211
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2212
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2213
YArray.each = YArray.forEach = Lang._isNative(Native.forEach) ? function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2214
    Native.forEach.call(array || [], fn, thisObj || Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2215
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2216
} : function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2217
    for (var i = 0, len = (array && array.length) || 0; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2218
        if (i in array) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2219
            fn.call(thisObj || Y, array[i], i, array);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2220
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2221
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2223
    return Y;
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2227
Alias for `each()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2229
@method forEach
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2230
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2231
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2233
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2234
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
  2235
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
  2236
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
  2237
values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2239
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2241
    Y.Array.hash(['a', 'b', 'c'], ['foo', 'bar']);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2242
    // => {a: 'foo', b: 'bar', c: true}
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 hash
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2245
@param {String[]} keys Array of strings to use as keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2246
@param {Array} [values] Array to use as values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2247
@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
  2248
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2249
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2250
YArray.hash = function (keys, values) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2251
    var hash = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2252
        vlen = (values && values.length) || 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2253
        i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2255
    for (i = 0, len = keys.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2256
        if (i in keys) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2257
            hash[keys[i]] = vlen > i && i in values ? values[i] : true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2258
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2259
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2260
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2261
    return hash;
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
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
  2266
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
  2267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2268
This method wraps the native ES5 `Array.indexOf()` method if available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2270
@method indexOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2271
@param {Array} array Array to search.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2272
@param {Any} value Value to search for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2273
@param {Number} [from=0] The index at which to begin the search.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2274
@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
  2275
    found.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2276
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2277
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2278
YArray.indexOf = Lang._isNative(Native.indexOf) ? function (array, value, from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2279
    return Native.indexOf.call(array, value, from);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2280
} : function (array, value, from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2281
    // http://es5.github.com/#x15.4.4.14
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2282
    var len = array.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2284
    from = +from || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2285
    from = (from > 0 || -1) * Math.floor(Math.abs(from));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2287
    if (from < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2288
        from += len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2290
        if (from < 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2291
            from = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2292
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2293
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2295
    for (; from < len; ++from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2296
        if (from in array && array[from] === value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2297
            return from;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2298
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2299
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2301
    return -1;
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2305
Numeric sort convenience function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2307
The native `Array.prototype.sort()` function converts values to strings and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2308
sorts them in lexicographic order, which is unsuitable for sorting numeric
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2309
values. Provide `Array.numericSort` as a custom sort function when you want
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2310
to sort values in numeric order.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2312
@example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2314
    [42, 23, 8, 16, 4, 15].sort(Y.Array.numericSort);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2315
    // => [4, 8, 15, 16, 23, 42]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2317
@method numericSort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2318
@param {Number} a First value to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2319
@param {Number} b Second value to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2320
@return {Number} Difference between _a_ and _b_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2321
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2322
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2323
YArray.numericSort = function (a, b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2324
    return a - b;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2325
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2327
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2328
Executes the supplied function on each item in the array. Returning a truthy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2329
value from the function will stop the processing of remaining items.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2331
@method some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2332
@param {Array} array Array to iterate over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2333
@param {Function} fn Function to execute on each item. The function will receive
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2334
  the following arguments:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2335
    @param {Any} fn.value Current array item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2336
    @param {Number} fn.index Current array index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2337
    @param {Array} fn.array Array being iterated over.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2338
@param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2339
@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
  2340
  items in the array; `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2341
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2342
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2343
YArray.some = Lang._isNative(Native.some) ? function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2344
    return Native.some.call(array, fn, thisObj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2345
} : function (array, fn, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2346
    for (var i = 0, len = array.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2347
        if (i in array && fn.call(thisObj, array[i], i, array)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2348
            return true;
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
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2353
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2355
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2356
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
  2357
something else. This is useful when working with the function `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2358
collection and `HTMLElement` collections.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2360
Note: This implementation doesn't consider elements that are also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2361
collections, such as `<form>` and `<select>`, to be array-like.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2362
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2363
@method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2364
@param {Object} obj Object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2365
@return {Number} A number indicating the results of the test:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2366
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2367
  * 0: Neither an array nor an array-like collection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2368
  * 1: Real array.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2369
  * 2: Array-like collection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2371
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2372
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2373
YArray.test = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2374
    var result = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2376
    if (Lang.isArray(obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2377
        result = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2378
    } else if (Lang.isObject(obj)) {
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
            // 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
  2381
            // or functions without apply/call (Safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2382
            // HTMLElementCollection bug).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2383
            if ('length' in obj && !obj.tagName && !(obj.scrollTo && obj.document) && !obj.apply) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2384
                result = 2;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2385
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2386
        } catch (ex) {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2387
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2389
    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2390
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2391
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2392
 * The YUI module contains the components required for building the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2393
 * seed file.  This includes the script loading mechanism, a simple queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2394
 * and the core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2395
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2396
 * @submodule yui-base
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
 * 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
  2401
 * removed using next().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2402
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2403
 * @class Queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2404
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2405
 * @param {MIXED} item* 0..n items to seed the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2406
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2407
function Queue() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2408
    this._init();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2409
    this.add.apply(this, arguments);
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
Queue.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2413
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2414
     * Initialize the queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2415
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2416
     * @method _init
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2417
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2418
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2419
    _init: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2420
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2421
         * The collection of enqueued items
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2422
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2423
         * @property _q
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2424
         * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2425
         * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2426
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2427
        this._q = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2428
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2430
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2431
     * Get the next item in the queue. FIFO support
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2432
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2433
     * @method next
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2434
     * @return {MIXED} the next item in the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2435
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2436
    next: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2437
        return this._q.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2438
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2440
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2441
     * Get the last in the queue. LIFO support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2442
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2443
     * @method last
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2444
     * @return {MIXED} the last item in the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2445
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2446
    last: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2447
        return this._q.pop();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2448
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2450
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2451
     * Add 0..n items to the end of the queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2452
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2453
     * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2454
     * @param {MIXED} item* 0..n items.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2455
     * @return {object} this queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2456
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2457
    add: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2458
        this._q.push.apply(this._q, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2460
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2461
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2462
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2463
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2464
     * Returns the current number of queued items.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2465
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2466
     * @method size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2467
     * @return {Number} The size.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2468
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2469
    size: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2470
        return this._q.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2471
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2472
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2474
Y.Queue = Queue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2475
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2476
YUI.Env._loaderQueue = YUI.Env._loaderQueue || new Queue();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2478
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2479
The YUI module contains the components required for building the YUI seed file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2480
This includes the script loading mechanism, a simple queue, and the core
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2481
utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2483
@module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2484
@submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2485
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2486
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2487
var CACHED_DELIMITER = '__',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2489
    hasOwn   = Object.prototype.hasOwnProperty,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2490
    isObject = Y.Lang.isObject;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2492
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2493
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
  2494
keyed off of the combined string representation of the argument values provided
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2495
when the wrapper is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2497
Calling this function again with the same arguments will return the cached value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2498
rather than executing the wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2500
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
  2501
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
  2502
a meaningful `toString()` method may result in unexpected caching behavior. For
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2503
example, the objects `{}` and `{foo: 'bar'}` would both be converted to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2504
string `[object Object]` when used as a cache key.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2506
@method cached
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2507
@param {Function} source The function to memoize.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2508
@param {Object} [cache={}] Object in which to store cached values. You may seed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2509
  this object with pre-existing cached values if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2510
@param {any} [refetch] If supplied, this value is compared with the cached value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2511
  using a `==` comparison. If the values are equal, the wrapped function is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2512
  executed again even though a cached value exists.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2513
@return {Function} Wrapped function.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2514
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2515
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2516
Y.cached = function (source, cache, refetch) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2517
    /*jshint expr: true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2518
    cache || (cache = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2519
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2520
    return function (arg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2521
        var key = arguments.length > 1 ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2522
                Array.prototype.join.call(arguments, CACHED_DELIMITER) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2523
                String(arg);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2524
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2525
        /*jshint eqeqeq: false*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2526
        if (!(key in cache) || (refetch && cache[key] == refetch)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2527
            cache[key] = source.apply(source, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2528
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2530
        return cache[key];
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2535
Returns the `location` object from the window/frame in which this YUI instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2536
operates, or `undefined` when executing in a non-browser environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2537
(e.g. Node.js).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2539
It is _not_ recommended to hold references to the `window.location` object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2540
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
  2541
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
  2542
in both Safari and MobileSafari browsers:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2543
[WebKit Bug 34679](https://bugs.webkit.org/show_bug.cgi?id=34679).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2544
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2545
@method getLocation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2546
@return {location} The `location` object from the window/frame in which this YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2547
    instance operates.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2548
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2549
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2550
Y.getLocation = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2551
    // 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
  2552
    // 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
  2553
    // not point the correct window object when this file is loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2554
    var win = Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2556
    // 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
  2557
    // 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
  2558
    // MobileSafari will "disconnect" the `location` object from the `window`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2559
    // when a page is restored from back/forward history cache.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2560
    return win && win.location;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2561
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2562
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2563
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2564
Returns a new object containing all of the properties of all the supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2565
objects. The properties from later objects will overwrite those in earlier
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2566
objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2568
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
  2569
use `clone()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2571
@method merge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2572
@param {Object} objects* One or more objects to merge.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2573
@return {Object} A new merged object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2574
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2575
Y.merge = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2576
    var i      = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2577
        len    = arguments.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2578
        result = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2579
        key,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2580
        obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2582
    for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2583
        obj = arguments[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2585
        for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2586
            if (hasOwn.call(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2587
                result[key] = obj[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2588
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2589
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2590
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2592
    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2593
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2594
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2595
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2596
Mixes _supplier_'s properties into _receiver_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2598
Properties on _receiver_ or _receiver_'s prototype will not be overwritten or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2599
shadowed unless the _overwrite_ parameter is `true`, and will not be merged
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2600
unless the _merge_ parameter is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2602
In the default mode (0), only properties the supplier owns are copied (prototype
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2603
properties are not copied). The following copying modes are available:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2605
  * `0`: _Default_. Object to object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2606
  * `1`: Prototype to prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2607
  * `2`: Prototype to prototype and object to object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2608
  * `3`: Prototype to object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2609
  * `4`: Object to prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2610
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2611
@method mix
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2612
@param {Function|Object} receiver The object or function to receive the mixed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2613
  properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2614
@param {Function|Object} supplier The object or function supplying the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2615
  properties to be mixed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2616
@param {Boolean} [overwrite=false] If `true`, properties that already exist
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2617
  on the receiver will be overwritten with properties from the supplier.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2618
@param {String[]} [whitelist] An array of property names to copy. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2619
  specified, only the whitelisted properties will be copied, and all others
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2620
  will be ignored.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2621
@param {Number} [mode=0] Mix mode to use. See above for available modes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2622
@param {Boolean} [merge=false] If `true`, objects and arrays that already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2623
  exist on the receiver will have the corresponding object/array from the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2624
  supplier merged into them, rather than being skipped or overwritten. When
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2625
  both _overwrite_ and _merge_ are `true`, _merge_ takes precedence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2626
@return {Function|Object|YUI} The receiver, or the YUI instance if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2627
  specified receiver is falsy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2628
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2629
Y.mix = function(receiver, supplier, overwrite, whitelist, mode, merge) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2630
    var alwaysOverwrite, exists, from, i, key, len, to;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2632
    // 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
  2633
    // 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
  2634
    // grandfathered in for backcompat reasons.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2635
    if (!receiver || !supplier) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2636
        return receiver || Y;
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
    if (mode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2640
        // In mode 2 (prototype to prototype and object to object), we recurse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2641
        // 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
  2642
        // handled later on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2643
        if (mode === 2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2644
            Y.mix(receiver.prototype, supplier.prototype, overwrite,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2645
                    whitelist, 0, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2646
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2648
        // Depending on which mode is specified, we may be copying from or to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2649
        // the prototypes of the supplier and receiver.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2650
        from = mode === 1 || mode === 3 ? supplier.prototype : supplier;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2651
        to   = mode === 1 || mode === 4 ? receiver.prototype : receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2653
        // If either the supplier or receiver doesn't actually have a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2654
        // prototype property, then we could end up with an undefined `from`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2655
        // or `to`. If that happens, we abort and return the receiver.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2656
        if (!from || !to) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2657
            return receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2658
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2659
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2660
        from = supplier;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2661
        to   = receiver;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2662
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2664
    // If `overwrite` is truthy and `merge` is falsy, then we can skip a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2665
    // property existence check on each iteration and save some time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2666
    alwaysOverwrite = overwrite && !merge;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2668
    if (whitelist) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2669
        for (i = 0, len = whitelist.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2670
            key = whitelist[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2672
            // We call `Object.prototype.hasOwnProperty` instead of calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2673
            // `hasOwnProperty` on the object itself, since the object's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2674
            // `hasOwnProperty` method may have been overridden or removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2675
            // Also, some native objects don't implement a `hasOwnProperty`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2676
            // method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2677
            if (!hasOwn.call(from, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2678
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2679
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2681
            // The `key in to` check here is (sadly) intentional for backwards
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2682
            // compatibility reasons. It prevents undesired shadowing of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2683
            // prototype members on `to`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2684
            exists = alwaysOverwrite ? false : key in to;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2686
            if (merge && exists && isObject(to[key], true)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2687
                    && isObject(from[key], true)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2688
                // If we're in merge mode, and the key is present on both
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2689
                // objects, and the value on both objects is either an object or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2690
                // an array (but not a function), then we recurse to merge the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2691
                // `from` value into the `to` value instead of overwriting it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2692
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2693
                // Note: It's intentional that the whitelist isn't passed to the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2694
                // recursive call here. This is legacy behavior that lots of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2695
                // code still depends on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2696
                Y.mix(to[key], from[key], overwrite, null, 0, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2697
            } else if (overwrite || !exists) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2698
                // 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
  2699
                // to the `to` value if we're in overwrite mode or if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2700
                // current key doesn't exist on the `to` object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2701
                to[key] = from[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2702
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2703
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2704
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2705
        for (key in from) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2706
            // The code duplication here is for runtime performance reasons.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2707
            // Combining whitelist and non-whitelist operations into a single
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2708
            // loop or breaking the shared logic out into a function both result
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2709
            // in worse performance, and Y.mix is critical enough that the byte
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2710
            // tradeoff is worth it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2711
            if (!hasOwn.call(from, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2712
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2713
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2715
            // The `key in to` check here is (sadly) intentional for backwards
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2716
            // compatibility reasons. It prevents undesired shadowing of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2717
            // prototype members on `to`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2718
            exists = alwaysOverwrite ? false : key in to;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2720
            if (merge && exists && isObject(to[key], true)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2721
                    && isObject(from[key], true)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2722
                Y.mix(to[key], from[key], overwrite, null, 0, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2723
            } else if (overwrite || !exists) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2724
                to[key] = from[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2725
            }
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
        // If this is an IE browser with the JScript enumeration bug, force
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2729
        // enumeration of the buggy properties by making a recursive call with
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2730
        // the buggy properties as the whitelist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2731
        if (Y.Object._hasEnumBug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2732
            Y.mix(to, from, overwrite, Y.Object._forceEnum, mode, merge);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2733
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2734
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2736
    return receiver;
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
 * The YUI module contains the components required for building the YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2740
 * seed file.  This includes the script loading mechanism, a simple queue,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2741
 * and the core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2742
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2743
 * @submodule yui-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2744
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2746
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2747
 * Adds utilities to the YUI instance for working with objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2748
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2749
 * @class Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2750
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2751
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2752
var Lang   = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2753
    hasOwn = Object.prototype.hasOwnProperty,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2754
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2755
    UNDEFINED, // <-- Note the comma. We're still declaring vars.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2757
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2758
 * 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
  2759
 * native ES5 `Object.create()` method if available, but doesn't currently
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2760
 * pass through `Object.create()`'s second argument (properties) in order to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2761
 * ensure compatibility with older browsers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2762
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2763
 * @method ()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2764
 * @param {Object} obj Prototype object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2765
 * @return {Object} New object using _obj_ as its prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2766
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2767
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2768
O = Y.Object = Lang._isNative(Object.create) ? function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2769
    // We currently wrap the native Object.create instead of simply aliasing it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2770
    // to ensure consistency with our fallback shim, which currently doesn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2771
    // support Object.create()'s second argument (properties). Once we have a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2772
    // safe fallback for the properties arg, we can stop wrapping
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2773
    // Object.create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2774
    return Object.create(obj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2775
} : (function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2776
    // Reusable constructor function for the Object.create() shim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2777
    function F() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2779
    // The actual shim.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2780
    return function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2781
        F.prototype = obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2782
        return new F();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2783
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2784
}()),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2785
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2786
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2787
 * 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
  2788
 * should be enumerable. When `_hasEnumBug` is `true`, it's necessary to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2789
 * manually enumerate these properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2790
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2791
 * @property _forceEnum
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2792
 * @type String[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2793
 * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2794
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2795
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2796
forceEnum = O._forceEnum = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2797
    'hasOwnProperty',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2798
    'isPrototypeOf',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2799
    'propertyIsEnumerable',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2800
    'toString',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2801
    'toLocaleString',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2802
    'valueOf'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2803
],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2804
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2805
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2806
 * `true` if this browser has the JScript enumeration bug that prevents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2807
 * enumeration of the properties named in the `_forceEnum` array, `false`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2808
 * otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2809
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2810
 * See:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2811
 *   - <https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2812
 *   - <http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2813
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2814
 * @property _hasEnumBug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2815
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2816
 * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2817
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2818
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2819
hasEnumBug = O._hasEnumBug = !{valueOf: 0}.propertyIsEnumerable('valueOf'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2820
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2821
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2822
 * `true` if this browser incorrectly considers the `prototype` property of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2823
 * functions to be enumerable. Currently known to affect Opera 11.50.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2824
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2825
 * @property _hasProtoEnumBug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2826
 * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2827
 * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2828
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2829
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2830
hasProtoEnumBug = O._hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2831
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2832
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2833
 * 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
  2834
 * exists only on _obj_'s prototype. This is essentially a safer version of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2835
 * `obj.hasOwnProperty()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2836
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2837
 * @method owns
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2838
 * @param {Object} obj Object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2839
 * @param {String} key Property name to look for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2840
 * @return {Boolean} `true` if _key_ exists on _obj_, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2841
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2842
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2843
owns = O.owns = function (obj, key) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2844
    return !!obj && hasOwn.call(obj, key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2845
}; // <-- End of var declarations.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2847
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2848
 * Alias for `owns()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2849
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2850
 * @method hasKey
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2851
 * @param {Object} obj Object to test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2852
 * @param {String} key Property name to look for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2853
 * @return {Boolean} `true` if _key_ exists on _obj_, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2854
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2855
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2856
O.hasKey = owns;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2857
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2858
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2859
 * Returns an array containing the object's enumerable keys. Does not include
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2860
 * prototype keys or non-enumerable keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2861
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2862
 * 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
  2863
 * 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
  2864
 * as the order in which they were defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2865
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2866
 * This method is an alias for the native ES5 `Object.keys()` method if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2867
 * available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2868
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2869
 * @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2870
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2871
 *     Y.Object.keys({a: 'foo', b: 'bar', c: 'baz'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2872
 *     // => ['a', 'b', 'c']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2873
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2874
 * @method keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2875
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2876
 * @return {String[]} Array of keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2877
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2878
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2879
O.keys = Lang._isNative(Object.keys) ? Object.keys : function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2880
    if (!Lang.isObject(obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2881
        throw new TypeError('Object.keys called on a non-object');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2882
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2883
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2884
    var keys = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2885
        i, key, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2887
    if (hasProtoEnumBug && typeof obj === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2888
        for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2889
            if (owns(obj, key) && key !== 'prototype') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2890
                keys.push(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2891
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2892
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2893
    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2894
        for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2895
            if (owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2896
                keys.push(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2897
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2898
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2899
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2901
    if (hasEnumBug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2902
        for (i = 0, len = forceEnum.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2903
            key = forceEnum[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2904
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2905
            if (owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2906
                keys.push(key);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2907
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2908
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2909
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2911
    return keys;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2912
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2913
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2914
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2915
 * Returns an array containing the values of the object's enumerable keys.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2916
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2917
 * Note that values are returned in enumeration order (that is, in the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2918
 * 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
  2919
 * same as the order in which they were defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2920
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2921
 * @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2922
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2923
 *     Y.Object.values({a: 'foo', b: 'bar', c: 'baz'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2924
 *     // => ['foo', 'bar', 'baz']
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2925
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2926
 * @method values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2927
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2928
 * @return {Array} Array of values.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2929
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2930
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2931
O.values = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2932
    var keys   = O.keys(obj),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2933
        i      = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2934
        len    = keys.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2935
        values = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2936
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2937
    for (; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2938
        values.push(obj[keys[i]]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2939
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2941
    return values;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2942
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2944
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2945
 * Returns the number of enumerable keys owned by an object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2946
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2947
 * @method size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2948
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2949
 * @return {Number} The object's size.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2950
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2951
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2952
O.size = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2953
    try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2954
        return O.keys(obj).length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2955
    } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2956
        return 0; // Legacy behavior for non-objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2957
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2958
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2960
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2961
 * Returns `true` if the object owns an enumerable property with the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2962
 * value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2963
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2964
 * @method hasValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2965
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2966
 * @param {any} value The value to search for.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2967
 * @return {Boolean} `true` if _obj_ contains _value_, `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2968
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2969
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2970
O.hasValue = function (obj, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2971
    return Y.Array.indexOf(O.values(obj), value) > -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2972
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2973
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2974
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2975
 * Executes a function on each enumerable property in _obj_. The function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2976
 * receives the value, the key, and the object itself as parameters (in that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2977
 * order).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2978
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2979
 * By default, only properties owned by _obj_ are enumerated. To include
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2980
 * prototype properties, set the _proto_ parameter to `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2981
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2982
 * @method each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2983
 * @param {Object} obj Object to enumerate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2984
 * @param {Function} fn Function to execute on each enumerable property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2985
 *   @param {mixed} fn.value Value of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2986
 *   @param {String} fn.key Key of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2987
 *   @param {Object} fn.obj Object being enumerated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2988
 * @param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2989
 * @param {Boolean} [proto=false] Include prototype properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2990
 * @return {YUI} the YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2991
 * @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2992
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2993
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2994
O.each = function (obj, fn, thisObj, proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2995
    var key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2997
    for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2998
        if (proto || owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2999
            fn.call(thisObj || Y, obj[key], key, obj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3000
        }
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
    return Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3004
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3006
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3007
 * Executes a function on each enumerable property in _obj_, but halts if the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3008
 * function returns a truthy value. The function receives the value, the key,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3009
 * and the object itself as paramters (in that order).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3010
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3011
 * By default, only properties owned by _obj_ are enumerated. To include
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3012
 * prototype properties, set the _proto_ parameter to `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3013
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3014
 * @method some
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3015
 * @param {Object} obj Object to enumerate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3016
 * @param {Function} fn Function to execute on each enumerable property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3017
 *   @param {mixed} fn.value Value of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3018
 *   @param {String} fn.key Key of the current property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3019
 *   @param {Object} fn.obj Object being enumerated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3020
 * @param {Object} [thisObj] `this` object to use when calling _fn_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3021
 * @param {Boolean} [proto=false] Include prototype properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3022
 * @return {Boolean} `true` if any execution of _fn_ returns a truthy value,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3023
 *   `false` otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3024
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3025
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3026
O.some = function (obj, fn, thisObj, proto) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3027
    var key;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3029
    for (key in obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3030
        if (proto || owns(obj, key)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3031
            if (fn.call(thisObj || Y, obj[key], key, obj)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3032
                return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3033
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3034
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3035
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3037
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3038
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3039
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3040
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3041
 * Retrieves the sub value at the provided path,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3042
 * from the value object provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3043
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3044
 * @method getValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3045
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3046
 * @param o The object from which to extract the property value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3047
 * @param path {Array} A path array, specifying the object traversal path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3048
 * from which to obtain the sub value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3049
 * @return {Any} The value stored in the path, undefined if not found,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3050
 * undefined if the source is not an object.  Returns the source object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3051
 * if an empty path is provided.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3052
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3053
O.getValue = function(o, path) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3054
    if (!Lang.isObject(o)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3055
        return UNDEFINED;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3056
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3057
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3058
    var i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3059
        p = Y.Array(path),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3060
        l = p.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3061
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3062
    for (i = 0; o !== UNDEFINED && i < l; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3063
        o = o[p[i]];
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
    return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3067
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3068
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3069
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3070
 * Sets the sub-attribute value at the provided path on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3071
 * value object.  Returns the modified value object, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3072
 * undefined if the path is invalid.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3073
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3074
 * @method setValue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3075
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3076
 * @param o             The object on which to set the sub value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3077
 * @param path {Array}  A path array, specifying the object traversal path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3078
 *                      at which to set the sub value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3079
 * @param val {Any}     The new value for the sub-attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3080
 * @return {Object}     The modified object, with the new sub value set, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3081
 *                      undefined, if the path was invalid.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3082
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3083
O.setValue = function(o, path, val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3084
    var i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3085
        p = Y.Array(path),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3086
        leafIdx = p.length - 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3087
        ref = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3088
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3089
    if (leafIdx >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3090
        for (i = 0; ref !== UNDEFINED && i < leafIdx; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3091
            ref = ref[p[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3092
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3094
        if (ref !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3095
            ref[p[i]] = val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3096
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3097
            return UNDEFINED;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3098
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3099
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3100
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3101
    return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3102
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3104
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3105
 * Returns `true` if the object has no enumerable properties of its own.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3106
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3107
 * @method isEmpty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3108
 * @param {Object} obj An object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3109
 * @return {Boolean} `true` if the object is empty.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3110
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3111
 * @since 3.2.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3112
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3113
O.isEmpty = function (obj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3114
    return !O.keys(Object(obj)).length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3115
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3116
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3117
 * The YUI module contains the components required for building the YUI seed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3118
 * file.  This includes the script loading mechanism, a simple queue, and the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3119
 * core utilities for the library.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3120
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3121
 * @submodule yui-base
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
 * YUI user agent detection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3126
 * 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
  3127
 * 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
  3128
 * as @type float, UA stores a version number for the browser engine,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3129
 * 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
  3130
 * the browser using the engine.  The value is presented as a float so
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3131
 * that it can easily be used for boolean evaluation as well as for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3132
 * looking for a particular range of versions.  Because of this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3133
 * 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
  3134
 * are @type string default to null.  The API docs list the values that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3135
 * these fields can have.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3136
 * @class UA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3137
 * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3138
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3140
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3141
* Static method on `YUI.Env` for parsing a UA string.  Called at instantiation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3142
* to populate `Y.UA`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3143
*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3144
* @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3145
* @method parseUA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3146
* @param {String} [subUA=navigator.userAgent] UA string to parse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3147
* @return {Object} The Y.UA object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3148
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3149
YUI.Env.parseUA = function(subUA) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3151
    var numberify = function(s) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3152
            var c = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3153
            return parseFloat(s.replace(/\./g, function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3154
                return (c++ === 1) ? '' : '.';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3155
            }));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3156
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3158
        win = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3160
        nav = win && win.navigator,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3162
        o = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3164
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3165
         * Internet Explorer version number or 0.  Example: 6
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3166
         * @property ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3167
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3168
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3169
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3170
        ie: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3172
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3173
         * Opera version number or 0.  Example: 9.2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3174
         * @property opera
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3175
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3176
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3177
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3178
        opera: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3179
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3180
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3181
         * Gecko engine revision number.  Will evaluate to 1 if Gecko
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3182
         * is detected but the revision could not be found. Other browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3183
         * will be 0.  Example: 1.8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3184
         * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3185
         * Firefox 1.0.0.4: 1.7.8   <-- Reports 1.7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3186
         * Firefox 1.5.0.9: 1.8.0.9 <-- 1.8
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3187
         * Firefox 2.0.0.3: 1.8.1.3 <-- 1.81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3188
         * Firefox 3.0   <-- 1.9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3189
         * Firefox 3.5   <-- 1.91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3190
         * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3191
         * @property gecko
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3192
         * @type float
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
        gecko: 0,
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
         * AppleWebKit version.  KHTML browsers that are not WebKit browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3199
         * will evaluate to 1, other browsers 0.  Example: 418.9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3200
         * <pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3201
         * 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
  3202
         *                                   latest available for Mac OSX 10.3.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3203
         * Safari 2.0.2:         416     <-- hasOwnProperty introduced
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3204
         * Safari 2.0.4:         418     <-- preventDefault fixed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3205
         * 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
  3206
         *                                   different versions of webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3207
         * Safari 2.0.4 (419.3): 419     <-- Tiger installations that have been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3208
         *                                   updated, but not updated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3209
         *                                   to the latest patch.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3210
         * Webkit 212 nightly:   522+    <-- Safari 3.0 precursor (with native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3211
         * SVG and many major issues fixed).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3212
         * Safari 3.0.4 (523.12) 523.12  <-- First Tiger release - automatic
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3213
         * update from 2.x via the 10.4.11 OS patch.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3214
         * Webkit nightly 1/2008:525+    <-- Supports DOMContentLoaded event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3215
         *                                   yahoo.com user agent hack removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3216
         * </pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3217
         * http://en.wikipedia.org/wiki/Safari_version_history
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3218
         * @property webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3219
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3220
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3221
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3222
        webkit: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3224
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3225
         * Safari will be detected as webkit, but this property will also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3226
         * be populated with the Safari version number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3227
         * @property safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3228
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3229
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3230
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3231
        safari: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3233
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3234
         * Chrome will be detected as webkit, but this property will also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3235
         * be populated with the Chrome version number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3236
         * @property chrome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3237
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3238
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3239
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3240
        chrome: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3242
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3243
         * The mobile property will be set to a string containing any relevant
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3244
         * user agent information when a modern mobile browser is detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3245
         * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3246
         * devices with the WebKit-based browser, and Opera Mini.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3247
         * @property mobile
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3248
         * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3249
         * @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3250
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3251
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3252
        mobile: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3253
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3254
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3255
         * Adobe AIR version number or 0.  Only populated if webkit is detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3256
         * Example: 1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3257
         * @property air
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3258
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3259
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3260
        air: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3261
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3262
         * PhantomJS version number or 0.  Only populated if webkit is detected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3263
         * Example: 1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3264
         * @property phantomjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3265
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3266
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3267
        phantomjs: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3268
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3269
         * Detects Apple iPad's OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3270
         * @property ipad
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3271
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3272
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3273
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3274
        ipad: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3275
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3276
         * Detects Apple iPhone's OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3277
         * @property iphone
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3278
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3279
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3280
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3281
        iphone: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3282
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3283
         * Detects Apples iPod's OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3284
         * @property ipod
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3285
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3286
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3287
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3288
        ipod: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3289
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3290
         * General truthy check for iPad, iPhone or iPod
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3291
         * @property ios
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3292
         * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3293
         * @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3294
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3295
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3296
        ios: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3297
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3298
         * Detects Googles Android OS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3299
         * @property android
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3300
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3301
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3302
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3303
        android: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3304
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3305
         * Detects Kindle Silk
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3306
         * @property silk
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3307
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3308
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3309
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3310
        silk: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3311
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3312
         * Detects Kindle Silk Acceleration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3313
         * @property accel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3314
         * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3315
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3316
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3317
        accel: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3318
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3319
         * Detects Palms WebOS version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3320
         * @property webos
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3321
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3322
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3323
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3324
        webos: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3326
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3327
         * Google Caja version number or 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3328
         * @property caja
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3329
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3330
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3331
        caja: nav && nav.cajaVersion,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3333
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3334
         * Set to true if the page appears to be in SSL
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3335
         * @property secure
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3336
         * @type boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3337
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3338
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3339
        secure: false,
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
         * The operating system.  Currently only detecting windows or macintosh
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3343
         * @property os
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3344
         * @type string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3345
         * @default null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3346
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3347
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3348
        os: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3349
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3350
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3351
         * The Nodejs Version
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3352
         * @property nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3353
         * @type float
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3354
         * @default 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3355
         * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3356
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3357
        nodejs: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3358
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3359
        * Window8/IE10 Application host environment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3360
        * @property winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3361
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3362
        * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3363
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3364
        winjs: !!((typeof Windows !== "undefined") && Windows.System),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3365
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3366
        * Are touch/msPointer events available on this device
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3367
        * @property touchEnabled
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3368
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3369
        * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3370
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3371
        touchEnabled: false
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
    ua = subUA || nav && nav.userAgent,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3376
    loc = win && win.location,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3378
    href = loc && loc.href,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3380
    m;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3382
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3383
    * The User Agent string that was parsed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3384
    * @property userAgent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3385
    * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3386
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3387
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3388
    o.userAgent = ua;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3391
    o.secure = href && (href.toLowerCase().indexOf('https') === 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3392
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3393
    if (ua) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3395
        if ((/windows|win32/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3396
            o.os = 'windows';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3397
        } else if ((/macintosh|mac_powerpc/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3398
            o.os = 'macintosh';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3399
        } else if ((/android/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3400
            o.os = 'android';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3401
        } else if ((/symbos/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3402
            o.os = 'symbos';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3403
        } else if ((/linux/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3404
            o.os = 'linux';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3405
        } else if ((/rhino/i).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3406
            o.os = 'rhino';
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
        // Modern KHTML browsers should qualify as Safari X-Grade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3410
        if ((/KHTML/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3411
            o.webkit = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3412
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3413
        if ((/IEMobile|XBLWP7/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3414
            o.mobile = 'windows';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3415
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3416
        if ((/Fennec/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3417
            o.mobile = 'gecko';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3418
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3419
        // Modern WebKit browsers are at least X-Grade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3420
        m = ua.match(/AppleWebKit\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3421
        if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3422
            o.webkit = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3423
            o.safari = o.webkit;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3425
            if (/PhantomJS/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3426
                m = ua.match(/PhantomJS\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3427
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3428
                    o.phantomjs = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3429
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3430
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3432
            // Mobile browser check
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3433
            if (/ Mobile\//.test(ua) || (/iPad|iPod|iPhone/).test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3434
                o.mobile = 'Apple'; // iPhone or iPod Touch
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3435
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3436
                m = ua.match(/OS ([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3437
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3438
                    m = numberify(m[1].replace('_', '.'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3439
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3440
                o.ios = m;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3441
                o.os = 'ios';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3442
                o.ipad = o.ipod = o.iphone = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3444
                m = ua.match(/iPad|iPod|iPhone/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3445
                if (m && m[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3446
                    o[m[0].toLowerCase()] = o.ios;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3447
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3448
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3449
                m = ua.match(/NokiaN[^\/]*|webOS\/\d\.\d/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3450
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3451
                    // Nokia N-series, webOS, ex: NokiaN95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3452
                    o.mobile = m[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3453
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3454
                if (/webOS/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3455
                    o.mobile = 'WebOS';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3456
                    m = ua.match(/webOS\/([^\s]*);/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3457
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3458
                        o.webos = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3459
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3460
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3461
                if (/ Android/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3462
                    if (/Mobile/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3463
                        o.mobile = 'Android';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3464
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3465
                    m = ua.match(/Android ([^\s]*);/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3466
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3467
                        o.android = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3468
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3470
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3471
                if (/Silk/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3472
                    m = ua.match(/Silk\/([^\s]*)\)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3473
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3474
                        o.silk = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3475
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3476
                    if (!o.android) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3477
                        o.android = 2.34; //Hack for desktop mode in Kindle
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3478
                        o.os = 'Android';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3479
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3480
                    if (/Accelerated=true/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3481
                        o.accel = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3482
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3483
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3484
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3486
            m = ua.match(/(Chrome|CrMo|CriOS)\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3487
            if (m && m[1] && m[2]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3488
                o.chrome = numberify(m[2]); // Chrome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3489
                o.safari = 0; //Reset safari back to 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3490
                if (m[1] === 'CrMo') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3491
                    o.mobile = 'chrome';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3492
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3493
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3494
                m = ua.match(/AdobeAIR\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3495
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3496
                    o.air = m[0]; // Adobe AIR 1.0 or better
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3497
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3498
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3499
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3501
        if (!o.webkit) { // not webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3502
// @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
  3503
            if (/Opera/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3504
                m = ua.match(/Opera[\s\/]([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3505
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3506
                    o.opera = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3507
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3508
                m = ua.match(/Version\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3509
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3510
                    o.opera = numberify(m[1]); // opera 10+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3511
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3513
                if (/Opera Mobi/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3514
                    o.mobile = 'opera';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3515
                    m = ua.replace('Opera Mobi', '').match(/Opera ([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3516
                    if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3517
                        o.opera = numberify(m[1]);
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
                m = ua.match(/Opera Mini[^;]*/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3522
                if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3523
                    o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3524
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3525
            } else { // not opera or webkit
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3526
                m = ua.match(/MSIE\s([^;]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3527
                if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3528
                    o.ie = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3529
                } else { // not opera, webkit, or ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3530
                    m = ua.match(/Gecko\/([^\s]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3531
                    if (m) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3532
                        o.gecko = 1; // Gecko detected, look for revision
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3533
                        m = ua.match(/rv:([^\s\)]*)/);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3534
                        if (m && m[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3535
                            o.gecko = numberify(m[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3536
                            if (/Mobile|Tablet/.test(ua)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3537
                                o.mobile = "ffos";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3538
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3539
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3540
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3541
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3542
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3543
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3544
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3545
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3546
    //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
  3547
    //the number of MSPointer touchpoints on this device is greater than 0.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3548
    if (win && nav && !(o.chrome && o.chrome < 6)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3549
        o.touchEnabled = (("ontouchstart" in win) || (("msMaxTouchPoints" in nav) && (nav.msMaxTouchPoints > 0)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3550
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3551
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3552
    //It was a parsed UA, do not assign the global value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3553
    if (!subUA) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3554
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3555
        if (typeof process === 'object') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3556
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3557
            if (process.versions && process.versions.node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3558
                //NodeJS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3559
                o.os = process.platform;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3560
                o.nodejs = numberify(process.versions.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3561
            }
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
        YUI.Env.UA = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3565
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3566
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3568
    return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3569
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3572
Y.UA = YUI.Env.UA || YUI.Env.parseUA();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3573
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3574
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3575
Performs a simple comparison between two version numbers, accounting for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3576
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
  3577
"535.24", even though a simple numerical comparison would indicate that it's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3578
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
  3579
considered equivalent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3581
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
  3582
1 if _a_ is higher than _b_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3584
Versions may be numbers or strings containing numbers and dots. For example,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3585
both `535` and `"535.8.10"` are acceptable. A version string containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3586
non-numeric characters, like `"535.8.beta"`, may produce unexpected results.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3588
@method compareVersions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3589
@param {Number|String} a First version number to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3590
@param {Number|String} b Second version number to compare.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3591
@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
  3592
    higher than _b_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3593
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3594
Y.UA.compareVersions = function (a, b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3595
    var aPart, aParts, bPart, bParts, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3596
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3597
    if (a === b) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3598
        return 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3599
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3601
    aParts = (a + '').split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3602
    bParts = (b + '').split('.');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3604
    for (i = 0, len = Math.max(aParts.length, bParts.length); i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3605
        aPart = parseInt(aParts[i], 10);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3606
        bPart = parseInt(bParts[i], 10);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3607
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3608
        /*jshint expr: true*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3609
        isNaN(aPart) && (aPart = 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3610
        isNaN(bPart) && (bPart = 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3611
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3612
        if (aPart < bPart) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3613
            return -1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3614
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3615
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3616
        if (aPart > bPart) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3617
            return 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3618
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3619
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3621
    return 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3622
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3623
YUI.Env.aliases = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3624
    "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
  3625
    "anim-shape-transform": ["anim-shape"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3626
    "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
  3627
    "attribute": ["attribute-base","attribute-complex"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3628
    "attribute-events": ["attribute-observable"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3629
    "autocomplete": ["autocomplete-base","autocomplete-sources","autocomplete-list","autocomplete-plugin"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3630
    "axes": ["axis-numeric","axis-category","axis-time","axis-stacked"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3631
    "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
  3632
    "base": ["base-base","base-pluginhost","base-build"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3633
    "cache": ["cache-base","cache-offline","cache-plugin"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3634
    "charts": ["charts-base"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3635
    "collection": ["array-extras","arraylist","arraylist-add","arraylist-filter","array-invoke"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3636
    "color": ["color-base","color-hsl","color-harmony"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3637
    "controller": ["router"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3638
    "dataschema": ["dataschema-base","dataschema-json","dataschema-xml","dataschema-array","dataschema-text"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3639
    "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
  3640
    "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
  3641
    "datatype": ["datatype-date","datatype-number","datatype-xml"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3642
    "datatype-date": ["datatype-date-parse","datatype-date-format","datatype-date-math"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3643
    "datatype-number": ["datatype-number-parse","datatype-number-format"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3644
    "datatype-xml": ["datatype-xml-parse","datatype-xml-format"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3645
    "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
  3646
    "dom": ["dom-base","dom-screen","dom-style","selector-native","selector"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3647
    "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
  3648
    "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
  3649
    "event-custom": ["event-custom-base","event-custom-complex"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3650
    "event-gestures": ["event-flick","event-move"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3651
    "handlebars": ["handlebars-compiler"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3652
    "highlight": ["highlight-base","highlight-accentfold"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3653
    "history": ["history-base","history-hash","history-hash-ie","history-html5"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3654
    "io": ["io-base","io-xdr","io-form","io-upload-iframe","io-queue"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3655
    "json": ["json-parse","json-stringify"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3656
    "loader": ["loader-base","loader-rollup","loader-yui3"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3657
    "node": ["node-base","node-event-delegate","node-pluginhost","node-screen","node-style"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3658
    "pluginhost": ["pluginhost-base","pluginhost-config"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3659
    "querystring": ["querystring-parse","querystring-stringify"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3660
    "recordset": ["recordset-base","recordset-sort","recordset-filter","recordset-indexer"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3661
    "resize": ["resize-base","resize-proxy","resize-constrain"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3662
    "slider": ["slider-base","slider-value-range","clickable-rail","range-slider"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3663
    "template": ["template-base","template-micro"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3664
    "text": ["text-accentfold","text-wordbreak"],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3665
    "widget": ["widget-base","widget-htmlparser","widget-skin","widget-uievents"]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3666
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3669
}, '3.10.3', {"use": ["get", "features", "intl-base", "yui-log", "yui-later"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3670
YUI.add('get', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3672
/*jslint boss:true, expr:true, laxbreak: true */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3674
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3675
Provides dynamic loading of remote JavaScript and CSS resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3676
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3677
@module get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3678
@class Get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3679
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3680
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3682
var Lang = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3683
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3684
    CUSTOM_ATTRS, // defined lazily in Y.Get.Transaction._createNode()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3686
    Get, Transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3687
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3688
Y.Get = Get = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3689
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3691
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3692
    Default options for CSS requests. Options specified here will override
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3693
    global defaults for CSS requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3695
    See the `options` property for all available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3697
    @property cssOptions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3698
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3699
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3700
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3701
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3702
    cssOptions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3703
        attributes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3704
            rel: 'stylesheet'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3705
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3707
        doc         : Y.config.linkDoc || Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3708
        pollInterval: 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3709
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3711
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3712
    Default options for JS requests. Options specified here will override global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3713
    defaults for JS requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3715
    See the `options` property for all available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3717
    @property jsOptions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3718
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3719
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3720
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3721
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3722
    jsOptions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3723
        autopurge: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3724
        doc      : Y.config.scriptDoc || Y.config.doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3725
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3726
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3727
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3728
    Default options to use for all requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3730
    Note that while all available options are documented here for ease of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3731
    discovery, some options (like callback functions) only make sense at the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3732
    transaction level.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3733
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3734
    Callback functions specified via the options object or the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3735
    parameter of the `css()`, `js()`, or `load()` methods will receive the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3736
    transaction object as a parameter. See `Y.Get.Transaction` for details on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3737
    the properties and methods available on transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3738
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3739
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3740
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3741
    @property {Object} options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3742
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3743
    @property {Boolean} [options.async=false] Whether or not to load scripts
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3744
        asynchronously, meaning they're requested in parallel and execution
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3745
        order is not guaranteed. Has no effect on CSS, since CSS is always
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3746
        loaded asynchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3748
    @property {Object} [options.attributes] HTML attribute name/value pairs that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3749
        should be added to inserted nodes. By default, the `charset` attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3750
        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
  3751
        attribute, but you can override these with your own values if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3752
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3753
    @property {Boolean} [options.autopurge] Whether or not to automatically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3754
        purge inserted nodes after the purge threshold is reached. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3755
        `true` by default for JavaScript, but `false` for CSS since purging a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3756
        CSS node will also remove any styling applied by the referenced file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3757
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3758
    @property {Object} [options.context] `this` object to use when calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3759
        callback functions. Defaults to the transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3761
    @property {Mixed} [options.data] Arbitrary data object to pass to "on*"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3762
        callbacks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3764
    @property {Document} [options.doc] Document into which nodes should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3765
        inserted. By default, the current document is used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3766
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3767
    @property {HTMLElement|String} [options.insertBefore] HTML element or id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3768
        string of an element before which all generated nodes should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3769
        inserted. If not specified, Get will automatically determine the best
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3770
        place to insert nodes for maximum compatibility.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3772
    @property {Function} [options.onEnd] Callback to execute after a transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3773
        is complete, regardless of whether it succeeded or failed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3775
    @property {Function} [options.onFailure] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3776
        transaction fails, times out, or is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3777
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3778
    @property {Function} [options.onProgress] Callback to execute after each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3779
        individual request in a transaction either succeeds or fails.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3781
    @property {Function} [options.onSuccess] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3782
        transaction completes successfully with no errors. Note that in browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3783
        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
  3784
        request may still be reported as a success because in these browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3785
        it can be difficult or impossible to distinguish between success and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3786
        failure for CSS resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3787
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3788
    @property {Function} [options.onTimeout] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3789
        transaction times out.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3791
    @property {Number} [options.pollInterval=50] Polling interval (in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3792
        milliseconds) for detecting CSS load completion in browsers that don't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3793
        support the `load` event on `<link>` nodes. This isn't used for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3794
        JavaScript.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3796
    @property {Number} [options.purgethreshold=20] Number of nodes to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3797
        before triggering an automatic purge when `autopurge` is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3799
    @property {Number} [options.timeout] Number of milliseconds to wait before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3800
        aborting a transaction. When a timeout occurs, the `onTimeout` callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3801
        is called, followed by `onFailure` and finally `onEnd`. By default,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3802
        there is no timeout.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3803
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3804
    @property {String} [options.type] Resource type ("css" or "js"). This option
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3805
        is set automatically by the `css()` and `js()` functions and will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3806
        ignored there, but may be useful when using the `load()` function. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3807
        not specified, the type will be inferred from the URL, defaulting to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3808
        "js" if the URL doesn't contain a recognizable file extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3809
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3810
    options: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3811
        attributes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3812
            charset: 'utf-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3813
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3814
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3815
        purgethreshold: 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3816
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3817
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3818
    // -- Protected Properties -------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3819
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3820
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3821
    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
  3822
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3823
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3824
    @property REGEX_CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3825
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3826
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3827
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3828
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3829
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3830
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3831
    REGEX_CSS: /\.css(?:[?;].*)?$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3833
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3834
    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
  3835
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3836
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3837
    @property REGEX_JS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3838
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3839
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3840
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3841
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3842
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3843
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3844
    REGEX_JS : /\.js(?:[?;].*)?$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3846
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3847
    Contains information about the current environment, such as what script and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3848
    link injection features it supports.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3849
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3850
    This object is created and populated the first time the `_getEnv()` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3851
    is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3852
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3853
    @property _env
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3854
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3855
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3856
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3857
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3858
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3860
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3861
    Mapping of document _yuid strings to <head> or <base> node references so we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3862
    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
  3863
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3864
    @property _insertCache
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3865
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3866
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3867
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3868
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3869
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3870
    _insertCache: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3872
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3873
    Information about the currently pending transaction, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3874
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3875
    This is actually an object with two properties: `callback`, containing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3876
    optional callback passed to `css()`, `load()`, or `js()`; and `transaction`,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3877
    containing the actual transaction instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3878
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3879
    @property _pending
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3880
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3881
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3882
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3883
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3884
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3885
    _pending: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3887
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3888
    HTML nodes eligible to be purged next time autopurge is triggered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3890
    @property _purgeNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3891
    @type HTMLElement[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3892
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3893
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3894
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3895
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3896
    _purgeNodes: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3897
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3898
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3899
    Queued transactions and associated callbacks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3901
    @property _queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3902
    @type Object[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3903
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3904
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3905
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3906
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3907
    _queue: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3909
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3910
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3911
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3912
    Aborts the specified transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3913
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3914
    This will cause the transaction's `onFailure` callback to be called and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3915
    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
  3916
    but any resources that have already been requested will continue loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3917
    (there's no safe way to prevent this, unfortunately).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3918
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3919
    *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
  3920
    future version of YUI. Use the transaction-level `abort()` method instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3921
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3922
    @method abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3923
    @param {Get.Transaction} transaction Transaction to abort.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3924
    @deprecated Use the `abort()` method on the transaction instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3925
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3926
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3927
    abort: function (transaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3928
        var i, id, item, len, pending;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3929
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3930
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3931
        if (!transaction.abort) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3932
            id          = transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3933
            pending     = this._pending;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3934
            transaction = null;
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 (pending && pending.transaction.id === id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3937
                transaction   = pending.transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3938
                this._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3939
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3940
                for (i = 0, len = this._queue.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3941
                    item = this._queue[i].transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3943
                    if (item.id === id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3944
                        transaction = item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3945
                        this._queue.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3946
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3947
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3948
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3949
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3950
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3952
        transaction && transaction.abort();
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3956
    Loads one or more CSS files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3958
    The _urls_ parameter may be provided as a URL string, a request object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3959
    or an array of URL strings and/or request objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3961
    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
  3962
    or more options that should apply specifically to that request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3963
    Request-specific options take priority over transaction-level options and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3964
    default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3965
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3966
    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
  3967
    as the current page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3968
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3969
    The `options` parameter may be omitted completely and a callback passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3970
    its place, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3971
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3972
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3973
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3974
        // Load a single CSS file and log a message on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3975
        Y.Get.css('foo.css', function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3976
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3977
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3978
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3979
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3980
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3981
        // Load multiple CSS files and log a message when all have finished
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3982
        // loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3983
        var urls = ['foo.css', 'http://example.com/bar.css', 'baz/quux.css'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3984
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3985
        Y.Get.css(urls, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3986
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3987
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3988
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3989
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3991
        // Specify transaction-level options, which will apply to all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3992
        // within the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3993
        Y.Get.css(urls, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3994
            attributes: {'class': 'my-css'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3995
            timeout   : 5000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3996
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3998
        // Specify per-request options, which override transaction-level and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  3999
        // default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4000
        Y.Get.css([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4001
            {url: 'foo.css', attributes: {id: 'foo'}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4002
            {url: 'bar.css', attributes: {id: 'bar', charset: 'iso-8859-1'}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4003
        ]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4004
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4005
    @method css
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4006
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4007
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4008
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4009
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4010
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4011
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4012
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4013
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4014
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4015
        @param {Array|null} callback.err Array of errors that occurred during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4016
            the transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4017
        @param {Get.Transaction} callback.transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4019
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4020
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4021
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4022
    css: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4023
        return this._load('css', urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4024
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4025
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4026
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4027
    Loads one or more JavaScript resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4029
    The _urls_ parameter may be provided as a URL string, a request object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4030
    or an array of URL strings and/or request objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4032
    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
  4033
    or more options that should apply specifically to that request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4034
    Request-specific options take priority over transaction-level options and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4035
    default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4036
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4037
    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
  4038
    as the current page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4039
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4040
    The `options` parameter may be omitted completely and a callback passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4041
    its place, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4043
    Scripts will be executed in the order they're specified unless the `async`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4044
    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
  4045
    in whatever order they finish loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4046
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4047
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4048
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4049
        // Load a single JS file and log a message on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4050
        Y.Get.js('foo.js', function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4051
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4052
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4053
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4054
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4055
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4056
        // Load multiple JS files, execute them in order, and log a message when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4057
        // all have finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4058
        var urls = ['foo.js', 'http://example.com/bar.js', 'baz/quux.js'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4059
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4060
        Y.Get.js(urls, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4061
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4062
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4063
            }
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
        // Specify transaction-level options, which will apply to all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4067
        // within the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4068
        Y.Get.js(urls, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4069
            attributes: {'class': 'my-js'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4070
            timeout   : 5000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4071
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4072
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4073
        // Specify per-request options, which override transaction-level and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4074
        // default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4075
        Y.Get.js([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4076
            {url: 'foo.js', attributes: {id: 'foo'}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4077
            {url: 'bar.js', attributes: {id: 'bar', charset: 'iso-8859-1'}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4078
        ]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4079
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4080
    @method js
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4081
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4082
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4083
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4084
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4085
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4086
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4087
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4088
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4089
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4090
        @param {Array|null} callback.err Array of errors that occurred during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4091
            the transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4092
        @param {Get.Transaction} callback.transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4094
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4095
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4096
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4097
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4098
    js: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4099
        return this._load('js', urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4100
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4102
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4103
    Loads one or more CSS and/or JavaScript resources in the same transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4105
    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
  4106
    transaction and be notified when all requested URLs have finished loading,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4107
    regardless of type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4109
    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
  4110
    a resource type isn't specified in per-request options or transaction-level
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4111
    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
  4112
    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
  4113
    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
  4114
    URL is a JavaScript resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4116
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4118
        // 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
  4119
        // when all files have finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4120
        Y.Get.load(['foo.css', 'bar.js', 'baz.css'], function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4121
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4122
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4123
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4124
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4126
    @method load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4127
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4128
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4129
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4130
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4131
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4132
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4133
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4134
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4136
        @param {Array|null} err Array of errors that occurred during the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4137
            transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4138
        @param {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4139
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4140
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4141
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4142
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4143
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4144
    load: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4145
        return this._load(null, urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4146
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4148
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4150
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4151
    Triggers an automatic purge if the purge threshold has been reached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4153
    @method _autoPurge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4154
    @param {Number} threshold Purge threshold to use, in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4155
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4156
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4157
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4158
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4159
    _autoPurge: function (threshold) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4160
        if (threshold && this._purgeNodes.length >= threshold) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4161
            this._purge(this._purgeNodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4162
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4163
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4165
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4166
    Populates the `_env` property with information about the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4167
    environment.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4169
    @method _getEnv
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4170
    @return {Object} Environment information.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4171
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4172
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4173
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4174
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4175
    _getEnv: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4176
        var doc = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4177
            ua  = Y.UA;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4179
        // Note: some of these checks require browser sniffs since it's not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4180
        // feasible to load test files on every pageview just to perform a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4181
        // feature test. I'm sorry if this makes you sad.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4182
        return (this._env = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4184
            // True if this is a browser that supports disabling async mode on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4185
            // dynamically created script nodes. See
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4186
            // https://developer.mozilla.org/En/HTML/Element/Script#Attributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4188
            // 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
  4189
            // 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
  4190
            async: (doc && doc.createElement('script').async === true) || (ua.ie >= 10),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4192
            // True if this browser fires an event when a dynamically injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4193
            // link node fails to load. This is currently true for Firefox 9+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4194
            // and WebKit 535.24+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4195
            cssFail: ua.gecko >= 9 || ua.compareVersions(ua.webkit, 535.24) >= 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4197
            // True if this browser fires an event when a dynamically injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4198
            // link node finishes loading. This is currently true for IE, Opera,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4199
            // Firefox 9+, and WebKit 535.24+. Note that IE versions <9 fire the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4200
            // DOM 0 "onload" event, but not "load". All versions of IE fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4201
            // "onload".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4202
            // davglass: Seems that Chrome on Android needs this to be false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4203
            cssLoad: (
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4204
                    (!ua.gecko && !ua.webkit) || ua.gecko >= 9 ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4205
                    ua.compareVersions(ua.webkit, 535.24) >= 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4206
                ) && !(ua.chrome && ua.chrome <= 18),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4208
            // True if this browser preserves script execution order while
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4209
            // loading scripts in parallel as long as the script node's `async`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4210
            // attribute is set to false to explicitly disable async execution.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4211
            preservesScriptOrder: !!(ua.gecko || ua.opera || (ua.ie && ua.ie >= 10))
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4212
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4213
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4215
    _getTransaction: function (urls, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4216
        var requests = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4217
            i, len, req, url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4219
        if (!Lang.isArray(urls)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4220
            urls = [urls];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4221
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4223
        options = Y.merge(this.options, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4225
        // 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
  4226
        options.attributes = Y.merge(this.options.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4227
                options.attributes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4229
        for (i = 0, len = urls.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4230
            url = urls[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4231
            req = {attributes: {}};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4232
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4233
            // 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
  4234
            // global options and request-specific options. If it's an object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4235
            // with a "url" property, we assume it's a request object containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4236
            // URL-specific options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4237
            if (typeof url === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4238
                req.url = url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4239
            } else if (url.url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4240
                // URL-specific options override both global defaults and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4241
                // request-specific options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4242
                Y.mix(req, url, false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4243
                url = url.url; // Make url a string so we can use it later.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4244
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4245
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4246
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4248
            Y.mix(req, options, false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4250
            // 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
  4251
            // request options or the URL-specific options, try to determine
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4252
            // one from the file extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4253
            if (!req.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4254
                if (this.REGEX_CSS.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4255
                    req.type = 'css';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4256
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4257
                    if (!this.REGEX_JS.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4258
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4260
                    req.type = 'js';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4261
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4262
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4264
            // Mix in type-specific default options, but don't overwrite any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4265
            // options that have already been set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4266
            Y.mix(req, req.type === 'js' ? this.jsOptions : this.cssOptions,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4267
                false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4269
            // Give the node an id attribute if it doesn't already have one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4270
            req.attributes.id || (req.attributes.id = Y.guid());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4271
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4272
            // Backcompat for <3.5.0 behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4273
            if (req.win) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4274
                req.doc = req.win.document;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4275
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4276
                req.win = req.doc.defaultView || req.doc.parentWindow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4277
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4279
            if (req.charset) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4280
                req.attributes.charset = req.charset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4281
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4282
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4283
            requests.push(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4284
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4286
        return new Transaction(requests, options);
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
    _load: function (type, urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4290
        var transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4292
        // Allow callback as third param.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4293
        if (typeof options === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4294
            callback = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4295
            options  = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4296
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4298
        options || (options = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4299
        options.type = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4300
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4301
        options._onFinish = Get._onTransactionFinish;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4302
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4303
        if (!this._env) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4304
            this._getEnv();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4305
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4307
        transaction = this._getTransaction(urls, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4309
        this._queue.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4310
            callback   : callback,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4311
            transaction: transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4312
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4314
        this._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4316
        return transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4317
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4319
    _onTransactionFinish : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4320
        Get._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4321
        Get._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4322
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4324
    _next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4325
        var item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4327
        if (this._pending) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4328
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4329
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4331
        item = this._queue.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4333
        if (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4334
            this._pending = item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4335
            item.transaction.execute(item.callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4336
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4337
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4339
    _purge: function (nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4340
        var purgeNodes    = this._purgeNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4341
            isTransaction = nodes !== purgeNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4342
            index, node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4344
        while (node = nodes.pop()) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4345
            // Don't purge nodes that haven't finished loading (or errored out),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4346
            // since this can hang the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4347
            if (!node._yuiget_finished) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4348
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4349
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4350
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4351
            node.parentNode && node.parentNode.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4353
            // If this is a transaction-level purge and this node also exists in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4354
            // the Get-level _purgeNodes array, we need to remove it from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4355
            // _purgeNodes to avoid creating a memory leak. The indexOf lookup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4356
            // sucks, but until we get WeakMaps, this is the least troublesome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4357
            // 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
  4358
            // not be in the same document).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4359
            if (isTransaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4360
                index = Y.Array.indexOf(purgeNodes, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4361
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4362
                if (index > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4363
                    purgeNodes.splice(index, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4364
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4365
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4366
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4367
    }
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
Alias for `js()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4373
@method script
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4374
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4375
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4376
Get.script = Get.js;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4378
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4379
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
  4380
CSS files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4381
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4382
This class should not be instantiated manually. Instances will be created and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4383
returned as needed by Y.Get's `css()`, `js()`, and `load()` methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4384
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4385
@class Get.Transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4386
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4387
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4388
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4389
Get.Transaction = Transaction = function (requests, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4390
    var self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4392
    self.id       = Transaction._lastId += 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4393
    self.data     = options.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4394
    self.errors   = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4395
    self.nodes    = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4396
    self.options  = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4397
    self.requests = requests;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4399
    self._callbacks = []; // callbacks to call after execution finishes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4400
    self._queue     = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4401
    self._reqsWaiting   = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4403
    // Deprecated pre-3.5.0 properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4404
    self.tId = self.id; // Use `id` instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4405
    self.win = options.win || Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4406
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4407
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4408
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4409
Arbitrary data object associated with this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4410
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4411
This object comes from the options passed to `Get.css()`, `Get.js()`, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4412
`Get.load()`, and will be `undefined` if no data object was specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4414
@property {Object} data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4415
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4417
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4418
Array of errors that have occurred during this transaction, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4419
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4420
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4421
@property {Object[]} errors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4422
@property {String} errors.error Error message.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4423
@property {Object} errors.request Request object related to the error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4424
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4426
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4427
Numeric id for this transaction, unique among all transactions within the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4428
YUI sandbox in the current pageview.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4430
@property {Number} id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4431
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4432
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4434
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4435
HTMLElement nodes (native ones, not YUI Node instances) that have been inserted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4436
during the current transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4438
@property {HTMLElement[]} nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4439
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4441
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4442
Options associated with this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4444
See `Get.options` for the full list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4446
@property {Object} options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4447
@since 3.5.0
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
Request objects contained in this transaction. Each request object represents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4452
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
  4453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4454
@property {Object} requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4455
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4456
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4457
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4458
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4459
Id of the most recent transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4461
@property _lastId
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4462
@type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4463
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4464
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4465
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4466
Transaction._lastId = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4468
Transaction.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4469
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4471
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4472
    Current state of this transaction. One of "new", "executing", or "done".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4474
    @property _state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4475
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4476
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4477
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4478
    _state: 'new', // "new", "executing", or "done"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4479
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4480
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4481
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4482
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4483
    Aborts this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4485
    This will cause the transaction's `onFailure` callback to be called and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4486
    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
  4487
    but any resources that have already been requested will continue loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4488
    (there's no safe way to prevent this, unfortunately).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4490
    @method abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4491
    @param {String} [msg="Aborted."] Optional message to use in the `errors`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4492
        array describing why the transaction was aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4493
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4494
    abort: function (msg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4495
        this._pending    = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4496
        this._pendingCSS = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4497
        this._pollTimer  = clearTimeout(this._pollTimer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4498
        this._queue      = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4499
        this._reqsWaiting    = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4501
        this.errors.push({error: msg || 'Aborted'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4502
        this._finish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4503
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4504
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4505
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4506
    Begins execting the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4508
    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
  4509
    automatically when other pending transactions have finished. If you really
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4510
    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
  4511
    this transaction's scripts may end up executing before the scripts in other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4512
    pending transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4513
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4514
    If the transaction is already executing, the specified callback (if any)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4515
    will be queued and called after execution finishes. If the transaction has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4516
    already finished, the callback will be called immediately (the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4517
    will not be executed again).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4519
    @method execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4520
    @param {Function} callback Callback function to execute after all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4521
        in the transaction are complete, or after the transaction is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4522
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4523
    execute: function (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4524
        var self     = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4525
            requests = self.requests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4526
            state    = self._state,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4527
            i, len, queue, req;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4529
        if (state === 'done') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4530
            callback && callback(self.errors.length ? self.errors : null, self);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4531
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4532
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4533
            callback && self._callbacks.push(callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4535
            if (state === 'executing') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4536
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4537
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4538
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4540
        self._state = 'executing';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4541
        self._queue = queue = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4542
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4543
        if (self.options.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4544
            self._timeout = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4545
                self.abort('Timeout');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4546
            }, self.options.timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4547
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4548
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4549
        self._reqsWaiting = requests.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4551
        for (i = 0, len = requests.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4552
            req = requests[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4553
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4554
            if (req.async || req.type === 'css') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4555
                // No need to queue CSS or fully async JS.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4556
                self._insert(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4557
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4558
                queue.push(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4559
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4560
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4562
        self._next();
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
    Manually purges any `<script>` or `<link>` nodes this transaction has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4567
    created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4569
    Be careful when purging a transaction that contains CSS requests, since
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4570
    removing `<link>` nodes will also remove any styles they applied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4572
    @method purge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4573
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4574
    purge: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4575
        Get._purge(this.nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4576
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4578
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4579
    _createNode: function (name, attrs, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4580
        var node = doc.createElement(name),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4581
            attr, testEl;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4582
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4583
        if (!CUSTOM_ATTRS) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4584
            // IE6 and IE7 expect property names rather than attribute names for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4585
            // certain attributes. Rather than sniffing, we do a quick feature
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4586
            // test the first time _createNode() runs to determine whether we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4587
            // need to provide a workaround.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4588
            testEl = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4589
            testEl.setAttribute('class', 'a');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4590
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4591
            CUSTOM_ATTRS = testEl.className === 'a' ? {} : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4592
                'for'  : 'htmlFor',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4593
                'class': 'className'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4594
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4595
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4596
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4597
        for (attr in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4598
            if (attrs.hasOwnProperty(attr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4599
                node.setAttribute(CUSTOM_ATTRS[attr] || attr, attrs[attr]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4600
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4601
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4602
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4603
        return node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4604
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4605
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4606
    _finish: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4607
        var errors  = this.errors.length ? this.errors : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4608
            options = this.options,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4609
            thisObj = options.context || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4610
            data, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4611
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4612
        if (this._state === 'done') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4613
            return;
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
        this._state = 'done';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4617
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4618
        for (i = 0, len = this._callbacks.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4619
            this._callbacks[i].call(thisObj, errors, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4620
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4622
        data = this._getEventData();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4624
        if (errors) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4625
            if (options.onTimeout && errors[errors.length - 1].error === 'Timeout') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4626
                options.onTimeout.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4627
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4629
            if (options.onFailure) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4630
                options.onFailure.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4631
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4632
        } else if (options.onSuccess) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4633
            options.onSuccess.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4634
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4636
        if (options.onEnd) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4637
            options.onEnd.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4638
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4639
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4640
        if (options._onFinish) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4641
            options._onFinish();
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4645
    _getEventData: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4646
        if (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4647
            // This merge is necessary for backcompat. I hate it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4648
            return Y.merge(this, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4649
                abort  : this.abort, // have to copy these because the prototype isn't preserved
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4650
                purge  : this.purge,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4651
                request: req,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4652
                url    : req.url,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4653
                win    : req.win
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4654
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4655
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4656
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4657
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4658
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4660
    _getInsertBefore: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4661
        var doc = req.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4662
            el  = req.insertBefore,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4663
            cache, docStamp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4665
        if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4666
            return typeof el === 'string' ? doc.getElementById(el) : el;
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
        cache    = Get._insertCache;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4670
        docStamp = Y.stamp(doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4672
        if ((el = cache[docStamp])) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4673
            return el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4674
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4676
        // Inserting before a <base> tag apparently works around an IE bug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4677
        // (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
  4678
        // bug that is, exactly. Better safe than sorry?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4679
        if ((el = doc.getElementsByTagName('base')[0])) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4680
            return (cache[docStamp] = el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4681
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4683
        // Look for a <head> element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4684
        el = doc.head || doc.getElementsByTagName('head')[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4685
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4686
        if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4687
            // 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
  4688
            // point. Inserting before this node will ensure that all our CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4689
            // gets inserted in the correct order, to maintain style precedence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4690
            el.appendChild(doc.createTextNode(''));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4691
            return (cache[docStamp] = el.lastChild);
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
        // If all else fails, just insert before the first script node on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4695
        // page, which is virtually guaranteed to exist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4696
        return (cache[docStamp] = doc.getElementsByTagName('script')[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4697
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4699
    _insert: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4700
        var env          = Get._env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4701
            insertBefore = this._getInsertBefore(req),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4702
            isScript     = req.type === 'js',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4703
            node         = req.node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4704
            self         = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4705
            ua           = Y.UA,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4706
            cssTimeout, nodeType;
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 (!node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4709
            if (isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4710
                nodeType = 'script';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4711
            } else if (!env.cssLoad && ua.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4712
                nodeType = 'style';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4713
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4714
                nodeType = 'link';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4715
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4717
            node = req.node = this._createNode(nodeType, req.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4718
                req.doc);
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
        function onError() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4722
            self._progress('Failed to load ' + req.url, req);
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
        function onLoad() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4726
            if (cssTimeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4727
                clearTimeout(cssTimeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4728
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4730
            self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4731
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4732
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4733
        // Deal with script asynchronicity.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4734
        if (isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4735
            node.setAttribute('src', req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4737
            if (req.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4738
                // Explicitly indicate that we want the browser to execute this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4739
                // script asynchronously. This is necessary for older browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4740
                // like Firefox <4.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4741
                node.async = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4742
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4743
                if (env.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4744
                    // This browser treats injected scripts as async by default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4745
                    // (standard HTML5 behavior) but asynchronous loading isn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4746
                    // desired, so tell the browser not to mark this script as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4747
                    // async.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4748
                    node.async = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4749
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4751
                // If this browser doesn't preserve script execution order based
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4752
                // on insertion order, we'll need to avoid inserting other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4753
                // scripts until this one finishes loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4754
                if (!env.preservesScriptOrder) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4755
                    this._pending = req;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4756
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4757
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4758
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4759
            if (!env.cssLoad && ua.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4760
                // In Firefox <9, we can import the requested URL into a <style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4761
                // node and poll for the existence of node.sheet.cssRules. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4762
                // gives us a reliable way to determine CSS load completion that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4763
                // also works for cross-domain stylesheets.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4764
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4765
                // Props to Zach Leatherman for calling my attention to this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4766
                // technique.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4767
                node.innerHTML = (req.attributes.charset ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4768
                    '@charset "' + req.attributes.charset + '";' : '') +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4769
                    '@import "' + req.url + '";';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4770
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4771
                node.setAttribute('href', req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4772
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4773
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4775
        // Inject the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4776
        if (isScript && ua.ie && (ua.ie < 9 || (document.documentMode && document.documentMode < 9))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4777
            // 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
  4778
            node.onreadystatechange = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4779
                if (/loaded|complete/.test(node.readyState)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4780
                    node.onreadystatechange = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4781
                    onLoad();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4782
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4783
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4784
        } else if (!isScript && !env.cssLoad) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4785
            // CSS on Firefox <9 or WebKit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4786
            this._poll(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4787
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4788
            // Script or CSS on everything else. Using DOM 0 events because that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4789
            // evens the playing field with older IEs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4791
            if (ua.ie >= 10) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4793
                // We currently need to introduce a timeout for IE10, since it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4794
                // calls onerror/onload synchronously for 304s - messing up existing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4795
                // program flow.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4797
                // Remove this block if the following bug gets fixed by GA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4798
                /*jshint maxlen: 1500 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4799
                // 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
  4800
                node.onerror = function() { setTimeout(onError, 0); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4801
                node.onload  = function() { setTimeout(onLoad, 0); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4802
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4803
                node.onerror = onError;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4804
                node.onload  = onLoad;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4805
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4807
            // If this browser doesn't fire an event when CSS fails to load,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4808
            // fail after a timeout to avoid blocking the transaction queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4809
            if (!env.cssFail && !isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4810
                cssTimeout = setTimeout(onError, req.timeout || 3000);
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
        this.nodes.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4815
        insertBefore.parentNode.insertBefore(node, insertBefore);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4816
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4817
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4818
    _next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4819
        if (this._pending) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4820
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4821
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4822
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4823
        // If there are requests in the queue, insert the next queued request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4824
        // Otherwise, if we're waiting on already-inserted requests to finish,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4825
        // wait longer. If there are no queued requests and we're not waiting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4826
        // for anything to load, then we're done!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4827
        if (this._queue.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4828
            this._insert(this._queue.shift());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4829
        } else if (!this._reqsWaiting) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4830
            this._finish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4831
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4832
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4833
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4834
    _poll: function (newReq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4835
        var self       = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4836
            pendingCSS = self._pendingCSS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4837
            isWebKit   = Y.UA.webkit,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4838
            i, hasRules, j, nodeHref, req, sheets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4839
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4840
        if (newReq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4841
            pendingCSS || (pendingCSS = self._pendingCSS = []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4842
            pendingCSS.push(newReq);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4843
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4844
            if (self._pollTimer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4845
                // A poll timeout is already pending, so no need to create a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4846
                // new one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4847
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4848
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4849
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4851
        self._pollTimer = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4852
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4853
        // 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
  4854
        // will still be treated as a success. There's no good workaround for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4855
        // this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4857
        for (i = 0; i < pendingCSS.length; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4858
            req = pendingCSS[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4860
            if (isWebKit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4861
                // Look for a stylesheet matching the pending URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4862
                sheets   = req.doc.styleSheets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4863
                j        = sheets.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4864
                nodeHref = req.node.href;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4866
                while (--j >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4867
                    if (sheets[j].href === nodeHref) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4868
                        pendingCSS.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4869
                        i -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4870
                        self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4871
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4872
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4873
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4874
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4875
                // Many thanks to Zach Leatherman for calling my attention to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4876
                // the @import-based cross-domain technique used here, and to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4877
                // Oleg Slobodskoi for an earlier same-domain implementation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4878
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4879
                // See Zach's blog for more details:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4880
                // http://www.zachleat.com/web/2010/07/29/load-css-dynamically/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4881
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4882
                    // We don't really need to store this value since we never
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4883
                    // use it again, but if we don't store it, Closure Compiler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4884
                    // assumes the code is useless and removes it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4885
                    hasRules = !!req.node.sheet.cssRules;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4887
                    // If we get here, the stylesheet has loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4888
                    pendingCSS.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4889
                    i -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4890
                    self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4891
                } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4892
                    // An exception means the stylesheet is still loading.
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
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4897
        if (pendingCSS.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4898
            self._pollTimer = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4899
                self._poll.call(self);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4900
            }, self.options.pollInterval);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4901
        }
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
    _progress: function (err, req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4905
        var options = this.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4907
        if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4908
            req.error = err;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4910
            this.errors.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4911
                error  : err,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4912
                request: req
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4913
            });
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
        req.node._yuiget_finished = req.finished = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4918
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4919
        if (options.onProgress) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4920
            options.onProgress.call(options.context || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4921
                this._getEventData(req));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4922
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4924
        if (req.autopurge) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4925
            // Pre-3.5.0 Get always excludes the most recent node from an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4926
            // autopurge. I find this odd, but I'm keeping that behavior for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4927
            // the sake of backcompat.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4928
            Get._autoPurge(this.options.purgethreshold);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4929
            Get._purgeNodes.push(req.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4930
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4931
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4932
        if (this._pending === req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4933
            this._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4934
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4935
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4936
        this._reqsWaiting -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4937
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4938
        this._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4939
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4940
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4942
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4943
}, '3.10.3', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4944
YUI.add('features', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4946
var feature_tests = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4947
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4948
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4949
Contains the core of YUI's feature test architecture.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4950
@module features
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4951
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4952
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4953
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4954
* Feature detection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4955
* @class Features
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4956
* @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4957
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4958
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4959
Y.mix(Y.namespace('Features'), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4961
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4962
    * Object hash of all registered feature tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4963
    * @property tests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4964
    * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4965
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4966
    tests: feature_tests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4967
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4968
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4969
    * Add a test to the system
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4970
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4971
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4972
    *   Y.Features.add("load", "1", {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4973
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4974
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4975
    * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4976
    * @param {String} cat The category, right now only 'load' is supported
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4977
    * @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
  4978
    * @param {Object} o Object containing test properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4979
    * @param {String} o.name The name of the test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4980
    * @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
  4981
    * @param {String} o.trigger The module that triggers this test.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4982
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4983
    add: function(cat, name, o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4984
        feature_tests[cat] = feature_tests[cat] || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4985
        feature_tests[cat][name] = o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4986
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4987
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4988
    * Execute all tests of a given category and return the serialized results
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
    *   caps=1:1;2:1;3:0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4992
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4993
    * @method all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4994
    * @param {String} cat The category to execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4995
    * @param {Array} args The arguments to pass to the test function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4996
    * @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
  4997
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4998
    all: function(cat, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  4999
        var cat_o = feature_tests[cat],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5000
            // results = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5001
            result = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5002
        if (cat_o) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5003
            Y.Object.each(cat_o, function(v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5004
                result.push(k + ':' + (Y.Features.test(cat, k, args) ? 1 : 0));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5005
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5006
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5007
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5008
        return (result.length) ? result.join(';') : '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5009
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5010
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5011
    * Run a sepecific test and return a Boolean response.
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
    *   Y.Features.test("load", "1");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5015
    *   ```
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5016
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5017
    * @method test
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5018
    * @param {String} cat The category of the test to run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5019
    * @param {String} name The name of the test to run
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5020
    * @param {Array} args The arguments to pass to the test function
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5021
    * @return {Boolean} True or false if the test passed/failed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5022
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5023
    test: function(cat, name, args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5024
        args = args || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5025
        var result, ua, test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5026
            cat_o = feature_tests[cat],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5027
            feature = cat_o && cat_o[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5028
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5029
        if (!feature) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5030
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5032
            result = feature.result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5033
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5034
            if (Y.Lang.isUndefined(result)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5035
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5036
                ua = feature.ua;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5037
                if (ua) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5038
                    result = (Y.UA[ua]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5039
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5040
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5041
                test = feature.test;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5042
                if (test && ((!ua) || result)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5043
                    result = test.apply(Y, args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5044
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5045
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5046
                feature.result = result;
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5050
        return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5051
    }
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
// Y.Features.add("load", "1", {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5055
// Y.Features.test("load", "1");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5056
// caps=1:1;2:0;3:1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5057
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5058
/* This file is auto-generated by (yogi loader --yes --mix --start ../) */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5059
/*jshint maxlen:900, eqeqeq: false */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5060
var add = Y.Features.add;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5061
// app-transitions-native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5062
add('load', '0', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5063
    "name": "app-transitions-native",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5064
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5065
    var doc  = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5066
        node = doc ? doc.documentElement : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5067
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5068
    if (node && node.style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5069
        return ('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
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
    return false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5073
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5074
    "trigger": "app-transitions"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5075
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5076
// autocomplete-list-keys
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5077
add('load', '1', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5078
    "name": "autocomplete-list-keys",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5079
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5080
    // Only add keyboard support to autocomplete-list if this doesn't appear to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5081
    // be an iOS or Android-based mobile device.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5082
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5083
    // There's currently no feasible way to actually detect whether a device has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5084
    // 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
  5085
    // overridden by manually loading the autocomplete-list-keys module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5086
    //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5087
    // Worth noting: even though iOS supports bluetooth keyboards, Mobile Safari
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5088
    // doesn't fire the keyboard events used by AutoCompleteList, so there's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5089
    // no point loading the -keys module even when a bluetooth keyboard may be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5090
    // available.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5091
    return !(Y.UA.ios || Y.UA.android);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5092
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5093
    "trigger": "autocomplete-list"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5094
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5095
// dd-gestures
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5096
add('load', '2', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5097
    "name": "dd-gestures",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5098
    "trigger": "dd-drag",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5099
    "ua": "touchEnabled"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5100
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5101
// dom-style-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5102
add('load', '3', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5103
    "name": "dom-style-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5104
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5106
    var testFeature = Y.Features.test,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5107
        addFeature = Y.Features.add,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5108
        WINDOW = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5109
        DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5110
        DOCUMENT_ELEMENT = 'documentElement',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5111
        ret = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5113
    addFeature('style', 'computedStyle', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5114
        test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5115
            return WINDOW && 'getComputedStyle' in WINDOW;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5116
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5117
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5119
    addFeature('style', 'opacity', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5120
        test: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5121
            return DOCUMENT && 'opacity' in DOCUMENT[DOCUMENT_ELEMENT].style;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5122
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5123
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5125
    ret =  (!testFeature('style', 'opacity') &&
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5126
            !testFeature('style', 'computedStyle'));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5128
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5129
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5130
    "trigger": "dom-style"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5131
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5132
// editor-para-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5133
add('load', '4', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5134
    "name": "editor-para-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5135
    "trigger": "editor-para",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5136
    "ua": "ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5137
    "when": "instead"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5138
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5139
// event-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5140
add('load', '5', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5141
    "name": "event-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5142
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5143
    var imp = Y.config.doc && Y.config.doc.implementation;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5144
    return (imp && (!imp.hasFeature('Events', '2.0')));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5145
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5146
    "trigger": "node-base"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5147
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5148
// graphics-canvas
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5149
add('load', '6', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5150
    "name": "graphics-canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5151
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5152
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5153
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5154
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5155
        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
  5156
    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5157
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5158
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5159
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5160
// graphics-canvas-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5161
add('load', '7', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5162
    "name": "graphics-canvas-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5163
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5164
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5165
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5166
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5167
        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
  5168
    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5169
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5170
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5171
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5172
// graphics-svg
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5173
add('load', '8', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5174
    "name": "graphics-svg",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5175
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5176
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5177
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5178
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5179
        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
  5180
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5181
    return svg && (useSVG || !canvas);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5182
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5183
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5184
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5185
// graphics-svg-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5186
add('load', '9', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5187
    "name": "graphics-svg-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5188
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5189
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5190
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5191
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5192
        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
  5193
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5194
    return svg && (useSVG || !canvas);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5195
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5196
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5197
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5198
// graphics-vml
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5199
add('load', '10', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5200
    "name": "graphics-vml",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5201
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5202
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5203
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5204
    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
  5205
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5206
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5207
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5208
// graphics-vml-default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5209
add('load', '11', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5210
    "name": "graphics-vml-default",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5211
    "test": function(Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5212
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5213
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5214
    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
  5215
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5216
    "trigger": "graphics"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5217
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5218
// history-hash-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5219
add('load', '12', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5220
    "name": "history-hash-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5221
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5222
    var docMode = Y.config.doc && Y.config.doc.documentMode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5224
    return Y.UA.ie && (!('onhashchange' in Y.config.win) ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5225
            !docMode || docMode < 8);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5226
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5227
    "trigger": "history-hash"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5228
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5229
// io-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5230
add('load', '13', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5231
    "name": "io-nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5232
    "trigger": "io-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5233
    "ua": "nodejs"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5234
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5235
// json-parse-shim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5236
add('load', '14', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5237
    "name": "json-parse-shim",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5238
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5239
    var _JSON = Y.config.global.JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5240
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5241
        nativeSupport = Y.config.useNativeJSONParse !== false && !!Native;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5243
    function workingNative( k, v ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5244
        return k === "ok" ? true : v;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5245
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5246
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5247
    // Double check basic functionality.  This is mainly to catch early broken
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5248
    // implementations of the JSON API in Firefox 3.1 beta1 and beta2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5249
    if ( nativeSupport ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5250
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5251
            nativeSupport = ( Native.parse( '{"ok":false}', workingNative ) ).ok;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5252
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5253
        catch ( e ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5254
            nativeSupport = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5255
        }
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
    return !nativeSupport;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5259
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5260
    "trigger": "json-parse"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5261
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5262
// json-stringify-shim
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5263
add('load', '15', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5264
    "name": "json-stringify-shim",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5265
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5266
    var _JSON = Y.config.global.JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5267
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5268
        nativeSupport = Y.config.useNativeJSONStringify !== false && !!Native;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5270
    // Double check basic native functionality.  This is primarily to catch broken
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5271
    // early JSON API implementations in Firefox 3.1 beta1 and beta2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5272
    if ( nativeSupport ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5273
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5274
            nativeSupport = ( '0' === Native.stringify(0) );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5275
        } catch ( e ) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5276
            nativeSupport = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5277
        }
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5281
    return !nativeSupport;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5282
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5283
    "trigger": "json-stringify"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5284
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5285
// scrollview-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5286
add('load', '16', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5287
    "name": "scrollview-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5288
    "trigger": "scrollview-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5289
    "ua": "ie"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5290
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5291
// selector-css2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5292
add('load', '17', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5293
    "name": "selector-css2",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5294
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5295
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5296
        ret = DOCUMENT && !('querySelectorAll' in DOCUMENT);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5297
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5298
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5299
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5300
    "trigger": "selector"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5301
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5302
// transition-timer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5303
add('load', '18', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5304
    "name": "transition-timer",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5305
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5306
    var DOCUMENT = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5307
        node = (DOCUMENT) ? DOCUMENT.documentElement: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5308
        ret = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5310
    if (node && node.style) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5311
        ret = !('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5312
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5314
    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5315
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5316
    "trigger": "transition"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5317
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5318
// widget-base-ie
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5319
add('load', '19', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5320
    "name": "widget-base-ie",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5321
    "trigger": "widget-base",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5322
    "ua": "ie"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5323
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5324
// yql-jsonp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5325
add('load', '20', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5326
    "name": "yql-jsonp",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5327
    "test": function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5328
    /* Only load the JSONP module when not in nodejs or winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5329
    TODO Make the winjs module a CORS module
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5330
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5331
    return (!Y.UA.nodejs && !Y.UA.winjs);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5332
},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5333
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5334
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5335
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5336
// yql-nodejs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5337
add('load', '21', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5338
    "name": "yql-nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5339
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5340
    "ua": "nodejs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5341
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5342
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5343
// yql-winjs
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5344
add('load', '22', {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5345
    "name": "yql-winjs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5346
    "trigger": "yql",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5347
    "ua": "winjs",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5348
    "when": "after"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5349
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5350
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5351
}, '3.10.3', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5352
YUI.add('intl-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5354
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5355
 * The Intl utility provides a central location for managing sets of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5356
 * localized resources (strings and formatting patterns).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5357
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5358
 * @class Intl
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5359
 * @uses EventTarget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5360
 * @static
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
var SPLIT_REGEX = /[, ]/;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5364
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5365
Y.mix(Y.namespace('Intl'), {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5366
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5367
 /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5368
    * Returns the language among those available that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5369
    * best matches the preferred language list, using the Lookup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5370
    * algorithm of BCP 47.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5371
    * If none of the available languages meets the user's preferences,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5372
    * then "" is returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5373
    * Extended language ranges are not supported.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5374
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5375
    * @method lookupBestLang
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5376
    * @param {String[] | String} preferredLanguages The list of preferred
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5377
    * languages in descending preference order, represented as BCP 47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5378
    * language tags. A string array or a comma-separated list.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5379
    * @param {String[]} availableLanguages The list of languages
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5380
    * that the application supports, represented as BCP 47 language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5381
    * tags.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5382
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5383
    * @return {String} The available language that best matches the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5384
    * preferred language list, or "".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5385
    * @since 3.1.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5386
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5387
    lookupBestLang: function(preferredLanguages, availableLanguages) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5388
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5389
        var i, language, result, index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5391
        // check whether the list of available languages contains language;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5392
        // if so return it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5393
        function scan(language) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5394
            var i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5395
            for (i = 0; i < availableLanguages.length; i += 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5396
                if (language.toLowerCase() ===
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5397
                            availableLanguages[i].toLowerCase()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5398
                    return availableLanguages[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5399
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5400
            }
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
        if (Y.Lang.isString(preferredLanguages)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5404
            preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
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
        for (i = 0; i < preferredLanguages.length; i += 1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5408
            language = preferredLanguages[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5409
            if (!language || language === '*') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5410
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5411
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5412
            // check the fallback sequence for one language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5413
            while (language.length > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5414
                result = scan(language);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5415
                if (result) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5416
                    return result;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5417
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5418
                    index = language.lastIndexOf('-');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5419
                    if (index >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5420
                        language = language.substring(0, index);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5421
                        // one-character subtags get cut along with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5422
                        // following subtag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5423
                        if (index >= 2 && language.charAt(index - 2) === '-') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5424
                            language = language.substring(0, index - 2);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5425
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5426
                    } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5427
                        // nothing available for this language
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5428
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5429
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5430
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5431
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5432
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5433
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5434
        return '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5435
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5436
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5437
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5439
}, '3.10.3', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5440
YUI.add('yui-log', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5441
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5442
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5443
 * Provides console log capability and exposes a custom event for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5444
 * console implementations. This module is a `core` YUI module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5445
 * <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
  5446
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5447
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5448
 * @submodule yui-log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5449
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5450
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5451
var INSTANCE = Y,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5452
    LOGEVENT = 'yui:log',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5453
    UNDEFINED = 'undefined',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5454
    LEVELS = { debug: 1,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5455
               info: 2,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5456
               warn: 4,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5457
               error: 8 };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5459
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5460
 * If the 'debug' config is true, a 'yui:log' event will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5461
 * dispatched, which the Console widget and anything else
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5462
 * can consume.  If the 'useBrowserConsole' config is true, it will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5463
 * write to the browser console if available.  YUI-specific log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5464
 * messages will only be present in the -debug versions of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5465
 * JS files.  The build system is supposed to remove log statements
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5466
 * from the raw and minified versions of the files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5467
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5468
 * @method log
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5469
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5470
 * @param  {String}  msg  The message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5471
 * @param  {String}  cat  The log category for the message.  Default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5472
 *                        categories are "info", "warn", "error", time".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5473
 *                        Custom categories can be used as well. (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5474
 * @param  {String}  src  The source of the the message (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5475
 * @param  {boolean} silent If true, the log event won't fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5476
 * @return {YUI}      YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5477
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5478
INSTANCE.log = function(msg, cat, src, silent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5479
    var bail, excl, incl, m, f, minlevel,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5480
        Y = INSTANCE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5481
        c = Y.config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5482
        publisher = (Y.fire) ? Y : YUI.Env.globalEvents;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5483
    // suppress log message if the config is off or the event stack
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5484
    // or the event call stack contains a consumer of the yui:log event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5485
    if (c.debug) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5486
        // apply source filters
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5487
        src = src || "";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5488
        if (typeof src !== "undefined") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5489
            excl = c.logExclude;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5490
            incl = c.logInclude;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5491
            if (incl && !(src in incl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5492
                bail = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5493
            } else if (incl && (src in incl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5494
                bail = !incl[src];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5495
            } else if (excl && (src in excl)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5496
                bail = excl[src];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5497
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5499
            // Determine the current minlevel as defined in configuration
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5500
            Y.config.logLevel = Y.config.logLevel || 'debug';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5501
            minlevel = LEVELS[Y.config.logLevel.toLowerCase()];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5503
            if (cat in LEVELS && LEVELS[cat] < minlevel) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5504
                // Skip this message if the we don't meet the defined minlevel
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5505
                bail = 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5506
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5507
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5508
        if (!bail) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5509
            if (c.useBrowserConsole) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5510
                m = (src) ? src + ': ' + msg : msg;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5511
                if (Y.Lang.isFunction(c.logFn)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5512
                    c.logFn.call(Y, msg, cat, src);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5513
                } else if (typeof console !== UNDEFINED && console.log) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5514
                    f = (cat && console[cat] && (cat in LEVELS)) ? cat : 'log';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5515
                    console[f](m);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5516
                } else if (typeof opera !== UNDEFINED) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5517
                    opera.postError(m);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5518
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5519
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5520
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5521
            if (publisher && !silent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5523
                if (publisher === Y && (!publisher.getEvent(LOGEVENT))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5524
                    publisher.publish(LOGEVENT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5525
                        broadcast: 2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5526
                    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5527
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5528
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5529
                publisher.fire(LOGEVENT, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5530
                    msg: msg,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5531
                    cat: cat,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5532
                    src: src
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5533
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5534
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5535
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5536
    }
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 Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5539
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5541
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5542
 * Write a system message.  This message will be preserved in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5543
 * minified and raw versions of the YUI files, unlike log statements.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5544
 * @method message
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5545
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5546
 * @param  {String}  msg  The message to log.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5547
 * @param  {String}  cat  The log category for the message.  Default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5548
 *                        categories are "info", "warn", "error", time".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5549
 *                        Custom categories can be used as well. (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5550
 * @param  {String}  src  The source of the the message (opt).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5551
 * @param  {boolean} silent If true, the log event won't fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5552
 * @return {YUI}      YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5553
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5554
INSTANCE.message = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5555
    return INSTANCE.log.apply(INSTANCE, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5556
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5558
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5559
}, '3.10.3', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5560
YUI.add('yui-later', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5562
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5563
 * Provides a setTimeout/setInterval wrapper. This module is a `core` YUI module,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5564
 * <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
  5565
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5566
 * @module yui
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5567
 * @submodule yui-later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5568
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5569
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5570
var NO_ARGS = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5572
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5573
 * Executes the supplied function in the context of the supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5574
 * object 'when' milliseconds later.  Executes the function a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5575
 * single time unless periodic is set to true.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5576
 * @for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5577
 * @method later
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5578
 * @param when {int} the number of milliseconds to wait until the fn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5579
 * is executed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5580
 * @param o the context object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5581
 * @param fn {Function|String} the function to execute or the name of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5582
 * the method in the 'o' object to execute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5583
 * @param data [Array] data that is provided to the function.  This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5584
 * accepts either a single item or an array.  If an array is provided,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5585
 * the function is executed with one parameter for each array item.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5586
 * 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
  5587
 * in an array [myarray].
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5588
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5589
 * Note: native methods in IE may not have the call and apply methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5590
 * In this case, it will work, but you are limited to four arguments.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5591
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5592
 * @param periodic {boolean} if true, executes continuously at supplied
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5593
 * interval until canceled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5594
 * @return {object} a timer object. Call the cancel() method on this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5595
 * object to stop the timer.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5596
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5597
Y.later = function(when, o, fn, data, periodic) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5598
    when = when || 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5599
    data = (!Y.Lang.isUndefined(data)) ? Y.Array(data) : NO_ARGS;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5600
    o = o || Y.config.win || Y;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5602
    var cancelled = false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5603
        method = (o && Y.Lang.isString(fn)) ? o[fn] : fn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5604
        wrapper = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5605
            // IE 8- may execute a setInterval callback one last time
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5606
            // after clearInterval was called, so in order to preserve
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5607
            // the cancel() === no more runny-run, we have to jump through
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5608
            // an extra hoop.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5609
            if (!cancelled) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5610
                if (!method.apply) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5611
                    method(data[0], data[1], data[2], data[3]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5612
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5613
                    method.apply(o, data || NO_ARGS);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5614
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5615
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5616
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5617
        id = (periodic) ? setInterval(wrapper, when) : setTimeout(wrapper, when);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5618
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5619
    return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5620
        id: id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5621
        interval: periodic,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5622
        cancel: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5623
            cancelled = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5624
            if (this.interval) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5625
                clearInterval(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5626
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5627
                clearTimeout(id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5628
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5629
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5630
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5631
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5633
Y.Lang.later = Y.later;
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
}, '3.10.3', {"requires": ["yui-base"]});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  5638
YUI.add('yui', function (Y, NAME) {}, '3.10.3', {"use": ["get", "features", "intl-base", "yui-log", "yui-later"]});