Version 3.18.1
Show:

File: io/js/transports.js

            var XHR = win && win.XMLHttpRequest,
                XDR = win && win.XDomainRequest,
                AX = win && win.ActiveXObject,
            
                // Checks for the presence of the `withCredentials` in an XHR instance
                // object, which will be present if the environment supports CORS.
                SUPPORTS_CORS = XHR && 'withCredentials' in (new XMLHttpRequest());
            
            
            Y.mix(Y.IO, {
                /**
                * The ID of the default IO transport, defaults to `xhr`
                * @property _default
                * @type {String}
                * @static
                */
                _default: 'xhr',
                /**
                *
                * @method defaultTransport
                * @static
                * @param {String} [id] The transport to set as the default, if empty a new transport is created.
                * @return {Object} The transport object with a `send` method
                */
                defaultTransport: function(id) {
                    if (id) {
                        Y.log('Setting default IO to: ' + id, 'info', 'io');
                        Y.IO._default = id;
                    } else {
                        var o = {
                            c: Y.IO.transports[Y.IO._default](),
                            notify: Y.IO._default === 'xhr' ? false : true
                        };
                        Y.log('Creating default transport: ' + Y.IO._default, 'info', 'io');
                        return o;
                    }
                },
                /**
                * An object hash of custom transports available to IO
                * @property transports
                * @type {Object}
                * @static
                */
                transports: {
                    xhr: function () {
                        return XHR ? new XMLHttpRequest() :
                            AX ? new ActiveXObject('Microsoft.XMLHTTP') : null;
                    },
                    xdr: function () {
                        return XDR ? new XDomainRequest() : null;
                    },
                    iframe: function () { return {}; },
                    flash: null,
                    nodejs: null
                },
                /**
                * Create a custom transport of type and return it's object
                * @method customTransport
                * @param {String} id The id of the transport to create.
                * @static
                */
                customTransport: function(id) {
                    var o = { c: Y.IO.transports[id]() };
            
                    o[(id === 'xdr' || id === 'flash') ? 'xdr' : 'notify'] = true;
                    return o;
                }
            });
            
            Y.mix(Y.IO.prototype, {
                /**
                * Fired from the notify method of the transport which in turn fires
                * the event on the IO object.
                * @method notify
                * @param {String} event The name of the event
                * @param {Object} transaction The transaction object
                * @param {Object} config The configuration object for this transaction
                */
                notify: function(event, transaction, config) {
                    var io = this;
            
                    switch (event) {
                        case 'timeout':
                        case 'abort':
                        case 'transport error':
                            transaction.c = { status: 0, statusText: event };
                            event = 'failure';
                        default:
                            io[event].apply(io, [transaction, config]);
                    }
                }
            });