/* * JavaScript Load Image Fetch * https://github.com/blueimp/JavaScript-Load-Image * * Copyright 2017, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * https://opensource.org/licenses/MIT */ /* global define, module, require, Promise */ ;(function (factory) { 'use strict' if (typeof define === 'function' && define.amd) { // Register as an anonymous AMD module: define(['./load-image'], factory) } else if (typeof module === 'object' && module.exports) { factory(require('./load-image')) } else { // Browser globals: factory(window.loadImage) } })(function (loadImage) { 'use strict' var global = loadImage.global if ( global.fetch && global.Request && global.Response && global.Response.prototype.blob ) { loadImage.fetchBlob = function (url, callback, options) { /** * Fetch response handler. * * @param {Response} response Fetch response * @returns {Blob} Fetched Blob. */ function responseHandler(response) { return response.blob() } if (global.Promise && typeof callback !== 'function') { return fetch(new Request(url, callback)).then(responseHandler) } fetch(new Request(url, options)) .then(responseHandler) .then(callback) [ // Avoid parsing error in IE<9, where catch is a reserved word. // eslint-disable-next-line dot-notation 'catch' ](function (err) { callback(null, err) }) } } else if ( global.XMLHttpRequest && // https://xhr.spec.whatwg.org/#the-responsetype-attribute new XMLHttpRequest().responseType === '' ) { loadImage.fetchBlob = function (url, callback, options) { /** * Promise executor * * @param {Function} resolve Resolution function * @param {Function} reject Rejection function */ function executor(resolve, reject) { options = options || {} // eslint-disable-line no-param-reassign var req = new XMLHttpRequest() req.open(options.method || 'GET', url) if (options.headers) { Object.keys(options.headers).forEach(function (key) { req.setRequestHeader(key, options.headers[key]) }) } req.withCredentials = options.credentials === 'include' req.responseType = 'blob' req.onload = function () { resolve(req.response) } req.onerror = req.onabort = req.ontimeout = function (err) { if (resolve === reject) { // Not using Promises reject(null, err) } else { reject(err) } } req.send(options.body) } if (global.Promise && typeof callback !== 'function') { options = callback // eslint-disable-line no-param-reassign return new Promise(executor) } return executor(callback, callback) } } })