src/pyams_skin/resources/js/ext/tinymce/dev/classes/util/XHR.js
changeset 69 a361355b55c7
equal deleted inserted replaced
68:fd8fb93e1b6a 69:a361355b55c7
       
     1 /**
       
     2  * XHR.js
       
     3  *
       
     4  * Copyright, Moxiecode Systems AB
       
     5  * Released under LGPL License.
       
     6  *
       
     7  * License: http://www.tinymce.com/license
       
     8  * Contributing: http://www.tinymce.com/contributing
       
     9  */
       
    10 
       
    11 /**
       
    12  * This class enables you to send XMLHTTPRequests cross browser.
       
    13  * @class tinymce.util.XHR
       
    14  * @mixes tinymce.util.Observable
       
    15  * @static
       
    16  * @example
       
    17  * // Sends a low level Ajax request
       
    18  * tinymce.util.XHR.send({
       
    19  *    url: 'someurl',
       
    20  *    success: function(text) {
       
    21  *       console.debug(text);
       
    22  *    }
       
    23  * });
       
    24  *
       
    25  * // Add custom header to XHR request
       
    26  * tinymce.util.XHR.on('beforeSend', function(e) {
       
    27  *     e.xhr.setRequestHeader('X-Requested-With', 'Something');
       
    28  * });
       
    29  */
       
    30 define("tinymce/util/XHR", [
       
    31 	"tinymce/util/Observable",
       
    32 	"tinymce/util/Tools"
       
    33 ], function(Observable, Tools) {
       
    34 	var XHR = {
       
    35 		/**
       
    36 		 * Sends a XMLHTTPRequest.
       
    37 		 * Consult the Wiki for details on what settings this method takes.
       
    38 		 *
       
    39 		 * @method send
       
    40 		 * @param {Object} settings Object will target URL, callbacks and other info needed to make the request.
       
    41 		 */
       
    42 		send: function(settings) {
       
    43 			var xhr, count = 0;
       
    44 
       
    45 			function ready() {
       
    46 				if (!settings.async || xhr.readyState == 4 || count++ > 10000) {
       
    47 					if (settings.success && count < 10000 && xhr.status == 200) {
       
    48 						settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);
       
    49 					} else if (settings.error) {
       
    50 						settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);
       
    51 					}
       
    52 
       
    53 					xhr = null;
       
    54 				} else {
       
    55 					setTimeout(ready, 10);
       
    56 				}
       
    57 			}
       
    58 
       
    59 			// Default settings
       
    60 			settings.scope = settings.scope || this;
       
    61 			settings.success_scope = settings.success_scope || settings.scope;
       
    62 			settings.error_scope = settings.error_scope || settings.scope;
       
    63 			settings.async = settings.async === false ? false : true;
       
    64 			settings.data = settings.data || '';
       
    65 
       
    66 			xhr = new XMLHttpRequest();
       
    67 
       
    68 			if (xhr) {
       
    69 				if (xhr.overrideMimeType) {
       
    70 					xhr.overrideMimeType(settings.content_type);
       
    71 				}
       
    72 
       
    73 				xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);
       
    74 
       
    75 				if (settings.crossDomain) {
       
    76 					xhr.withCredentials = true;
       
    77 				}
       
    78 
       
    79 				if (settings.content_type) {
       
    80 					xhr.setRequestHeader('Content-Type', settings.content_type);
       
    81 				}
       
    82 
       
    83 				xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
       
    84 
       
    85 				xhr = XHR.fire('beforeSend', {xhr: xhr, settings: settings}).xhr;
       
    86 				xhr.send(settings.data);
       
    87 
       
    88 				// Syncronous request
       
    89 				if (!settings.async) {
       
    90 					return ready();
       
    91 				}
       
    92 
       
    93 				// Wait for response, onReadyStateChange can not be used since it leaks memory in IE
       
    94 				setTimeout(ready, 10);
       
    95 			}
       
    96 		}
       
    97 	};
       
    98 
       
    99 	Tools.extend(XHR, Observable);
       
   100 
       
   101 	return XHR;
       
   102 });