src/cm/media/js/lib/yui/yui_3.10.3/build/io-base/io-base-debug.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('io-base', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
Base IO functionality. Provides basic XHR transport support.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
@module io
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
@submodule io-base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
@for IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
var // List of events that comprise the IO event lifecycle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    EVENTS = ['start', 'complete', 'end', 'success', 'failure', 'progress'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    // Whitelist of used XHR response object properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    XHR_PROPS = ['status', 'statusText', 'responseText', 'responseXML'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    win = Y.config.win,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
    uid = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
The IO class is a utility that brokers HTTP requests through a simplified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
interface.  Specifically, it allows JavaScript to make HTTP requests to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
a resource without a page reload.  The underlying transport for making
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
same-domain requests is the XMLHttpRequest object.  IO can also use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
Flash, if specified as a transport, for cross-domain requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
@class IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
@param {Object} config Object of EventTarget's publish method configurations
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
                    used to configure IO's events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
function IO (config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    io._uid = 'io:' + uid++;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    io._init(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    Y.io._map[io._uid] = io;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
IO.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    //  Properties
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    * A counter that increments for each transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    * @property _id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    * @type {Number}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    _id: 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    * Object of IO HTTP headers sent with each transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    * @property _headers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    * @type {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    _headers: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
        'X-Requested-With' : 'XMLHttpRequest'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    * Object that stores timeout values for any transaction with a defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    * "timeout" configuration property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    * @property _timeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    * @type {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
    _timeout: {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
    //  Methods
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    //--------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    _init: function(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        var io = this, i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        io.cfg = config || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
        Y.augment(io, Y.EventTarget);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        for (i = 0, len = EVENTS.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
            // Publish IO global events with configurations, if any.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
            // IO global events are set to broadcast by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            // These events use the "io:" namespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
            io.publish('io:' + EVENTS[i], Y.merge({ broadcast: 1 }, config));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
            // Publish IO transaction events with configurations, if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
            // any.  These events use the "io-trn:" namespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
            io.publish('io-trn:' + EVENTS[i], config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    * Method that creates a unique transaction object for each request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    * @method _create
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    * @param {Object} cfg Configuration object subset to determine if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    *                 the transaction is an XDR or file upload,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    *                 requiring an alternate transport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
    * @param {Number} id Transaction id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
    * @return {Object} The transaction object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    _create: function(config, id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
        var io = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
            transaction = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
                id : Y.Lang.isNumber(id) ? id : io._id++,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
                uid: io._uid
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
            alt = config.xdr ? config.xdr.use : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
            form = config.form && config.form.upload ? 'iframe' : null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
            use;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
        if (alt === 'native') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
            // Non-IE and IE >= 10  can use XHR level 2 and not rely on an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            // external transport.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
            alt = Y.UA.ie && !SUPPORTS_CORS ? 'xdr' : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
            // Prevent "pre-flight" OPTIONS request by removing the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
            // `X-Requested-With` HTTP header from CORS requests. This header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
            // can be added back on a per-request basis, if desired.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
            io.setHeader('X-Requested-With');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
        use = alt || form;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
        transaction = use ? Y.merge(Y.IO.customTransport(use), transaction) :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
                            Y.merge(Y.IO.defaultTransport(), transaction);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        if (transaction.notify) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
            config.notify = function (e, t, c) { io.notify(e, t, c); };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
        if (!use) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
            if (win && win.FormData && config.data instanceof win.FormData) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
                transaction.c.upload.onprogress = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
                    io.progress(transaction, e, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
                transaction.c.onload = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
                    io.load(transaction, e, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
                transaction.c.onerror = function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                    io.error(transaction, e, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                transaction.upload = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
        return transaction;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    _destroy: function(transaction) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
        if (win && !transaction.notify && !transaction.xdr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
            if (XHR && !transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
                transaction.c.onreadystatechange = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            } else if (transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
                transaction.c.upload.onprogress = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
                transaction.c.onload = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
                transaction.c.onerror = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
            } else if (Y.UA.ie && !transaction.e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
                // IE, when using XMLHttpRequest as an ActiveX Object, will throw
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
                // a "Type Mismatch" error if the event handler is set to "null".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
                transaction.c.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
        transaction = transaction.c = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    * Method for creating and firing events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    * @method _evt
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    * @param {String} eventName Event to be published.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    * @param {Object} config Configuration data subset for event subscription.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    _evt: function(eventName, transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
        var io          = this, params,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
            args        = config['arguments'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
            emitFacade  = io.cfg.emitFacade,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
            globalEvent = "io:" + eventName,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
            trnEvent    = "io-trn:" + eventName;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
        // Workaround for #2532107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        this.detach(trnEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        if (transaction.e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
            transaction.c = { status: 0, statusText: transaction.e };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        // Fire event with parameters or an Event Facade.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        params = [ emitFacade ?
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
            {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
                id: transaction.id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
                data: transaction.c,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
                cfg: config,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
                'arguments': args
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            } :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
            transaction.id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
        if (!emitFacade) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
            if (eventName === EVENTS[0] || eventName === EVENTS[2]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
                if (args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
                    params.push(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                if (transaction.evt) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
                    params.push(transaction.evt);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
                    params.push(transaction.c);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
                if (args) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
                    params.push(args);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
        params.unshift(globalEvent);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
        // Fire global events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
        io.fire.apply(io, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
        // Fire transaction events, if receivers are defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        if (config.on) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
            params[0] = trnEvent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
            io.once(trnEvent, config.on[eventName], config.context || Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
            io.fire.apply(io, params);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
    * Fires event "io:start" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    * start event, if `config.on.start` is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
    * @method start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
    start: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        * Signals the start of an IO request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        * @event io:start
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        this._evt(EVENTS[0], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    * Fires event "io:complete" and creates, fires a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    * transaction-specific "complete" event, if config.on.complete is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
    * defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    * @method complete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
    complete: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
        * Signals the completion of the request-response phase of a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
        * transaction. Response status and data are accessible, if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
        * available, in this event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        * @event io:complete
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        this._evt(EVENTS[1], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    * Fires event "io:end" and creates, fires a transaction-specific "end"
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
    * event, if config.on.end is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
    * @method end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
    end: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
        * Signals the end of the transaction lifecycle.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
        * @event io:end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        this._evt(EVENTS[2], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        this._destroy(transaction);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
    * Fires event "io:success" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    * "success" event, if config.on.success is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    * @method success
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
    success: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
        * Signals an HTTP response with status in the 2xx range.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
        * Fires after io:complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
        * @event io:success
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
        this._evt(EVENTS[3], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
        this.end(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    * Fires event "io:failure" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
    * "failure" event, if config.on.failure is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
    * @method failure
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
    failure: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        * Signals an HTTP response with status outside of the 2xx range.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
        * Fires after io:complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
        * @event io:failure
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
        this._evt(EVENTS[4], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
        this.end(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
    * Fires event "io:progress" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
    * "progress" event -- for XMLHttpRequest file upload -- if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
    * config.on.progress is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
    * @method progress
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
    * @param {Object} progress event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
    progress: function(transaction, e, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
       /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
        * Signals the interactive state during a file upload transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        * This event fires after io:start and before io:complete.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
        * @event io:progress
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
        transaction.evt = e;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        this._evt(EVENTS[5], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
    * Fires event "io:complete" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
    * "complete" event -- for XMLHttpRequest file upload -- if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
    * config.on.complete is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
    * @method load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
    * @param {Object} load event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
    load: function (transaction, e, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
        transaction.evt = e.target;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
        this._evt(EVENTS[1], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    * Fires event "io:failure" and creates, fires a transaction-specific
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    * "failure" event -- for XMLHttpRequest file upload -- if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
    * config.on.failure is defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
    * @method error
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
    * @param {Object} error event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    error: function (transaction, e, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
        transaction.evt = e;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        this._evt(EVENTS[4], transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
    * Retry an XDR transaction, using the Flash tranport, if the native
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
    * transport fails.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
    * @method _retry
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
    * @param {Object} transaction Transaction object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
    * @param {String} uri Qualified path to transaction resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
    _retry: function(transaction, uri, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
        this._destroy(transaction);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
        config.xdr.use = 'flash';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
        return this.send(uri, config, transaction.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
    * Method that concatenates string data for HTTP GET transactions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    * @method _concat
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
    * @param {String} uri URI or root data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
    * @param {String} data Data to be concatenated onto URI.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    * @return {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
    _concat: function(uri, data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
        uri += (uri.indexOf('?') === -1 ? '?' : '&') + data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
        return uri;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
    * Stores default client headers for all transactions. If a label is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
    * passed with no value argument, the header will be deleted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
    * @method setHeader
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
    * @param {String} name HTTP header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
    * @param {String} value HTTP header value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
    setHeader: function(name, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        if (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
            this._headers[name] = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
            delete this._headers[name];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    * Method that sets all HTTP headers to be sent in a transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    * @method _setHeaders
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
    * @param {Object} transaction - XHR instance for the specific transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
    * @param {Object} headers - HTTP headers for the specific transaction, as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    *                    defined in the configuration object passed to YUI.io().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
    _setHeaders: function(transaction, headers) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
        headers = Y.merge(this._headers, headers);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
        Y.Object.each(headers, function(value, name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
            if (value !== 'disable') {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
                transaction.setRequestHeader(name, headers[name]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
    * Starts timeout count if the configuration object has a defined
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
    * timeout property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    * @method _startTimeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
    * @param {Object} timeout Timeout in milliseconds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
    _startTimeout: function(transaction, timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
        var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
        io._timeout[transaction.id] = setTimeout(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
            io._abort(transaction, 'timeout');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
        }, timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
    * Clears the timeout interval started by _startTimeout().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
    * @method _clearTimeout
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
    * @param {Number} id - Transaction id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
    _clearTimeout: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        clearTimeout(this._timeout[id]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        delete this._timeout[id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
    * Method that determines if a transaction response qualifies as success
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
    * or failure, based on the response HTTP status code, and fires the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
    * appropriate success or failure events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
    * @method _result
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
    * @param {Object} config Configuration object passed to io().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
    _result: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
        var status;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
        // Firefox will throw an exception if attempting to access
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
        // an XHR object's status property, after a request is aborted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
            status = transaction.c.status;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
            status = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
        // IE reports HTTP 204 as HTTP 1223.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
        if (status >= 200 && status < 300 || status === 304 || status === 1223) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
            this.success(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
            this.failure(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
    * Event handler bound to onreadystatechange.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
    * @method _rS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
    * @param {Object} config Configuration object passed to YUI.io().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    _rS: function(transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
        var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
        if (transaction.c.readyState === 4) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
            if (config.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
                io._clearTimeout(transaction.id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
            // Yield in the event of request timeout or abort.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
            setTimeout(function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
                io.complete(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
                io._result(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
            }, 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
    * Terminates a transaction due to an explicit abort or timeout.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
    * @method _abort
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
    * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
    * @param {Object} transaction Transaction object generated by _create().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
    * @param {String} type Identifies timed out or aborted transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
    _abort: function(transaction, type) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
        if (transaction && transaction.c) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
            transaction.e = type;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
            transaction.c.abort();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
   /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
    * Requests a transaction. `send()` is implemented as `Y.io()`.  Each
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    * transaction may include a configuration object.  Its properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
    * <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    *   <dt>method</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
    *     <dd>HTTP method verb (e.g., GET or POST). If this property is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    *         not defined, the default value will be GET.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    *   <dt>data</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    *     <dd>This is the name-value string that will be sent as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    *     transaction data. If the request is HTTP GET, the data become
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
    *     part of querystring. If HTTP POST, the data are sent in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
    *     message body.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
    *   <dt>xdr</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
    *     <dd>Defines the transport to be used for cross-domain requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    *     By setting this property, the transaction will use the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
    *     transport instead of XMLHttpRequest. The properties of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
    *     transport object are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
    *     <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
    *       <dt>use</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
    *         <dd>The transport to be used: 'flash' or 'native'</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
    *       <dt>dataType</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
    *         <dd>Set the value to 'XML' if that is the expected response
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
    *         content type.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
    *       <dt>credentials</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
    *         <dd>Set the value to 'true' to set XHR.withCredentials property to true.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
    *     </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
    *   <dt>form</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
    *     <dd>Form serialization configuration object.  Its properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
    *     <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
    *       <dt>id</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
    *         <dd>Node object or id of HTML form</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
    *       <dt>useDisabled</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
    *         <dd>`true` to also serialize disabled form field values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
    *         (defaults to `false`)</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
    *     </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
    *   <dt>on</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
    *     <dd>Assigns transaction event subscriptions. Available events are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
    *     <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
    *       <dt>start</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
    *         <dd>Fires when a request is sent to a resource.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
    *       <dt>complete</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
    *         <dd>Fires when the transaction is complete.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
    *       <dt>success</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
    *         <dd>Fires when the HTTP response status is within the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
    *         range.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
    *       <dt>failure</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
    *         <dd>Fires when the HTTP response status is outside the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
    *         range, if an exception occurs, if the transation is aborted,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
    *         or if the transaction exceeds a configured `timeout`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
    *       <dt>end</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
    *         <dd>Fires at the conclusion of the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
    *            lifecycle, after `success` or `failure`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
    *     </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
    *     <p>Callback functions for `start` and `end` receive the id of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
    *     transaction as a first argument. For `complete`, `success`, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
    *     `failure`, callbacks receive the id and the response object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    *     (usually the XMLHttpRequest instance).  If the `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
    *     property was included in the configuration object passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
    *     `Y.io()`, the configured data will be passed to all callbacks as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
    *     the last argument.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
    *     </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
    *   <dt>sync</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
    *     <dd>Pass `true` to make a same-domain transaction synchronous.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    *     <strong>CAVEAT</strong>: This will negatively impact the user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
    *     experience. Have a <em>very</em> good reason if you intend to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    *     this.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
    *   <dt>context</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
    *     <dd>The "`this'" object for all configured event handlers. If a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
    *     specific context is needed for individual callbacks, bind the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
    *     callback to a context using `Y.bind()`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
    *   <dt>headers</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
    *     <dd>Object map of transaction headers to send to the server. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
    *     object keys are the header names and the values are the header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
    *     values.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
    *   <dt>timeout</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
    *     <dd>Millisecond threshold for the transaction before being
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
    *     automatically aborted.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
    *   <dt>arguments</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
    *     <dd>User-defined data passed to all registered event handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
    *     This value is available as the second argument in the "start" and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
    *     "end" event handlers. It is the third argument in the "complete",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
    *     "success", and "failure" event handlers. <strong>Be sure to quote
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    *     this property name in the transaction configuration as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
    *     "arguments" is a reserved word in JavaScript</strong> (e.g.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
    *     `Y.io({ ..., "arguments": stuff })`).</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
    * </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
    * @method send
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
    * @public
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
    * @param {String} uri Qualified path to transaction resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
    * @param {Object} config Configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
    * @param {Number} id Transaction id, if already set.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
    * @return {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
    send: function(uri, config, id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
        var transaction, method, i, len, sync, data,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
            io = this,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
            u = uri,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
            response = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
        config = config ? Y.Object(config) : {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
        transaction = io._create(config, id);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
        method = config.method ? config.method.toUpperCase() : 'GET';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
        sync = config.sync;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
        data = config.data;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
        // Serialize a map object into a key-value string using
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
        // querystring-stringify-simple.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
        if ((Y.Lang.isObject(data) && !data.nodeType) && !transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
            if (Y.QueryString && Y.QueryString.stringify) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
                Y.log('Stringifying config.data for request', 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
                config.data = data = Y.QueryString.stringify(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
                Y.log('Failed to stringify config.data object, likely because `querystring-stringify-simple` is missing.', 'warn', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
        if (config.form) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
            if (config.form.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
                // This is a file upload transaction, calling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
                // upload() in io-upload-iframe.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
                return io.upload(transaction, uri, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
                // Serialize HTML form data into a key-value string.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
                data = io._serialize(config.form, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
        // Convert falsy values to an empty string. This way IE can't be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
        // rediculous and translate `undefined` to "undefined".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
        data || (data = '');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
        if (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
            switch (method) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
                case 'GET':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
                case 'HEAD':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
                case 'DELETE':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
                    u = io._concat(u, data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
                    data = '';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
                    Y.log('HTTP' + method + ' with data.  The querystring is: ' + u, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
                    break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
                case 'POST':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
                case 'PUT':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
                    // If Content-Type is defined in the configuration object, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
                    // or as a default header, it will be used instead of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
                    // 'application/x-www-form-urlencoded; charset=UTF-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
                    config.headers = Y.merge({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
                    }, config.headers);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
                    break;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
        if (transaction.xdr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
            // Route data to io-xdr module for flash and XDomainRequest.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
            return io.xdr(u, transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
        else if (transaction.notify) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
            // Route data to custom transport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
            return transaction.c.send(transaction, uri, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
        if (!sync && !transaction.upload) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
            transaction.c.onreadystatechange = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
                io._rS(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
        try {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
            // Determine if request is to be set as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
            // synchronous or asynchronous.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
            transaction.c.open(method, u, !sync, config.username || null, config.password || null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
            io._setHeaders(transaction.c, config.headers || {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
            io.start(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
            // Will work only in browsers that implement the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
            // Cross-Origin Resource Sharing draft.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
            if (config.xdr && config.xdr.credentials && SUPPORTS_CORS) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
                transaction.c.withCredentials = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
            // Using "null" with HTTP POST will result in a request
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
            // with no Content-Length header defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
            transaction.c.send(data);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
            if (sync) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
                // Create a response object for synchronous transactions,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                // mixing id and arguments properties with the xhr
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
                // properties whitelist.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
                for (i = 0, len = XHR_PROPS.length; i < len; ++i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
                    response[XHR_PROPS[i]] = transaction.c[XHR_PROPS[i]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
                response.getAllResponseHeaders = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
                    return transaction.c.getAllResponseHeaders();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
                response.getResponseHeader = function(name) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
                    return transaction.c.getResponseHeader(name);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
                };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
                io.complete(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
                io._result(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
                return response;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
        } catch(e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
            if (transaction.xdr) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
                // This exception is usually thrown by browsers
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
                // that do not support XMLHttpRequest Level 2.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
                // Retry the request with the XDR transport set
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
                // to 'flash'.  If the Flash transport is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
                // initialized or available, the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
                // will resolve to a transport error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
                return io._retry(transaction, uri, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
                io.complete(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
                io._result(transaction, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
        // If config.timeout is defined, and the request is standard XHR,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
        // initialize timeout polling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
        if (config.timeout) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
            io._startTimeout(transaction, config.timeout);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
            Y.log('Configuration timeout set to: ' + config.timeout, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
        return {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
            id: transaction.id,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
            abort: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
                return transaction.c ? io._abort(transaction, 'abort') : false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
            isInProgress: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
                return transaction.c ? (transaction.c.readyState % 4) : false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
            },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
            io: io
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
Method for initiating an ajax call.  The first argument is the url end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
point for the call.  The second argument is an object to configure the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
transaction and attach event subscriptions.  The configuration object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
supports the following properties:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
  <dt>method</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
    <dd>HTTP method verb (e.g., GET or POST). If this property is not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
        not defined, the default value will be GET.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
  <dt>data</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
    <dd>This is the name-value string that will be sent as the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
    transaction data. If the request is HTTP GET, the data become
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
    part of querystring. If HTTP POST, the data are sent in the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
    message body.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
  <dt>xdr</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
    <dd>Defines the transport to be used for cross-domain requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
    By setting this property, the transaction will use the specified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
    transport instead of XMLHttpRequest. The properties of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
    transport object are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
      <dt>use</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
        <dd>The transport to be used: 'flash' or 'native'</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
      <dt>dataType</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
        <dd>Set the value to 'XML' if that is the expected response
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
        content type.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
    </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
  <dt>form</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
    <dd>Form serialization configuration object.  Its properties are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
      <dt>id</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
        <dd>Node object or id of HTML form</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
      <dt>useDisabled</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
        <dd>`true` to also serialize disabled form field values
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
        (defaults to `false`)</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
    </dl></dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
  <dt>on</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
    <dd>Assigns transaction event subscriptions. Available events are:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
      <dt>start</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
        <dd>Fires when a request is sent to a resource.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
      <dt>complete</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
        <dd>Fires when the transaction is complete.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
      <dt>success</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
        <dd>Fires when the HTTP response status is within the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
        range.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
      <dt>failure</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
        <dd>Fires when the HTTP response status is outside the 2xx
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
        range, if an exception occurs, if the transation is aborted,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
        or if the transaction exceeds a configured `timeout`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
      <dt>end</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
        <dd>Fires at the conclusion of the transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
           lifecycle, after `success` or `failure`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
    </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
    <p>Callback functions for `start` and `end` receive the id of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
    transaction as a first argument. For `complete`, `success`, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    `failure`, callbacks receive the id and the response object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
    (usually the XMLHttpRequest instance).  If the `arguments`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
    property was included in the configuration object passed to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
    `Y.io()`, the configured data will be passed to all callbacks as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
    the last argument.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
    </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
  <dt>sync</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
    <dd>Pass `true` to make a same-domain transaction synchronous.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
    <strong>CAVEAT</strong>: This will negatively impact the user
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
    experience. Have a <em>very</em> good reason if you intend to use
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
    this.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
  <dt>context</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
    <dd>The "`this'" object for all configured event handlers. If a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
    specific context is needed for individual callbacks, bind the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
    callback to a context using `Y.bind()`.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
  <dt>headers</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
    <dd>Object map of transaction headers to send to the server. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
    object keys are the header names and the values are the header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
    values.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
  <dt>timeout</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
    <dd>Millisecond threshold for the transaction before being
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
    automatically aborted.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
  <dt>arguments</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
    <dd>User-defined data passed to all registered event handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
    This value is available as the second argument in the "start" and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
    "end" event handlers. It is the third argument in the "complete",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
    "success", and "failure" event handlers. <strong>Be sure to quote
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
    this property name in the transaction configuration as
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
    "arguments" is a reserved word in JavaScript</strong> (e.g.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
    `Y.io({ ..., "arguments": stuff })`).</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
@method io
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
@param {String} url qualified path to transaction resource.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
@param {Object} config configuration object for the transaction.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
@return {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
@for YUI
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
Y.io = function(url, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
    // Calling IO through the static interface will use and reuse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
    // an instance of IO.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
    var transaction = Y.io._map['io:0'] || new IO();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
    return transaction.send.apply(transaction, [url, config]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
Method for setting and deleting IO HTTP headers to be sent with every
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
request.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
Hosted as a property on the `io` function (e.g. `Y.io.header`).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
@method header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
@param {String} name HTTP header
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
@param {String} value HTTP header value
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
@static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
Y.io.header = function(name, value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
    // Calling IO through the static interface will use and reuse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
    // an instance of IO.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
    var transaction = Y.io._map['io:0'] || new IO();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
    transaction.setHeader(name, value);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
Y.IO = IO;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
// Map of all IO instances created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
Y.io._map = {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
var XHR = win && win.XMLHttpRequest,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
    XDR = win && win.XDomainRequest,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
    AX = win && win.ActiveXObject,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
    // Checks for the presence of the `withCredentials` in an XHR instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
    // object, which will be present if the environment supports CORS.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
    SUPPORTS_CORS = XHR && 'withCredentials' in (new XMLHttpRequest());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
Y.mix(Y.IO, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
    * The ID of the default IO transport, defaults to `xhr`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
    * @property _default
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
    * @type {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
    _default: 'xhr',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
    * @method defaultTransport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
    * @param {String} [id] The transport to set as the default, if empty a new transport is created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
    * @return {Object} The transport object with a `send` method
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
    defaultTransport: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
        if (id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
            Y.log('Setting default IO to: ' + id, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
            Y.IO._default = id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
            var o = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
                c: Y.IO.transports[Y.IO._default](),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
                notify: Y.IO._default === 'xhr' ? false : true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
            };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
            Y.log('Creating default transport: ' + Y.IO._default, 'info', 'io');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
            return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
    * An object hash of custom transports available to IO
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
    * @property transports
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
    * @type {Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
    transports: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
        xhr: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
            return XHR ? new XMLHttpRequest() :
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
                AX ? new ActiveXObject('Microsoft.XMLHTTP') : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
        xdr: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
            return XDR ? new XDomainRequest() : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
        iframe: function () { return {}; },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
        flash: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
        nodejs: null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
    * Create a custom transport of type and return it's object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
    * @method customTransport
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
    * @param {String} id The id of the transport to create.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
    customTransport: function(id) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
        var o = { c: Y.IO.transports[id]() };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
        o[(id === 'xdr' || id === 'flash') ? 'xdr' : 'notify'] = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
        return o;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
Y.mix(Y.IO.prototype, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
    * Fired from the notify method of the transport which in turn fires
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
    * the event on the IO object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
    * @method notify
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
    * @param {String} event The name of the event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
    * @param {Object} transaction The transaction object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
    * @param {Object} config The configuration object for this transaction
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
    notify: function(event, transaction, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
        var io = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
        switch (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
            case 'timeout':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
            case 'abort':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
            case 'transport error':
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
                transaction.c = { status: 0, statusText: event };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
                event = 'failure';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
            default:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
                io[event].apply(io, [transaction, config]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
}, '3.10.3', {"requires": ["event-custom-base", "querystring-stringify-simple"]});