|
- /*
- * 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(['jquery/fileUploader/vendor/blueimp-load-image/js/load-image'], factory)
- } else if (typeof module === 'object' && module.exports) {
- factory(require('jquery/fileUploader/vendor/blueimp-load-image/js/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)
- }
- }
- })
|