1 | void function (Sink) {
|
---|
2 |
|
---|
3 | var _Blob, _BlobBuilder, _URL, _btoa;
|
---|
4 |
|
---|
5 | void function (prefixes, urlPrefixes) {
|
---|
6 | function find (name, prefixes) {
|
---|
7 | var b, a = prefixes.slice();
|
---|
8 |
|
---|
9 | for (b=a.shift(); typeof b !== 'undefined'; b=a.shift()) {
|
---|
10 | b = Function('return typeof ' + b + name +
|
---|
11 | '=== "undefined" ? undefined : ' +
|
---|
12 | b + name)();
|
---|
13 |
|
---|
14 | if (b) return b;
|
---|
15 | }
|
---|
16 | }
|
---|
17 |
|
---|
18 | _Blob = find('Blob', prefixes);
|
---|
19 | _BlobBuilder = find('BlobBuilder', prefixes);
|
---|
20 | _URL = find('URL', urlPrefixes);
|
---|
21 | _btoa = find('btoa', ['']);
|
---|
22 | }([
|
---|
23 | '',
|
---|
24 | 'Moz',
|
---|
25 | 'WebKit',
|
---|
26 | 'MS'
|
---|
27 | ], [
|
---|
28 | '',
|
---|
29 | 'webkit'
|
---|
30 | ]);
|
---|
31 |
|
---|
32 | var createBlob = _Blob && _URL && function (content, type) {
|
---|
33 | return _URL.createObjectURL(new _Blob([content], { type: type }));
|
---|
34 | };
|
---|
35 |
|
---|
36 | var createBlobBuilder = _BlobBuilder && _URL && function (content, type) {
|
---|
37 | var bb = new _BlobBuilder();
|
---|
38 | bb.append(content);
|
---|
39 |
|
---|
40 | return _URL.createObjectURL(bb.getBlob(type));
|
---|
41 | };
|
---|
42 |
|
---|
43 | var createData = _btoa && function (content, type) {
|
---|
44 | return 'data:' + type + ';base64,' + _btoa(content);
|
---|
45 | };
|
---|
46 |
|
---|
47 | var createDynURL =
|
---|
48 | createBlob ||
|
---|
49 | createBlobBuilder ||
|
---|
50 | createData;
|
---|
51 |
|
---|
52 | if (!createDynURL) return;
|
---|
53 |
|
---|
54 | if (createBlob) createDynURL.createBlob = createBlob;
|
---|
55 | if (createBlobBuilder) createDynURL.createBlobBuilder = createBlobBuilder;
|
---|
56 | if (createData) createDynURL.createData = createData;
|
---|
57 |
|
---|
58 | if (_Blob) createDynURL.Blob = _Blob;
|
---|
59 | if (_BlobBuilder) createDynURL.BlobBuilder = _BlobBuilder;
|
---|
60 | if (_URL) createDynURL.URL = _URL;
|
---|
61 |
|
---|
62 | Sink.createDynURL = createDynURL;
|
---|
63 |
|
---|
64 | Sink.revokeDynURL = function (url) {
|
---|
65 | if (typeof url === 'string' && url.indexOf('data:') === 0) {
|
---|
66 | return false;
|
---|
67 | } else {
|
---|
68 | return _URL.revokeObjectURL(url);
|
---|
69 | }
|
---|
70 | };
|
---|
71 |
|
---|
72 | }(this.Sink);
|
---|