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