Index: third_party/polymer/components-chromium/core-ajax/core-xhr-extracted.js |
diff --git a/third_party/polymer/components-chromium/core-ajax/core-xhr-extracted.js b/third_party/polymer/components-chromium/core-ajax/core-xhr-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bd433528a8ca291fef2117dc69bfc00ff32bb531 |
--- /dev/null |
+++ b/third_party/polymer/components-chromium/core-ajax/core-xhr-extracted.js |
@@ -0,0 +1,87 @@ |
+ |
+ |
+ Polymer('core-xhr', { |
+ |
+ /** |
+ * Sends a HTTP request to the server and returns the XHR object. |
+ * |
+ * @method request |
+ * @param {Object} inOptions |
+ * @param {String} inOptions.url The url to which the request is sent. |
+ * @param {String} inOptions.method The HTTP method to use, default is GET. |
+ * @param {boolean} inOptions.sync By default, all requests are sent asynchronously. To send synchronous requests, set to true. |
+ * @param {Object} inOptions.params Data to be sent to the server. |
+ * @param {Object} inOptions.body The content for the request body for POST method. |
+ * @param {Object} inOptions.headers HTTP request headers. |
+ * @param {String} inOptions.responseType The response type. Default is 'text'. |
+ * @param {boolean} inOptions.withCredentials Whether or not to send credentials on the request. Default is false. |
+ * @param {Object} inOptions.callback Called when request is completed. |
+ * @returns {Object} XHR object. |
+ */ |
+ request: function(options) { |
+ var xhr = new XMLHttpRequest(); |
+ var url = options.url; |
+ var method = options.method || 'GET'; |
+ var async = !options.sync; |
+ // |
+ var params = this.toQueryString(options.params); |
+ if (params && method == 'GET') { |
+ url += (url.indexOf('?') > 0 ? '&' : '?') + params; |
+ } |
+ var xhrParams = this.isBodyMethod(method) ? (options.body || params) : null; |
+ // |
+ xhr.open(method, url, async); |
+ if (options.responseType) { |
+ xhr.responseType = options.responseType; |
+ } |
+ if (options.withCredentials) { |
+ xhr.withCredentials = true; |
+ } |
+ this.makeReadyStateHandler(xhr, options.callback); |
+ this.setRequestHeaders(xhr, options.headers); |
+ xhr.send(xhrParams); |
+ if (!async) { |
+ xhr.onreadystatechange(xhr); |
+ } |
+ return xhr; |
+ }, |
+ |
+ toQueryString: function(params) { |
+ var r = []; |
+ for (var n in params) { |
+ var v = params[n]; |
+ n = encodeURIComponent(n); |
+ r.push(v == null ? n : (n + '=' + encodeURIComponent(v))); |
+ } |
+ return r.join('&'); |
+ }, |
+ |
+ isBodyMethod: function(method) { |
+ return this.bodyMethods[(method || '').toUpperCase()]; |
+ }, |
+ |
+ bodyMethods: { |
+ POST: 1, |
+ PUT: 1, |
+ DELETE: 1 |
+ }, |
+ |
+ makeReadyStateHandler: function(xhr, callback) { |
+ xhr.onreadystatechange = function() { |
+ if (xhr.readyState == 4) { |
+ callback && callback.call(null, xhr.response, xhr); |
+ } |
+ }; |
+ }, |
+ |
+ setRequestHeaders: function(xhr, headers) { |
+ if (headers) { |
+ for (var name in headers) { |
+ xhr.setRequestHeader(name, headers[name]); |
+ } |
+ } |
+ } |
+ |
+ }); |
+ |
+ |