Index: third_party/polymer/components-chromium/core-ajax/core-ajax-extracted.js |
diff --git a/third_party/polymer/components-chromium/core-ajax/core-ajax-extracted.js b/third_party/polymer/components-chromium/core-ajax/core-ajax-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..299251b90f61360bde7faca69792706c232b8abc |
--- /dev/null |
+++ b/third_party/polymer/components-chromium/core-ajax/core-ajax-extracted.js |
@@ -0,0 +1,286 @@ |
+ |
+ |
+ Polymer('core-ajax', { |
+ /** |
+ * Fired when a response is received. |
+ * |
+ * @event core-response |
+ */ |
+ |
+ /** |
+ * Fired when an error is received. |
+ * |
+ * @event core-error |
+ */ |
+ |
+ /** |
+ * Fired whenever a response or an error is received. |
+ * |
+ * @event core-complete |
+ */ |
+ |
+ /** |
+ * The URL target of the request. |
+ * |
+ * @attribute url |
+ * @type string |
+ * @default '' |
+ */ |
+ url: '', |
+ |
+ /** |
+ * Specifies what data to store in the `response` property, and |
+ * to deliver as `event.response` in `response` events. |
+ * |
+ * One of: |
+ * |
+ * `text`: uses `XHR.responseText`. |
+ * |
+ * `xml`: uses `XHR.responseXML`. |
+ * |
+ * `json`: uses `XHR.responseText` parsed as JSON. |
+ * |
+ * `arraybuffer`: uses `XHR.response`. |
+ * |
+ * `blob`: uses `XHR.response`. |
+ * |
+ * `document`: uses `XHR.response`. |
+ * |
+ * @attribute handleAs |
+ * @type string |
+ * @default 'text' |
+ */ |
+ handleAs: '', |
+ |
+ /** |
+ * If true, automatically performs an Ajax request when either `url` or `params` changes. |
+ * |
+ * @attribute auto |
+ * @type boolean |
+ * @default false |
+ */ |
+ auto: false, |
+ |
+ /** |
+ * Parameters to send to the specified URL, as JSON. |
+ * |
+ * @attribute params |
+ * @type string (JSON) |
+ * @default '' |
+ */ |
+ params: '', |
+ |
+ /** |
+ * Returns the response object. |
+ * |
+ * @attribute response |
+ * @type Object |
+ * @default null |
+ */ |
+ response: null, |
+ |
+ /** |
+ * The HTTP method to use such as 'GET', 'POST', 'PUT', or 'DELETE'. |
+ * Default is 'GET'. |
+ * |
+ * @attribute method |
+ * @type string |
+ * @default '' |
+ */ |
+ method: '', |
+ |
+ /** |
+ * HTTP request headers to send. |
+ * |
+ * Example: |
+ * |
+ * <core-ajax |
+ * auto |
+ * url="http://somesite.com" |
+ * headers='{"X-Requested-With": "XMLHttpRequest"}' |
+ * handleAs="json" |
+ * on-core-response="{{handleResponse}}"></core-ajax> |
+ * |
+ * @attribute headers |
+ * @type Object |
+ * @default null |
+ */ |
+ headers: null, |
+ |
+ /** |
+ * Optional raw body content to send when method === "POST". |
+ * |
+ * Example: |
+ * |
+ * <core-ajax method="POST" auto url="http://somesite.com" |
+ * body='{"foo":1, "bar":2}'> |
+ * </core-ajax> |
+ * |
+ * @attribute body |
+ * @type Object |
+ * @default null |
+ */ |
+ body: null, |
+ |
+ /** |
+ * Content type to use when sending data. |
+ * |
+ * @attribute contentType |
+ * @type string |
+ * @default 'application/x-www-form-urlencoded' |
+ */ |
+ contentType: 'application/x-www-form-urlencoded', |
+ |
+ /** |
+ * Set the withCredentials flag on the request. |
+ * |
+ * @attribute withCredentials |
+ * @type boolean |
+ * @default false |
+ */ |
+ withCredentials: false, |
+ |
+ /** |
+ * Additional properties to send to core-xhr. |
+ * |
+ * Can be set to an object containing default properties |
+ * to send as arguments to the `core-xhr.request()` method |
+ * which implements the low-level communication. |
+ * |
+ * @property xhrArgs |
+ * @type Object |
+ * @default null |
+ */ |
+ xhrArgs: null, |
+ |
+ ready: function() { |
+ this.xhr = document.createElement('core-xhr'); |
+ }, |
+ |
+ receive: function(response, xhr) { |
+ if (this.isSuccess(xhr)) { |
+ this.processResponse(xhr); |
+ } else { |
+ this.error(xhr); |
+ } |
+ this.complete(xhr); |
+ }, |
+ |
+ isSuccess: function(xhr) { |
+ var status = xhr.status || 0; |
+ return !status || (status >= 200 && status < 300); |
+ }, |
+ |
+ processResponse: function(xhr) { |
+ var response = this.evalResponse(xhr); |
+ this.response = response; |
+ this.fire('core-response', {response: response, xhr: xhr}); |
+ }, |
+ |
+ error: function(xhr) { |
+ var response = xhr.status + ': ' + xhr.responseText; |
+ this.fire('core-error', {response: response, xhr: xhr}); |
+ }, |
+ |
+ complete: function(xhr) { |
+ this.fire('core-complete', {response: xhr.status, xhr: xhr}); |
+ }, |
+ |
+ evalResponse: function(xhr) { |
+ return this[(this.handleAs || 'text') + 'Handler'](xhr); |
+ }, |
+ |
+ xmlHandler: function(xhr) { |
+ return xhr.responseXML; |
+ }, |
+ |
+ textHandler: function(xhr) { |
+ return xhr.responseText; |
+ }, |
+ |
+ jsonHandler: function(xhr) { |
+ var r = xhr.responseText; |
+ try { |
+ return JSON.parse(r); |
+ } catch (x) { |
+ console.warn('core-ajax caught an exception trying to parse reponse as JSON:'); |
+ console.warn('url:', this.url); |
+ console.warn(x); |
+ return r; |
+ } |
+ }, |
+ |
+ documentHandler: function(xhr) { |
+ return xhr.response; |
+ }, |
+ |
+ blobHandler: function(xhr) { |
+ return xhr.response; |
+ }, |
+ |
+ arraybufferHandler: function(xhr) { |
+ return xhr.response; |
+ }, |
+ |
+ urlChanged: function() { |
+ if (!this.handleAs) { |
+ var ext = String(this.url).split('.').pop(); |
+ switch (ext) { |
+ case 'json': |
+ this.handleAs = 'json'; |
+ break; |
+ } |
+ } |
+ this.autoGo(); |
+ }, |
+ |
+ paramsChanged: function() { |
+ this.autoGo(); |
+ }, |
+ |
+ autoChanged: function() { |
+ this.autoGo(); |
+ }, |
+ |
+ // TODO(sorvell): multiple side-effects could call autoGo |
+ // during one micro-task, use a job to have only one action |
+ // occur |
+ autoGo: function() { |
+ if (this.auto) { |
+ this.goJob = this.job(this.goJob, this.go, 0); |
+ } |
+ }, |
+ |
+ /** |
+ * Performs an Ajax request to the specified URL. |
+ * |
+ * @method go |
+ */ |
+ go: function() { |
+ var args = this.xhrArgs || {}; |
+ // TODO(sjmiles): we may want XHR to default to POST if body is set |
+ args.body = this.body || args.body; |
+ args.params = this.params || args.params; |
+ if (args.params && typeof(args.params) == 'string') { |
+ args.params = JSON.parse(args.params); |
+ } |
+ args.headers = this.headers || args.headers || {}; |
+ if (args.headers && typeof(args.headers) == 'string') { |
+ args.headers = JSON.parse(args.headers); |
+ } |
+ if (this.contentType) { |
+ args.headers['content-type'] = this.contentType; |
+ } |
+ if (this.handleAs === 'arraybuffer' || this.handleAs === 'blob' || |
+ this.handleAs === 'document') { |
+ args.responseType = this.handleAs; |
+ } |
+ args.withCredentials = this.withCredentials; |
+ args.callback = this.receive.bind(this); |
+ args.url = this.url; |
+ args.method = this.method; |
+ return args.url && this.xhr.request(args); |
+ } |
+ |
+ }); |
+ |