76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
/*
|
|
* 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 */
|
|
|
|
;(function (factory) {
|
|
'use strict'
|
|
if (typeof define === 'function' && define.amd) {
|
|
// Register as an anonymous AMD module:
|
|
define(['./load-image', './load-image-meta'], factory)
|
|
} else if (typeof module === 'object' && module.exports) {
|
|
factory(require('./load-image'), require('./load-image-meta'))
|
|
} else {
|
|
// Browser globals:
|
|
factory(window.loadImage)
|
|
}
|
|
})(function (loadImage) {
|
|
'use strict'
|
|
|
|
if (typeof fetch !== 'undefined' && typeof Request !== 'undefined') {
|
|
loadImage.fetchBlob = function (url, callback, options) {
|
|
if (loadImage.hasMetaOption(options)) {
|
|
fetch(new Request(url, options))
|
|
.then(function (response) {
|
|
return response.blob()
|
|
})
|
|
.then(callback)
|
|
.catch(function (err) {
|
|
console.log(err) // eslint-disable-line no-console
|
|
callback()
|
|
})
|
|
} else {
|
|
callback()
|
|
}
|
|
}
|
|
} else if (
|
|
// Check for XHR2 support:
|
|
typeof XMLHttpRequest !== 'undefined' &&
|
|
typeof ProgressEvent !== 'undefined'
|
|
) {
|
|
loadImage.fetchBlob = function (url, callback, options) {
|
|
if (loadImage.hasMetaOption(options)) {
|
|
// eslint-disable-next-line no-param-reassign
|
|
options = options || {}
|
|
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 () {
|
|
callback(req.response)
|
|
}
|
|
req.onerror = req.onabort = req.ontimeout = function (e) {
|
|
console.log(e) // eslint-disable-line no-console
|
|
callback()
|
|
}
|
|
req.send(options.body)
|
|
} else {
|
|
callback()
|
|
}
|
|
}
|
|
}
|
|
})
|