Add canvas.toBlob polyfill
This commit is contained in:
parent
68d68e9009
commit
37d20b986b
3 changed files with 198 additions and 2 deletions
|
@ -19,7 +19,8 @@
|
||||||
"indexeddb-backbonejs-adapter": "*",
|
"indexeddb-backbonejs-adapter": "*",
|
||||||
"intl-tel-input": "~4.0.1",
|
"intl-tel-input": "~4.0.1",
|
||||||
"backbone.typeahead": "mojotech/backbone.typeahead",
|
"backbone.typeahead": "mojotech/backbone.typeahead",
|
||||||
"blueimp-load-image": "~1.13.0"
|
"blueimp-load-image": "~1.13.0",
|
||||||
|
"blueimp-canvas-to-blob": "~2.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mocha": "~2.0.1",
|
"mocha": "~2.0.1",
|
||||||
|
@ -92,6 +93,9 @@
|
||||||
],
|
],
|
||||||
"blueimp-load-image": [
|
"blueimp-load-image": [
|
||||||
"js/load-image.js"
|
"js/load-image.js"
|
||||||
|
],
|
||||||
|
"blueimp-canvas-to-blob": [
|
||||||
|
"js/canvas-to-blob.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"concat": {
|
"concat": {
|
||||||
|
@ -109,7 +113,8 @@
|
||||||
"momentjs",
|
"momentjs",
|
||||||
"intl-tel-input",
|
"intl-tel-input",
|
||||||
"backbone.typeahead",
|
"backbone.typeahead",
|
||||||
"blueimp-load-image"
|
"blueimp-load-image",
|
||||||
|
"blueimp-canvas-to-blob"
|
||||||
],
|
],
|
||||||
"libtextsecure": [
|
"libtextsecure": [
|
||||||
"jquery",
|
"jquery",
|
||||||
|
|
95
components/blueimp-canvas-to-blob/js/canvas-to-blob.js
Normal file
95
components/blueimp-canvas-to-blob/js/canvas-to-blob.js
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
/*
|
||||||
|
* JavaScript Canvas to Blob 2.0.5
|
||||||
|
* https://github.com/blueimp/JavaScript-Canvas-to-Blob
|
||||||
|
*
|
||||||
|
* Copyright 2012, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*
|
||||||
|
* Based on stackoverflow user Stoive's code snippet:
|
||||||
|
* http://stackoverflow.com/q/4998908
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint nomen: true, regexp: true */
|
||||||
|
/*global window, atob, Blob, ArrayBuffer, Uint8Array, define */
|
||||||
|
|
||||||
|
(function (window) {
|
||||||
|
'use strict';
|
||||||
|
var CanvasPrototype = window.HTMLCanvasElement &&
|
||||||
|
window.HTMLCanvasElement.prototype,
|
||||||
|
hasBlobConstructor = window.Blob && (function () {
|
||||||
|
try {
|
||||||
|
return Boolean(new Blob());
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}()),
|
||||||
|
hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array &&
|
||||||
|
(function () {
|
||||||
|
try {
|
||||||
|
return new Blob([new Uint8Array(100)]).size === 100;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}()),
|
||||||
|
BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
|
||||||
|
window.MozBlobBuilder || window.MSBlobBuilder,
|
||||||
|
dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob &&
|
||||||
|
window.ArrayBuffer && window.Uint8Array && function (dataURI) {
|
||||||
|
var byteString,
|
||||||
|
arrayBuffer,
|
||||||
|
intArray,
|
||||||
|
i,
|
||||||
|
mimeString,
|
||||||
|
bb;
|
||||||
|
if (dataURI.split(',')[0].indexOf('base64') >= 0) {
|
||||||
|
// Convert base64 to raw binary data held in a string:
|
||||||
|
byteString = atob(dataURI.split(',')[1]);
|
||||||
|
} else {
|
||||||
|
// Convert base64/URLEncoded data component to raw binary data:
|
||||||
|
byteString = decodeURIComponent(dataURI.split(',')[1]);
|
||||||
|
}
|
||||||
|
// Write the bytes of the string to an ArrayBuffer:
|
||||||
|
arrayBuffer = new ArrayBuffer(byteString.length);
|
||||||
|
intArray = new Uint8Array(arrayBuffer);
|
||||||
|
for (i = 0; i < byteString.length; i += 1) {
|
||||||
|
intArray[i] = byteString.charCodeAt(i);
|
||||||
|
}
|
||||||
|
// Separate out the mime component:
|
||||||
|
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
||||||
|
// Write the ArrayBuffer (or ArrayBufferView) to a blob:
|
||||||
|
if (hasBlobConstructor) {
|
||||||
|
return new Blob(
|
||||||
|
[hasArrayBufferViewSupport ? intArray : arrayBuffer],
|
||||||
|
{type: mimeString}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
bb = new BlobBuilder();
|
||||||
|
bb.append(arrayBuffer);
|
||||||
|
return bb.getBlob(mimeString);
|
||||||
|
};
|
||||||
|
if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {
|
||||||
|
if (CanvasPrototype.mozGetAsFile) {
|
||||||
|
CanvasPrototype.toBlob = function (callback, type, quality) {
|
||||||
|
if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {
|
||||||
|
callback(dataURLtoBlob(this.toDataURL(type, quality)));
|
||||||
|
} else {
|
||||||
|
callback(this.mozGetAsFile('blob', type));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else if (CanvasPrototype.toDataURL && dataURLtoBlob) {
|
||||||
|
CanvasPrototype.toBlob = function (callback, type, quality) {
|
||||||
|
callback(dataURLtoBlob(this.toDataURL(type, quality)));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define(function () {
|
||||||
|
return dataURLtoBlob;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
window.dataURLtoBlob = dataURLtoBlob;
|
||||||
|
}
|
||||||
|
}(this));
|
|
@ -27803,3 +27803,99 @@ JSON.stringify(result);
|
||||||
$.loadImage = loadImage;
|
$.loadImage = loadImage;
|
||||||
}
|
}
|
||||||
}(this));
|
}(this));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JavaScript Canvas to Blob 2.0.5
|
||||||
|
* https://github.com/blueimp/JavaScript-Canvas-to-Blob
|
||||||
|
*
|
||||||
|
* Copyright 2012, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://www.opensource.org/licenses/MIT
|
||||||
|
*
|
||||||
|
* Based on stackoverflow user Stoive's code snippet:
|
||||||
|
* http://stackoverflow.com/q/4998908
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint nomen: true, regexp: true */
|
||||||
|
/*global window, atob, Blob, ArrayBuffer, Uint8Array, define */
|
||||||
|
|
||||||
|
(function (window) {
|
||||||
|
'use strict';
|
||||||
|
var CanvasPrototype = window.HTMLCanvasElement &&
|
||||||
|
window.HTMLCanvasElement.prototype,
|
||||||
|
hasBlobConstructor = window.Blob && (function () {
|
||||||
|
try {
|
||||||
|
return Boolean(new Blob());
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}()),
|
||||||
|
hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array &&
|
||||||
|
(function () {
|
||||||
|
try {
|
||||||
|
return new Blob([new Uint8Array(100)]).size === 100;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}()),
|
||||||
|
BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
|
||||||
|
window.MozBlobBuilder || window.MSBlobBuilder,
|
||||||
|
dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob &&
|
||||||
|
window.ArrayBuffer && window.Uint8Array && function (dataURI) {
|
||||||
|
var byteString,
|
||||||
|
arrayBuffer,
|
||||||
|
intArray,
|
||||||
|
i,
|
||||||
|
mimeString,
|
||||||
|
bb;
|
||||||
|
if (dataURI.split(',')[0].indexOf('base64') >= 0) {
|
||||||
|
// Convert base64 to raw binary data held in a string:
|
||||||
|
byteString = atob(dataURI.split(',')[1]);
|
||||||
|
} else {
|
||||||
|
// Convert base64/URLEncoded data component to raw binary data:
|
||||||
|
byteString = decodeURIComponent(dataURI.split(',')[1]);
|
||||||
|
}
|
||||||
|
// Write the bytes of the string to an ArrayBuffer:
|
||||||
|
arrayBuffer = new ArrayBuffer(byteString.length);
|
||||||
|
intArray = new Uint8Array(arrayBuffer);
|
||||||
|
for (i = 0; i < byteString.length; i += 1) {
|
||||||
|
intArray[i] = byteString.charCodeAt(i);
|
||||||
|
}
|
||||||
|
// Separate out the mime component:
|
||||||
|
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
||||||
|
// Write the ArrayBuffer (or ArrayBufferView) to a blob:
|
||||||
|
if (hasBlobConstructor) {
|
||||||
|
return new Blob(
|
||||||
|
[hasArrayBufferViewSupport ? intArray : arrayBuffer],
|
||||||
|
{type: mimeString}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
bb = new BlobBuilder();
|
||||||
|
bb.append(arrayBuffer);
|
||||||
|
return bb.getBlob(mimeString);
|
||||||
|
};
|
||||||
|
if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {
|
||||||
|
if (CanvasPrototype.mozGetAsFile) {
|
||||||
|
CanvasPrototype.toBlob = function (callback, type, quality) {
|
||||||
|
if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {
|
||||||
|
callback(dataURLtoBlob(this.toDataURL(type, quality)));
|
||||||
|
} else {
|
||||||
|
callback(this.mozGetAsFile('blob', type));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else if (CanvasPrototype.toDataURL && dataURLtoBlob) {
|
||||||
|
CanvasPrototype.toBlob = function (callback, type, quality) {
|
||||||
|
callback(dataURLtoBlob(this.toDataURL(type, quality)));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
define(function () {
|
||||||
|
return dataURLtoBlob;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
window.dataURLtoBlob = dataURLtoBlob;
|
||||||
|
}
|
||||||
|
}(this));
|
||||||
|
|
Loading…
Reference in a new issue