root / HServer / 00.Server / 00.Program / node_modules / blob / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.15 KB)
1 | 39 | HKM | /**
|
---|---|---|---|
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 | })(); |