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