File: client/lib/xhr.js
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- define([
- 'p-promise',
- 'components/micrajax/micrajax',
- './function'
- ], function (p, micrajax, FunctionHelpers) {
- 'use strict';
-
- var partial = FunctionHelpers.partial;
-
- var NodeXMLHttpRequest;
- try {
- // If embedded in node, use the xhr2 module
- if (typeof require !== 'undefined') {
- NodeXMLHttpRequest = require('xhr2');
- }
- } catch (e) {
- NodeXMLHttpRequest = null;
- }
-
- function getXHRObject(xhr) {
- if (xhr) {
- return xhr;
- } else if (NodeXMLHttpRequest) {
- return new NodeXMLHttpRequest();
- }
- // fallback to the system default
- }
-
- /**
- * Provides XHR functionality for use in either a browser or node
- * environment.
- *
- * @class Xhr
- * @static
- */
-
- function request(method, path, data, options) {
- options = options || {};
-
- var deferred = p.defer();
-
- micrajax.ajax({
- type: method,
- url: path,
- data: data,
- contentType: options.contentType || 'application/json',
- headers: options.headers,
- xhr: getXHRObject(options.xhr),
- success: function (data, responseText, jqXHR) {
- deferred.resolve(data);
- },
- error: function (jqXHR, status, responseText) {
- deferred.reject(responseText);
- }
- });
-
- return deferred.promise;
- }
-
- var XHR = {
- /**
- * Perform a GET request
- * @method get
- * @param {String} path
- * endpoint URL
- * @param {Object || String} [data]
- * data to send
- * @param {Object} [options={}]
- * Options
- * @param {String} [options.contentType]
- * Content type of `data`. Defaults to `application/json`
- * @param {Object} [options.headers]
- * Headers to pass with request.
- * @param {Object} [options.xhr]
- * XMLHttpRequest compatible object to use for XHR requests
- * @return {Promise} A promise that will be fulfilled with JSON `xhr.responseText` of the request
- */
- get: partial(request, 'GET'),
-
- /**
- * Perform a POST request
- * @method post
- * @param {String} path
- * endpoint URL
- * @param {Object || String} [data]
- * data to send
- * @param {Object} [options={}]
- * Options
- * @param {String} [options.contentType]
- * Content type of `data`. Defaults to `application/json`
- * @param {Object} [options.headers]
- * Headers to pass with request.
- * @param {Object} [options.xhr]
- * XMLHttpRequest compatible object to use for XHR requests
- * @return {Promise} A promise that will be fulfilled with JSON `xhr.responseText` of the request
- */
- post: partial(request, 'POST')
- };
-
- return XHR;
- });
-
-