12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- var binaryFeatures = {};
- binaryFeatures.useBlobBuilder = (function(){
- try {
- new Blob([]);
- return false;
- } catch (e) {
- return true;
- }
- })();
- binaryFeatures.useArrayBufferView = !binaryFeatures.useBlobBuilder && (function(){
- try {
- return (new Blob([new Uint8Array([])])).size === 0;
- } catch (e) {
- return true;
- }
- })();
- exports.binaryFeatures = binaryFeatures;
- exports.BlobBuilder = window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder || window.BlobBuilder;
- function BufferBuilder(){
- this._pieces = [];
- this._parts = [];
- }
- BufferBuilder.prototype.append = function(data) {
- if(typeof data === 'number') {
- this._pieces.push(data);
- } else {
- this._flush();
- this._parts.push(data);
- }
- };
- BufferBuilder.prototype._flush = function() {
- if (this._pieces.length > 0) {
- var buf = new Uint8Array(this._pieces);
- if(!binaryFeatures.useArrayBufferView) {
- buf = buf.buffer;
- }
- this._parts.push(buf);
- this._pieces = [];
- }
- };
- BufferBuilder.prototype.getBuffer = function() {
- this._flush();
- if(binaryFeatures.useBlobBuilder) {
- var builder = new BlobBuilder();
- for(var i = 0, ii = this._parts.length; i < ii; i++) {
- builder.append(this._parts[i]);
- }
- return builder.getBlob();
- } else {
- return new Blob(this._parts);
- }
- };
|