src/cm/media/js/lib/yui/yui_3.10.3/build/get/get.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
YUI.add('get', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/*jslint boss:true, expr:true, laxbreak: true */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
Provides dynamic loading of remote JavaScript and CSS resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@module get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@class Get
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
var Lang = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    CUSTOM_ATTRS, // defined lazily in Y.Get.Transaction._createNode()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    Get, Transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
Y.Get = Get = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    Default options for CSS requests. Options specified here will override
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    global defaults for CSS requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
    See the `options` property for all available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
    @property cssOptions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    cssOptions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        attributes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
            rel: 'stylesheet'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
        doc         : Y.config.linkDoc || Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
        pollInterval: 50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    Default options for JS requests. Options specified here will override global
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    defaults for JS requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    See the `options` property for all available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    @property jsOptions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    jsOptions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
        autopurge: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
        doc      : Y.config.scriptDoc || Y.config.doc
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    Default options to use for all requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    Note that while all available options are documented here for ease of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    discovery, some options (like callback functions) only make sense at the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    transaction level.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    Callback functions specified via the options object or the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    parameter of the `css()`, `js()`, or `load()` methods will receive the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    transaction object as a parameter. See `Y.Get.Transaction` for details on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    the properties and methods available on transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    @property {Object} options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    @property {Boolean} [options.async=false] Whether or not to load scripts
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
        asynchronously, meaning they're requested in parallel and execution
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
        order is not guaranteed. Has no effect on CSS, since CSS is always
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
        loaded asynchronously.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    @property {Object} [options.attributes] HTML attribute name/value pairs that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        should be added to inserted nodes. By default, the `charset` attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        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
    89
        attribute, but you can override these with your own values if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    @property {Boolean} [options.autopurge] Whether or not to automatically
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        purge inserted nodes after the purge threshold is reached. This is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        `true` by default for JavaScript, but `false` for CSS since purging a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
        CSS node will also remove any styling applied by the referenced file.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    @property {Object} [options.context] `this` object to use when calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        callback functions. Defaults to the transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    @property {Mixed} [options.data] Arbitrary data object to pass to "on*"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        callbacks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    @property {Document} [options.doc] Document into which nodes should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
        inserted. By default, the current document is used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    @property {HTMLElement|String} [options.insertBefore] HTML element or id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        string of an element before which all generated nodes should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        inserted. If not specified, Get will automatically determine the best
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
        place to insert nodes for maximum compatibility.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    @property {Function} [options.onEnd] Callback to execute after a transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        is complete, regardless of whether it succeeded or failed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    @property {Function} [options.onFailure] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
        transaction fails, times out, or is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
    @property {Function} [options.onProgress] Callback to execute after each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
        individual request in a transaction either succeeds or fails.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    @property {Function} [options.onSuccess] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
        transaction completes successfully with no errors. Note that in browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        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
   122
        request may still be reported as a success because in these browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
        it can be difficult or impossible to distinguish between success and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
        failure for CSS resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    @property {Function} [options.onTimeout] Callback to execute after a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        transaction times out.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    @property {Number} [options.pollInterval=50] Polling interval (in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
        milliseconds) for detecting CSS load completion in browsers that don't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        support the `load` event on `<link>` nodes. This isn't used for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        JavaScript.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
    @property {Number} [options.purgethreshold=20] Number of nodes to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
        before triggering an automatic purge when `autopurge` is `true`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    @property {Number} [options.timeout] Number of milliseconds to wait before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
        aborting a transaction. When a timeout occurs, the `onTimeout` callback
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        is called, followed by `onFailure` and finally `onEnd`. By default,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
        there is no timeout.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
    @property {String} [options.type] Resource type ("css" or "js"). This option
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
        is set automatically by the `css()` and `js()` functions and will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        ignored there, but may be useful when using the `load()` function. If
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        not specified, the type will be inferred from the URL, defaulting to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
        "js" if the URL doesn't contain a recognizable file extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    options: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
        attributes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
            charset: 'utf-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
        purgethreshold: 20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
    // -- Protected Properties -------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    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
   160
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
    @property REGEX_CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
    REGEX_CSS: /\.css(?:[?;].*)?$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    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
   173
    specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
    @property REGEX_JS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
    @type RegExp
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
    @final
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    REGEX_JS : /\.js(?:[?;].*)?$/i,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    Contains information about the current environment, such as what script and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    link injection features it supports.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    This object is created and populated the first time the `_getEnv()` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
    is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    @property _env
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
    Mapping of document _yuid strings to <head> or <base> node references so we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
    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
   201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
    @property _insertCache
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    _insertCache: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    Information about the currently pending transaction, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
    This is actually an object with two properties: `callback`, containing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
    optional callback passed to `css()`, `load()`, or `js()`; and `transaction`,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
    containing the actual transaction instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
    @property _pending
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
    @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
    _pending: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
    HTML nodes eligible to be purged next time autopurge is triggered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    @property _purgeNodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
    @type HTMLElement[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
    _purgeNodes: [],
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
    Queued transactions and associated callbacks.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    @property _queue
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    @type Object[]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    _queue: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    Aborts the specified transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    This will cause the transaction's `onFailure` callback to be called and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    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
   254
    but any resources that have already been requested will continue loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    (there's no safe way to prevent this, unfortunately).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
    *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
   258
    future version of YUI. Use the transaction-level `abort()` method instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    @method abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    @param {Get.Transaction} transaction Transaction to abort.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    @deprecated Use the `abort()` method on the transaction instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
    abort: function (transaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        var i, id, item, len, pending;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
        if (!transaction.abort) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
            id          = transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
            pending     = this._pending;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            transaction = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
            if (pending && pending.transaction.id === id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
                transaction   = pending.transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
                this._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
                for (i = 0, len = this._queue.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
                    item = this._queue[i].transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
                    if (item.id === id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
                        transaction = item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
                        this._queue.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        transaction && transaction.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
    Loads one or more CSS files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    The _urls_ parameter may be provided as a URL string, a request object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    or an array of URL strings and/or request objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    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
   300
    or more options that should apply specifically to that request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
    Request-specific options take priority over transaction-level options and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
    default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
    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
   305
    as the current page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    The `options` parameter may be omitted completely and a callback passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
    its place, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
        // Load a single CSS file and log a message on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
        Y.Get.css('foo.css', function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
        // Load multiple CSS files and log a message when all have finished
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
        // loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        var urls = ['foo.css', 'http://example.com/bar.css', 'baz/quux.css'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
        Y.Get.css(urls, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
        // Specify transaction-level options, which will apply to all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
        // within the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
        Y.Get.css(urls, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
            attributes: {'class': 'my-css'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            timeout   : 5000
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
        // Specify per-request options, which override transaction-level and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
        // default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
        Y.Get.css([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
            {url: 'foo.css', attributes: {id: 'foo'}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
            {url: 'bar.css', attributes: {id: 'bar', charset: 'iso-8859-1'}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
        ]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    @method css
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
        @param {Array|null} callback.err Array of errors that occurred during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
            the transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
        @param {Get.Transaction} callback.transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    css: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        return this._load('css', urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    Loads one or more JavaScript resources.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
    The _urls_ parameter may be provided as a URL string, a request object,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
    or an array of URL strings and/or request objects.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
    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
   371
    or more options that should apply specifically to that request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    Request-specific options take priority over transaction-level options and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
    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
   376
    as the current page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
    The `options` parameter may be omitted completely and a callback passed in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
    its place, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
    Scripts will be executed in the order they're specified unless the `async`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
    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
   383
    in whatever order they finish loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
        // Load a single JS file and log a message on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
        Y.Get.js('foo.js', function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
        // Load multiple JS files, execute them in order, and log a message when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
        // all have finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        var urls = ['foo.js', 'http://example.com/bar.js', 'baz/quux.js'];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
        Y.Get.js(urls, function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
        // Specify transaction-level options, which will apply to all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
        // within the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
        Y.Get.js(urls, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
            attributes: {'class': 'my-js'},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
            timeout   : 5000
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
        // Specify per-request options, which override transaction-level and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        // default options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
        Y.Get.js([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
            {url: 'foo.js', attributes: {id: 'foo'}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
            {url: 'bar.js', attributes: {id: 'bar', charset: 'iso-8859-1'}}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
        ]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    @method js
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
        @param {Array|null} callback.err Array of errors that occurred during
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
            the transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
        @param {Get.Transaction} callback.transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
    js: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
        return this._load('js', urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
    Loads one or more CSS and/or JavaScript resources in the same transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
    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
   444
    transaction and be notified when all requested URLs have finished loading,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
    regardless of type.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    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
   448
    a resource type isn't specified in per-request options or transaction-level
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
    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
   450
    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
   451
    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
   452
    URL is a JavaScript resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
    @example
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        // 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
   457
        // when all files have finished loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
        Y.Get.load(['foo.css', 'bar.js', 'baz.css'], function (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
            if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
    @method load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
    @param {String|Object|Array} urls URL string, request object, or array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
        of URLs and/or request objects to load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
    @param {Object} [options] Options for this transaction. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        `Y.Get.options` property for a complete list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
    @param {Function} [callback] Callback function to be called on completion.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        This is a general callback and will be called before any more granular
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
        callbacks (`onSuccess`, `onFailure`, etc.) specified in the `options`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
        object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
        @param {Array|null} err Array of errors that occurred during the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
            transaction, or `null` on success.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        @param {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
    @return {Get.Transaction} Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
    load: function (urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
        return this._load(null, urls, options, callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
    Triggers an automatic purge if the purge threshold has been reached.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
    @method _autoPurge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
    @param {Number} threshold Purge threshold to use, in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
    _autoPurge: function (threshold) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
        if (threshold && this._purgeNodes.length >= threshold) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
            this._purge(this._purgeNodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
    Populates the `_env` property with information about the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
    environment.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
    @method _getEnv
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    @return {Object} Environment information.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
    @since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
    @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
    _getEnv: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
        var doc = Y.config.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
            ua  = Y.UA;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
        // Note: some of these checks require browser sniffs since it's not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
        // feasible to load test files on every pageview just to perform a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
        // feature test. I'm sorry if this makes you sad.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
        return (this._env = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
            // True if this is a browser that supports disabling async mode on
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
            // dynamically created script nodes. See
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
            // https://developer.mozilla.org/En/HTML/Element/Script#Attributes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
            // 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
   527
            // 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
   528
            async: (doc && doc.createElement('script').async === true) || (ua.ie >= 10),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
            // True if this browser fires an event when a dynamically injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
            // link node fails to load. This is currently true for Firefox 9+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
            // and WebKit 535.24+
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
            cssFail: ua.gecko >= 9 || ua.compareVersions(ua.webkit, 535.24) >= 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
            // True if this browser fires an event when a dynamically injected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
            // link node finishes loading. This is currently true for IE, Opera,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
            // Firefox 9+, and WebKit 535.24+. Note that IE versions <9 fire the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
            // DOM 0 "onload" event, but not "load". All versions of IE fire
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
            // "onload".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
            // davglass: Seems that Chrome on Android needs this to be false.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
            cssLoad: (
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
                    (!ua.gecko && !ua.webkit) || ua.gecko >= 9 ||
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
                    ua.compareVersions(ua.webkit, 535.24) >= 0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
                ) && !(ua.chrome && ua.chrome <= 18),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
            // True if this browser preserves script execution order while
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
            // loading scripts in parallel as long as the script node's `async`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
            // attribute is set to false to explicitly disable async execution.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
            preservesScriptOrder: !!(ua.gecko || ua.opera || (ua.ie && ua.ie >= 10))
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
    _getTransaction: function (urls, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
        var requests = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
            i, len, req, url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
        if (!Lang.isArray(urls)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
            urls = [urls];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
        options = Y.merge(this.options, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
        // 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
   564
        options.attributes = Y.merge(this.options.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
                options.attributes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        for (i = 0, len = urls.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
            url = urls[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
            req = {attributes: {}};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
            // 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
   572
            // global options and request-specific options. If it's an object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
            // with a "url" property, we assume it's a request object containing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
            // URL-specific options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
            if (typeof url === 'string') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
                req.url = url;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
            } else if (url.url) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
                // URL-specific options override both global defaults and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
                // request-specific options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
                Y.mix(req, url, false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
                url = url.url; // Make url a string so we can use it later.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
            Y.mix(req, options, false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
            // 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
   589
            // request options or the URL-specific options, try to determine
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
            // one from the file extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
            if (!req.type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
                if (this.REGEX_CSS.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
                    req.type = 'css';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
                    if (!this.REGEX_JS.test(url)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
                    req.type = 'js';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
            // Mix in type-specific default options, but don't overwrite any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
            // options that have already been set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
            Y.mix(req, req.type === 'js' ? this.jsOptions : this.cssOptions,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
                false, null, 0, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
            // Give the node an id attribute if it doesn't already have one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
            req.attributes.id || (req.attributes.id = Y.guid());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
            // Backcompat for <3.5.0 behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
            if (req.win) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
                req.doc = req.win.document;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
                req.win = req.doc.defaultView || req.doc.parentWindow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
            if (req.charset) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
                req.attributes.charset = req.charset;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
            requests.push(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
        return new Transaction(requests, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
    _load: function (type, urls, options, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
        var transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
        // Allow callback as third param.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
        if (typeof options === 'function') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
            callback = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
            options  = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
        options || (options = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
        options.type = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
        options._onFinish = Get._onTransactionFinish;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
        if (!this._env) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
            this._getEnv();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
        transaction = this._getTransaction(urls, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
        this._queue.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
            callback   : callback,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
            transaction: transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
        this._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
        return transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
    _onTransactionFinish : function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
        Get._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
        Get._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
    _next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
        var item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
        if (this._pending) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
        item = this._queue.shift();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
        if (item) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
            this._pending = item;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
            item.transaction.execute(item.callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
    _purge: function (nodes) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
        var purgeNodes    = this._purgeNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
            isTransaction = nodes !== purgeNodes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
            index, node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
        while (node = nodes.pop()) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
            // Don't purge nodes that haven't finished loading (or errored out),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
            // since this can hang the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
            if (!node._yuiget_finished) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                continue;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
            node.parentNode && node.parentNode.removeChild(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
            // If this is a transaction-level purge and this node also exists in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
            // the Get-level _purgeNodes array, we need to remove it from
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
            // _purgeNodes to avoid creating a memory leak. The indexOf lookup
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
            // sucks, but until we get WeakMaps, this is the least troublesome
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
            // 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
   696
            // not be in the same document).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
            if (isTransaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
                index = Y.Array.indexOf(purgeNodes, node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
                if (index > -1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
                    purgeNodes.splice(index, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
Alias for `js()`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
@method script
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
Get.script = Get.js;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
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
   718
CSS files.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
This class should not be instantiated manually. Instances will be created and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
returned as needed by Y.Get's `css()`, `js()`, and `load()` methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
@class Get.Transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
Get.Transaction = Transaction = function (requests, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
    var self = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
    self.id       = Transaction._lastId += 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
    self.data     = options.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
    self.errors   = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
    self.nodes    = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
    self.options  = options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
    self.requests = requests;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
    self._callbacks = []; // callbacks to call after execution finishes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
    self._queue     = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
    self._reqsWaiting   = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
    // Deprecated pre-3.5.0 properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
    self.tId = self.id; // Use `id` instead.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
    self.win = options.win || Y.config.win;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
};
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
Arbitrary data object associated with this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
This object comes from the options passed to `Get.css()`, `Get.js()`, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
`Get.load()`, and will be `undefined` if no data object was specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
@property {Object} data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
Array of errors that have occurred during this transaction, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
@property {Object[]} errors
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
@property {String} errors.error Error message.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
@property {Object} errors.request Request object related to the error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
Numeric id for this transaction, unique among all transactions within the same
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
YUI sandbox in the current pageview.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
@property {Number} id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
HTMLElement nodes (native ones, not YUI Node instances) that have been inserted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
during the current transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
@property {HTMLElement[]} nodes
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
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
Options associated with this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
See `Get.options` for the full list of available options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
@property {Object} options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
Request objects contained in this transaction. Each request object represents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
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
   791
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
@property {Object} requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
@since 3.5.0
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
Id of the most recent transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
@property _lastId
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
@type Number
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
@protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
Transaction._lastId = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
Transaction.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
    Current state of this transaction. One of "new", "executing", or "done".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
    @property _state
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
    @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
    _state: 'new', // "new", "executing", or "done"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    Aborts this transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
    This will cause the transaction's `onFailure` callback to be called and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
    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
   825
    but any resources that have already been requested will continue loading
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
    (there's no safe way to prevent this, unfortunately).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
    @method abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
    @param {String} [msg="Aborted."] Optional message to use in the `errors`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
        array describing why the transaction was aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
    abort: function (msg) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
        this._pending    = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
        this._pendingCSS = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
        this._pollTimer  = clearTimeout(this._pollTimer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
        this._queue      = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
        this._reqsWaiting    = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
        this.errors.push({error: msg || 'Aborted'});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
        this._finish();
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
    Begins execting the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
    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
   847
    automatically when other pending transactions have finished. If you really
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
    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
   849
    this transaction's scripts may end up executing before the scripts in other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
    pending transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
    If the transaction is already executing, the specified callback (if any)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    will be queued and called after execution finishes. If the transaction has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
    already finished, the callback will be called immediately (the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
    will not be executed again).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
    @method execute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
    @param {Function} callback Callback function to execute after all requests
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
        in the transaction are complete, or after the transaction is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
    execute: function (callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
        var self     = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
            requests = self.requests,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
            state    = self._state,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
            i, len, queue, req;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
        if (state === 'done') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
            callback && callback(self.errors.length ? self.errors : null, self);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
            callback && self._callbacks.push(callback);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
            if (state === 'executing') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
            }
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
        self._state = 'executing';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
        self._queue = queue = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
        if (self.options.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
            self._timeout = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
                self.abort('Timeout');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
            }, self.options.timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        self._reqsWaiting = requests.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
        for (i = 0, len = requests.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
            req = requests[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
            if (req.async || req.type === 'css') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
                // No need to queue CSS or fully async JS.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
                self._insert(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
                queue.push(req);
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
        self._next();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
    Manually purges any `<script>` or `<link>` nodes this transaction has
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
    created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
    Be careful when purging a transaction that contains CSS requests, since
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
    removing `<link>` nodes will also remove any styles they applied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
    @method purge
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
    purge: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
        Get._purge(this.nodes);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
    _createNode: function (name, attrs, doc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
        var node = doc.createElement(name),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
            attr, testEl;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
        if (!CUSTOM_ATTRS) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
            // IE6 and IE7 expect property names rather than attribute names for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
            // certain attributes. Rather than sniffing, we do a quick feature
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
            // test the first time _createNode() runs to determine whether we
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
            // need to provide a workaround.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
            testEl = doc.createElement('div');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
            testEl.setAttribute('class', 'a');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
            CUSTOM_ATTRS = testEl.className === 'a' ? {} : {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
                'for'  : 'htmlFor',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
                'class': 'className'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
        for (attr in attrs) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
            if (attrs.hasOwnProperty(attr)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
                node.setAttribute(CUSTOM_ATTRS[attr] || attr, attrs[attr]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
        return node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
    _finish: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
        var errors  = this.errors.length ? this.errors : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
            options = this.options,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
            thisObj = options.context || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
            data, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
        if (this._state === 'done') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
            return;
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
        this._state = 'done';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
        for (i = 0, len = this._callbacks.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
            this._callbacks[i].call(thisObj, errors, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
        data = this._getEventData();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
        if (errors) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
            if (options.onTimeout && errors[errors.length - 1].error === 'Timeout') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
                options.onTimeout.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
            if (options.onFailure) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
                options.onFailure.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
        } else if (options.onSuccess) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
            options.onSuccess.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
        if (options.onEnd) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
            options.onEnd.call(thisObj, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
        if (options._onFinish) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
            options._onFinish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
    _getEventData: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
        if (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
            // This merge is necessary for backcompat. I hate it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
            return Y.merge(this, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
                abort  : this.abort, // have to copy these because the prototype isn't preserved
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
                purge  : this.purge,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
                request: req,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
                url    : req.url,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
                win    : req.win
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
            return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
    _getInsertBefore: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
        var doc = req.doc,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
            el  = req.insertBefore,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
            cache, docStamp;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
        if (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
            return typeof el === 'string' ? doc.getElementById(el) : el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
        cache    = Get._insertCache;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
        docStamp = Y.stamp(doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
        if ((el = cache[docStamp])) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
            return el;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
        // Inserting before a <base> tag apparently works around an IE bug
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
        // (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
  1016
        // bug that is, exactly. Better safe than sorry?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
        if ((el = doc.getElementsByTagName('base')[0])) { // assignment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
            return (cache[docStamp] = el);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
        // Look for a <head> element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
        el = doc.head || doc.getElementsByTagName('head')[0];
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 (el) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
            // 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
  1026
            // point. Inserting before this node will ensure that all our CSS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
            // gets inserted in the correct order, to maintain style precedence.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
            el.appendChild(doc.createTextNode(''));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
            return (cache[docStamp] = el.lastChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
        // If all else fails, just insert before the first script node on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
        // page, which is virtually guaranteed to exist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
        return (cache[docStamp] = doc.getElementsByTagName('script')[0]);
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
    _insert: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
        var env          = Get._env,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
            insertBefore = this._getInsertBefore(req),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
            isScript     = req.type === 'js',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
            node         = req.node,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
            self         = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
            ua           = Y.UA,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
            cssTimeout, nodeType;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
        if (!node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
            if (isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
                nodeType = 'script';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
            } else if (!env.cssLoad && ua.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
                nodeType = 'style';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
                nodeType = 'link';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
            node = req.node = this._createNode(nodeType, req.attributes,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
                req.doc);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
        function onError() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
            self._progress('Failed to load ' + req.url, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
        function onLoad() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
            if (cssTimeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
                clearTimeout(cssTimeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
            self._progress(null, req);
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
        // Deal with script asynchronicity.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
        if (isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
            node.setAttribute('src', req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
            if (req.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
                // Explicitly indicate that we want the browser to execute this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
                // script asynchronously. This is necessary for older browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
                // like Firefox <4.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
                node.async = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
                if (env.async) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
                    // This browser treats injected scripts as async by default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
                    // (standard HTML5 behavior) but asynchronous loading isn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
                    // desired, so tell the browser not to mark this script as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
                    // async.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
                    node.async = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
                // If this browser doesn't preserve script execution order based
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
                // on insertion order, we'll need to avoid inserting other
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
                // scripts until this one finishes loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
                if (!env.preservesScriptOrder) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
                    this._pending = req;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
            if (!env.cssLoad && ua.gecko) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
                // In Firefox <9, we can import the requested URL into a <style>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
                // node and poll for the existence of node.sheet.cssRules. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
                // gives us a reliable way to determine CSS load completion that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
                // also works for cross-domain stylesheets.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
                // Props to Zach Leatherman for calling my attention to this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
                // technique.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
                node.innerHTML = (req.attributes.charset ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
                    '@charset "' + req.attributes.charset + '";' : '') +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
                    '@import "' + req.url + '";';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
                node.setAttribute('href', req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
        // Inject the node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1114
        if (isScript && ua.ie && (ua.ie < 9 || (document.documentMode && document.documentMode < 9))) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1115
            // 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
  1116
            node.onreadystatechange = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
                if (/loaded|complete/.test(node.readyState)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
                    node.onreadystatechange = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
                    onLoad();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
        } else if (!isScript && !env.cssLoad) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1123
            // CSS on Firefox <9 or WebKit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1124
            this._poll(req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1125
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
            // Script or CSS on everything else. Using DOM 0 events because that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
            // evens the playing field with older IEs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
            if (ua.ie >= 10) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
                // We currently need to introduce a timeout for IE10, since it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
                // calls onerror/onload synchronously for 304s - messing up existing
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
                // program flow.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
                // Remove this block if the following bug gets fixed by GA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
                /*jshint maxlen: 1500 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
                // 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
  1138
                node.onerror = function() { setTimeout(onError, 0); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1139
                node.onload  = function() { setTimeout(onLoad, 0); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1140
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
                node.onerror = onError;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
                node.onload  = onLoad;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
            // If this browser doesn't fire an event when CSS fails to load,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
            // fail after a timeout to avoid blocking the transaction queue.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
            if (!env.cssFail && !isScript) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
                cssTimeout = setTimeout(onError, req.timeout || 3000);
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
        this.nodes.push(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
        insertBefore.parentNode.insertBefore(node, insertBefore);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
    _next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
        if (this._pending) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
            return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
        // If there are requests in the queue, insert the next queued request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
        // Otherwise, if we're waiting on already-inserted requests to finish,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
        // wait longer. If there are no queued requests and we're not waiting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
        // for anything to load, then we're done!
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
        if (this._queue.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
            this._insert(this._queue.shift());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
        } else if (!this._reqsWaiting) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
            this._finish();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
    _poll: function (newReq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
        var self       = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
            pendingCSS = self._pendingCSS,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
            isWebKit   = Y.UA.webkit,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
            i, hasRules, j, nodeHref, req, sheets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
        if (newReq) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
            pendingCSS || (pendingCSS = self._pendingCSS = []);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
            pendingCSS.push(newReq);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
            if (self._pollTimer) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
                // A poll timeout is already pending, so no need to create a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
                // new one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
        self._pollTimer = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
        // 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
  1192
        // will still be treated as a success. There's no good workaround for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
        // this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
        for (i = 0; i < pendingCSS.length; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
            req = pendingCSS[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
            if (isWebKit) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
                // Look for a stylesheet matching the pending URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
                sheets   = req.doc.styleSheets;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
                j        = sheets.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
                nodeHref = req.node.href;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
                while (--j >= 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
                    if (sheets[j].href === nodeHref) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
                        pendingCSS.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
                        i -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
                        self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
                        break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
                // Many thanks to Zach Leatherman for calling my attention to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1214
                // the @import-based cross-domain technique used here, and to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1215
                // Oleg Slobodskoi for an earlier same-domain implementation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1216
                //
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
                // See Zach's blog for more details:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
                // http://www.zachleat.com/web/2010/07/29/load-css-dynamically/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
                try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
                    // We don't really need to store this value since we never
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
                    // use it again, but if we don't store it, Closure Compiler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
                    // assumes the code is useless and removes it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1223
                    hasRules = !!req.node.sheet.cssRules;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
                    // If we get here, the stylesheet has loaded.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
                    pendingCSS.splice(i, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
                    i -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
                    self._progress(null, req);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
                } catch (ex) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
                    // An exception means the stylesheet is still loading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1233
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
        if (pendingCSS.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
            self._pollTimer = setTimeout(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
                self._poll.call(self);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
            }, self.options.pollInterval);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
    _progress: function (err, req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
        var options = this.options;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
        if (err) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
            req.error = err;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1248
            this.errors.push({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1249
                error  : err,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1250
                request: req
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1251
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1253
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1255
        req.node._yuiget_finished = req.finished = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1257
        if (options.onProgress) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1258
            options.onProgress.call(options.context || this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1259
                this._getEventData(req));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1260
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1262
        if (req.autopurge) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1263
            // Pre-3.5.0 Get always excludes the most recent node from an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1264
            // autopurge. I find this odd, but I'm keeping that behavior for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1265
            // the sake of backcompat.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1266
            Get._autoPurge(this.options.purgethreshold);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1267
            Get._purgeNodes.push(req.node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1268
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1270
        if (this._pending === req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1271
            this._pending = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1272
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1274
        this._reqsWaiting -= 1;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1276
        this._next();
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1281
}, '@VERSION@', {"requires": ["yui-base"]});