This repository was archived by the owner on Apr 20, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 99
/
Copy pathfromreader.js
101 lines (89 loc) · 4.02 KB
/
fromreader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
var FromReaderObservable = (function (__super__) {
inherits(FromReaderObservable, __super__);
function FromReaderObservable(readerFn, file, progressObserver, encoding) {
this._readerFn = readerFn;
this._file = file;
this._progressObserver = progressObserver;
this._encoding = encoding;
__super__.call(this);
}
function createLoadHandler(o, p) {
return function loadHandler(e) {
p && p.onCompleted();
o.onNext(e.target.result);
o.onCompleted();
};
}
function createErrorHandler(o) { return function errorHandler (e) { o.onError(e.target.error); }; }
function createProgressHandler(o) { return function progressHandler (e) { o.onNext(e); }; }
function FromReaderDisposable(reader, progressObserver, loadHandler, errorHandler, progressHandler) {
this._r = reader;
this._po = progressObserver;
this._lFn = loadHandler;
this._eFn = errorHandler;
this._pFn = progressHandler;
this.isDisposed = false;
}
FromReaderDisposable.prototype.dispose = function () {
if (!this.isDisposed) {
this.isDisposed = true;
this._r.readyState === root.FileReader.LOADING && this._r.abort();
this._r.removeEventListener('load', this._lFn, false);
this._r.removeEventListener('error', this._eFn, false);
this._po && this._r.removeEventListener('progress', this._pFn, false);
}
};
FromReaderObservable.prototype.subscribeCore = function (o) {
var reader = new root.FileReader();
var loadHandler = createLoadHandler(o, this._progressObserver);
var errorHandler = createErrorHandler(o);
var progressHandler = createProgressHandler(this._progressObserver);
reader.addEventListener('load', loadHandler, false);
reader.addEventListener('error', errorHandler, false);
this._progressObserver && reader.addEventListener('progress', progressHandler, false);
reader[this._readerFn](this._file, this._encoding);
return new FromReaderDisposable(reader, this._progressObserver, loadHandler, errorHandler, progressHandler);
};
return FromReaderObservable;
}(ObservableBase));
/**
* The FileReader object lets web applications asynchronously read the contents of
* files (or raw data buffers) stored on the user's computer, using File or Blob objects
* to specify the file or data to read as an observable sequence.
* @param {String} file The file to read.
* @param {Observer} An observer to watch for progress.
* @returns {Object} An object which contains methods for reading the data.
*/
dom.fromReader = function(file, progressObserver) {
if (!root.FileReader) { throw new TypeError('FileReader not implemented in your runtime.'); }
return {
/**
* This method is used to read the file as an ArrayBuffer as an Observable stream.
* @returns {Observable} An observable stream of an ArrayBuffer
*/
asArrayBuffer : function() {
return new FromReaderObservable('readAsArrayBuffer', file, progressObserver);
},
/**
* This method is used to read the file as a binary data string as an Observable stream.
* @returns {Observable} An observable stream of a binary data string.
*/
asBinaryString : function() {
return new FromReaderObservable('readAsBinaryString', file, progressObserver);
},
/**
* This method is used to read the file as a URL of the file's data as an Observable stream.
* @returns {Observable} An observable stream of a URL representing the file's data.
*/
asDataURL : function() {
return new FromReaderObservable('readAsDataURL', file, progressObserver);
},
/**
* This method is used to read the file as a string as an Observable stream.
* @returns {Observable} An observable stream of the string contents of the file.
*/
asText : function(encoding) {
return new FromReaderObservable('readAsText', file, progressObserver, encoding);
}
};
};