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