annotate sites/all/libraries/ckeditor/_source/plugins/ajax/plugin.js @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 /*
danielebarchiesi@0 2 Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
danielebarchiesi@0 3 For licensing, see LICENSE.html or http://ckeditor.com/license
danielebarchiesi@0 4 */
danielebarchiesi@0 5
danielebarchiesi@0 6 /**
danielebarchiesi@0 7 * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for
danielebarchiesi@0 8 * data loading.
danielebarchiesi@0 9 */
danielebarchiesi@0 10
danielebarchiesi@0 11 (function()
danielebarchiesi@0 12 {
danielebarchiesi@0 13 CKEDITOR.plugins.add( 'ajax',
danielebarchiesi@0 14 {
danielebarchiesi@0 15 requires : [ 'xml' ]
danielebarchiesi@0 16 });
danielebarchiesi@0 17
danielebarchiesi@0 18 /**
danielebarchiesi@0 19 * Ajax methods for data loading.
danielebarchiesi@0 20 * @namespace
danielebarchiesi@0 21 * @example
danielebarchiesi@0 22 */
danielebarchiesi@0 23 CKEDITOR.ajax = (function()
danielebarchiesi@0 24 {
danielebarchiesi@0 25 var createXMLHttpRequest = function()
danielebarchiesi@0 26 {
danielebarchiesi@0 27 // In IE, using the native XMLHttpRequest for local files may throw
danielebarchiesi@0 28 // "Access is Denied" errors.
danielebarchiesi@0 29 if ( !CKEDITOR.env.ie || location.protocol != 'file:' )
danielebarchiesi@0 30 try { return new XMLHttpRequest(); } catch(e) {}
danielebarchiesi@0 31
danielebarchiesi@0 32 try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {}
danielebarchiesi@0 33 try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {}
danielebarchiesi@0 34
danielebarchiesi@0 35 return null;
danielebarchiesi@0 36 };
danielebarchiesi@0 37
danielebarchiesi@0 38 var checkStatus = function( xhr )
danielebarchiesi@0 39 {
danielebarchiesi@0 40 // HTTP Status Codes:
danielebarchiesi@0 41 // 2xx : Success
danielebarchiesi@0 42 // 304 : Not Modified
danielebarchiesi@0 43 // 0 : Returned when running locally (file://)
danielebarchiesi@0 44 // 1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450)
danielebarchiesi@0 45
danielebarchiesi@0 46 return ( xhr.readyState == 4 &&
danielebarchiesi@0 47 ( ( xhr.status >= 200 && xhr.status < 300 ) ||
danielebarchiesi@0 48 xhr.status == 304 ||
danielebarchiesi@0 49 xhr.status === 0 ||
danielebarchiesi@0 50 xhr.status == 1223 ) );
danielebarchiesi@0 51 };
danielebarchiesi@0 52
danielebarchiesi@0 53 var getResponseText = function( xhr )
danielebarchiesi@0 54 {
danielebarchiesi@0 55 if ( checkStatus( xhr ) )
danielebarchiesi@0 56 return xhr.responseText;
danielebarchiesi@0 57 return null;
danielebarchiesi@0 58 };
danielebarchiesi@0 59
danielebarchiesi@0 60 var getResponseXml = function( xhr )
danielebarchiesi@0 61 {
danielebarchiesi@0 62 if ( checkStatus( xhr ) )
danielebarchiesi@0 63 {
danielebarchiesi@0 64 var xml = xhr.responseXML;
danielebarchiesi@0 65 return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText );
danielebarchiesi@0 66 }
danielebarchiesi@0 67 return null;
danielebarchiesi@0 68 };
danielebarchiesi@0 69
danielebarchiesi@0 70 var load = function( url, callback, getResponseFn )
danielebarchiesi@0 71 {
danielebarchiesi@0 72 var async = !!callback;
danielebarchiesi@0 73
danielebarchiesi@0 74 var xhr = createXMLHttpRequest();
danielebarchiesi@0 75
danielebarchiesi@0 76 if ( !xhr )
danielebarchiesi@0 77 return null;
danielebarchiesi@0 78
danielebarchiesi@0 79 xhr.open( 'GET', url, async );
danielebarchiesi@0 80
danielebarchiesi@0 81 if ( async )
danielebarchiesi@0 82 {
danielebarchiesi@0 83 // TODO: perform leak checks on this closure.
danielebarchiesi@0 84 /** @ignore */
danielebarchiesi@0 85 xhr.onreadystatechange = function()
danielebarchiesi@0 86 {
danielebarchiesi@0 87 if ( xhr.readyState == 4 )
danielebarchiesi@0 88 {
danielebarchiesi@0 89 callback( getResponseFn( xhr ) );
danielebarchiesi@0 90 xhr = null;
danielebarchiesi@0 91 }
danielebarchiesi@0 92 };
danielebarchiesi@0 93 }
danielebarchiesi@0 94
danielebarchiesi@0 95 xhr.send(null);
danielebarchiesi@0 96
danielebarchiesi@0 97 return async ? '' : getResponseFn( xhr );
danielebarchiesi@0 98 };
danielebarchiesi@0 99
danielebarchiesi@0 100 return /** @lends CKEDITOR.ajax */ {
danielebarchiesi@0 101
danielebarchiesi@0 102 /**
danielebarchiesi@0 103 * Loads data from an URL as plain text.
danielebarchiesi@0 104 * @param {String} url The URL from which load data.
danielebarchiesi@0 105 * @param {Function} [callback] A callback function to be called on
danielebarchiesi@0 106 * data load. If not provided, the data will be loaded
danielebarchiesi@0 107 * synchronously.
danielebarchiesi@0 108 * @returns {String} The loaded data. For asynchronous requests, an
danielebarchiesi@0 109 * empty string. For invalid requests, null.
danielebarchiesi@0 110 * @example
danielebarchiesi@0 111 * // Load data synchronously.
danielebarchiesi@0 112 * var data = CKEDITOR.ajax.load( 'somedata.txt' );
danielebarchiesi@0 113 * alert( data );
danielebarchiesi@0 114 * @example
danielebarchiesi@0 115 * // Load data asynchronously.
danielebarchiesi@0 116 * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data )
danielebarchiesi@0 117 * {
danielebarchiesi@0 118 * alert( data );
danielebarchiesi@0 119 * } );
danielebarchiesi@0 120 */
danielebarchiesi@0 121 load : function( url, callback )
danielebarchiesi@0 122 {
danielebarchiesi@0 123 return load( url, callback, getResponseText );
danielebarchiesi@0 124 },
danielebarchiesi@0 125
danielebarchiesi@0 126 /**
danielebarchiesi@0 127 * Loads data from an URL as XML.
danielebarchiesi@0 128 * @param {String} url The URL from which load data.
danielebarchiesi@0 129 * @param {Function} [callback] A callback function to be called on
danielebarchiesi@0 130 * data load. If not provided, the data will be loaded
danielebarchiesi@0 131 * synchronously.
danielebarchiesi@0 132 * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an
danielebarchiesi@0 133 * empty string. For invalid requests, null.
danielebarchiesi@0 134 * @example
danielebarchiesi@0 135 * // Load XML synchronously.
danielebarchiesi@0 136 * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' );
danielebarchiesi@0 137 * alert( xml.getInnerXml( '//' ) );
danielebarchiesi@0 138 * @example
danielebarchiesi@0 139 * // Load XML asynchronously.
danielebarchiesi@0 140 * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml )
danielebarchiesi@0 141 * {
danielebarchiesi@0 142 * alert( xml.getInnerXml( '//' ) );
danielebarchiesi@0 143 * } );
danielebarchiesi@0 144 */
danielebarchiesi@0 145 loadXml : function( url, callback )
danielebarchiesi@0 146 {
danielebarchiesi@0 147 return load( url, callback, getResponseXml );
danielebarchiesi@0 148 }
danielebarchiesi@0 149 };
danielebarchiesi@0 150 })();
danielebarchiesi@0 151
danielebarchiesi@0 152 })();