root / HServer / 00.Server / 00.Program / node_modules / blob / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.15 KB)
1 |
/**
|
---|---|
2 |
* Create a blob builder even when vendor prefixes exist
|
3 |
*/
|
4 |
|
5 |
var BlobBuilder = global.BlobBuilder
|
6 |
|| global.WebKitBlobBuilder |
7 |
|| global.MSBlobBuilder |
8 |
|| global.MozBlobBuilder; |
9 |
|
10 |
/**
|
11 |
* Check if Blob constructor is supported
|
12 |
*/
|
13 |
|
14 |
var blobSupported = (function() { |
15 |
try {
|
16 |
var a = new Blob(['hi']); |
17 |
return a.size === 2; |
18 |
} catch(e) {
|
19 |
return false; |
20 |
} |
21 |
})(); |
22 |
|
23 |
/**
|
24 |
* Check if Blob constructor supports ArrayBufferViews
|
25 |
* Fails in Safari 6, so we need to map to ArrayBuffers there.
|
26 |
*/
|
27 |
|
28 |
var blobSupportsArrayBufferView = blobSupported && (function() { |
29 |
try {
|
30 |
var b = new Blob([new Uint8Array([1,2])]); |
31 |
return b.size === 2; |
32 |
} catch(e) {
|
33 |
return false; |
34 |
} |
35 |
})(); |
36 |
|
37 |
/**
|
38 |
* Check if BlobBuilder is supported
|
39 |
*/
|
40 |
|
41 |
var blobBuilderSupported = BlobBuilder
|
42 |
&& BlobBuilder.prototype.append |
43 |
&& BlobBuilder.prototype.getBlob; |
44 |
|
45 |
/**
|
46 |
* Helper function that maps ArrayBufferViews to ArrayBuffers
|
47 |
* Used by BlobBuilder constructor and old browsers that didn't
|
48 |
* support it in the Blob constructor.
|
49 |
*/
|
50 |
|
51 |
function mapArrayBufferViews(ary) { |
52 |
for (var i = 0; i < ary.length; i++) { |
53 |
var chunk = ary[i];
|
54 |
if (chunk.buffer instanceof ArrayBuffer) { |
55 |
var buf = chunk.buffer;
|
56 |
|
57 |
// if this is a subarray, make a copy so we only
|
58 |
// include the subarray region from the underlying buffer
|
59 |
if (chunk.byteLength !== buf.byteLength) {
|
60 |
var copy = new Uint8Array(chunk.byteLength); |
61 |
copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));
|
62 |
buf = copy.buffer; |
63 |
} |
64 |
|
65 |
ary[i] = buf; |
66 |
} |
67 |
} |
68 |
} |
69 |
|
70 |
function BlobBuilderConstructor(ary, options) { |
71 |
options = options || {}; |
72 |
|
73 |
var bb = new BlobBuilder(); |
74 |
mapArrayBufferViews(ary); |
75 |
|
76 |
for (var i = 0; i < ary.length; i++) { |
77 |
bb.append(ary[i]); |
78 |
} |
79 |
|
80 |
return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
|
81 |
}; |
82 |
|
83 |
function BlobConstructor(ary, options) { |
84 |
mapArrayBufferViews(ary); |
85 |
return new Blob(ary, options || {}); |
86 |
}; |
87 |
|
88 |
module.exports = (function() {
|
89 |
if (blobSupported) {
|
90 |
return blobSupportsArrayBufferView ? global.Blob : BlobConstructor;
|
91 |
} else if (blobBuilderSupported) { |
92 |
return BlobBuilderConstructor;
|
93 |
} else {
|
94 |
return undefined; |
95 |
} |
96 |
})(); |