UNPKG

fctrlx-angular-file-reader

Version:

Angular library that helps convert file (from input[type=file]) to base64/arrayBuffer/text using FileReader API.

210 lines 13.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var Base = /** @class */ (function () { function Base(name, element) { this.TYPE_FILE = 'file'; this.converted = []; this.currentIndex = 0; this.directiveName = name; this.element = element; } /** * @return {?} */ Base.prototype.ngOnInit = /** * @return {?} */ function () { if (this.type === this.TYPE_FILE && this.isSupported) { this.element.nativeElement.addEventListener('change', this.filesChanged.bind(this), false); } else { /** @type {?} */ var msg = this.directiveName; if (!this.isSupported) { msg += ' is not supported by your browser.'; } else { msg += ' working only with input type=file.'; } console.warn(msg, this.element.nativeElement); } }; /** * @param {?} event * @param {?} readerHandleFn * @param {?} saveKey * @return {?} */ Base.prototype.filesChanged = /** * @param {?} event * @param {?} readerHandleFn * @param {?} saveKey * @return {?} */ function (event, readerHandleFn, saveKey) { var _this = this; /** @type {?} */ var files = ((/** @type {?} */ (event.target))).files; this.converted = []; this.currentIndex = 0; Object.keys(files).forEach((/** * @param {?} key * @return {?} */ function (key) { /** @type {?} */ var reader = new FileReader(); var _a = files[key], name = _a.name, size = _a.size, type = _a.type; reader.onloadend = (/** * @param {?} file * @return {?} */ function (file) { _this.store(file, saveKey); }); reader.onerror = (/** * @param {?} event * @return {?} */ function (event) { _this.handleError(event); }); reader.onprogress = (/** * @param {?} event * @return {?} */ function (event) { _this.handleProgress(event); }); reader.onabort = (/** * @return {?} */ function () { return _this.handleAbort(); }); _this.converted.push({ name: name, size: size, type: type }); reader[readerHandleFn](files[key]); })); this.filesChange.next(this.isMultiple ? this.converted : this.converted[0]); }; /** * @param {?} event * @return {?} */ Base.prototype.handleError = /** * @param {?} event * @return {?} */ function (event) { this.onError.next(event.target.error.message || 'Something went wrong'); }; /** * @param {?} event * @return {?} */ Base.prototype.handleProgress = /** * @param {?} event * @return {?} */ function (event) { if (event.lengthComputable) { this.onProgress.next(Math.round((event.loaded / event.total) * 100)); } }; /** * @return {?} */ Base.prototype.handleAbort = /** * @return {?} */ function () { this.onAbort.next('read cancelled'); }; /** * @param {?} file * @param {?} key * @return {?} */ Base.prototype.store = /** * @param {?} file * @param {?} key * @return {?} */ function (file, key) { this.converted[this.currentIndex][key] = file.target.result; this.currentIndex = this.currentIndex + 1; }; /** * @return {?} */ Base.prototype.ngOnDestroy = /** * @return {?} */ function () { this.element.nativeElement.removeEventListener('change', this.filesChanged.bind(this), false); }; Object.defineProperty(Base.prototype, "isSupported", { get: /** * @return {?} */ function () { return !!(((/** @type {?} */ (window))).File && ((/** @type {?} */ (window))).FileReader && ((/** @type {?} */ (window))).FileList && window.Blob); }, enumerable: true, configurable: true }); Object.defineProperty(Base.prototype, "isMultiple", { get: /** * @return {?} */ function () { return !(typeof this.multiple === 'undefined'); }, enumerable: true, configurable: true }); return Base; }()); export { Base }; if (false) { /** @type {?} */ Base.prototype.type; /** @type {?} */ Base.prototype.multiple; /** @type {?} */ Base.prototype.filesChange; /** @type {?} */ Base.prototype.onProgress; /** @type {?} */ Base.prototype.onError; /** @type {?} */ Base.prototype.onAbort; /** * @type {?} * @private */ Base.prototype.TYPE_FILE; /** * @type {?} * @private */ Base.prototype.directiveName; /** * @type {?} * @private */ Base.prototype.element; /** * @type {?} * @private */ Base.prototype.converted; /** * @type {?} * @private */ Base.prototype.currentIndex; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2ZjdHJseC1hbmd1bGFyLWZpbGUtcmVhZGVyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBUUE7SUFlRSxjQUFZLElBQVksRUFBRSxPQUFtQjtRQVA1QixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBSXBDLGNBQVMsR0FBaUIsRUFBRSxDQUFDO1FBQzdCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBRy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7Ozs7SUFFRCx1QkFBUTs7O0lBQVI7UUFDRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1RjthQUFNOztnQkFDRCxHQUFHLEdBQVcsSUFBSSxDQUFDLGFBQWE7WUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JCLEdBQUcsSUFBSSxvQ0FBb0MsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxHQUFHLElBQUkscUNBQXFDLENBQUM7YUFDOUM7WUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7Ozs7OztJQUVELDJCQUFZOzs7Ozs7SUFBWixVQUFhLEtBQVksRUFBRSxjQUFzQixFQUFFLE9BQWU7UUFBbEUsaUJBOEJDOztZQTdCTyxLQUFLLEdBQUcsQ0FBQyxtQkFBa0IsS0FBSyxDQUFDLE1BQU0s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QUEsTUFBTSxFQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBQSxNQUFNLEVBQU8sQ0FBQyxDQUFDLFVBQVU7Z0JBQ2xELENBQUMsbUJBQUEsTUFBTSxFQUFPLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUM7OztPQUFBO0lBRUQsc0JBQUksNEJBQVU7Ozs7UUFBZDtZQUNFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQztRQUNqRCxDQUFDOzs7T0FBQTtJQUNILFdBQUM7QUFBRCxDQUFDLEFBbkdELElBbUdDOzs7O0lBbEdDLG9CQUFvQjs7SUFDcEIsd0JBQXFEOztJQUNyRCwyQkFBc0M7O0lBQ3RDLDBCQUFxQzs7SUFDckMsdUJBQWtDOztJQUNsQyx1QkFBa0M7Ozs7O0lBRWxDLHlCQUE0Qzs7Ozs7SUFDNUMsNkJBQXVDOzs7OztJQUV2Qyx1QkFBNEI7Ozs7O0lBQzVCLHlCQUFxQzs7Ozs7SUFDckMsNEJBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb252ZXJ0ZWQgfSBmcm9tICcuLi9tb2RlbHMvY29udmVydGVkJztcblxuZXhwb3J0IGNsYXNzIEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBtdWx0aXBsZTogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyB8IGJvb2xlYW47XG4gIHB1YmxpYyBmaWxlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIHB1YmxpYyBvblByb2dyZXNzOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgcHVibGljIG9uRXJyb3I6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBwdWJsaWMgb25BYm9ydDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBUWVBFX0ZJTEU6IHN0cmluZyA9ICdmaWxlJztcbiAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RpdmVOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGNvbnZlcnRlZDogQ29udmVydGVkW10gID0gW107XG4gIHByaXZhdGUgY3VycmVudEluZGV4OiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZGlyZWN0aXZlTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHRoaXMuVFlQRV9GSUxFICYmIHRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuZmlsZXNDaGFuZ2VkLmJpbmQodGhpcyksIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1zZzogc3RyaW5nID0gdGhpcy5kaXJlY3RpdmVOYW1lO1xuXG4gICAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgbXNnICs9ICcgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIuJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyArPSAnIHdvcmtpbmcgb25seSB3aXRoIGlucHV0IHR5cGU9ZmlsZS4nO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLndhcm4obXNnLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgZmlsZXNDaGFuZ2VkKGV2ZW50OiBFdmVudCwgcmVhZGVySGFuZGxlRm46IHN0cmluZywgc2F2ZUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZXMgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5maWxlcztcblxuICAgIHRoaXMuY29udmVydGVkID0gW107XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuXG4gICAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgY29uc3QgeyBuYW1lLCBzaXplLCB0eXBlIH0gPSBmaWxlc1trZXldO1xuXG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKGZpbGUpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZShmaWxlLCBzYXZlS2V5KTtcbiAgICAgIH07XG5cbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgcmVhZGVyLm9ucHJvZ3Jlc3MgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVQcm9ncmVzcyhldmVudCk7XG4gICAgICB9O1xuXG4gICAgICByZWFkZXIub25hYm9ydCA9ICgpID0+IHRoaXMuaGFuZGxlQWJvcnQoKTtcblxuICAgICAgdGhpcy5jb252ZXJ0ZWQucHVzaCh7IG5hbWUsIHNpemUsIHR5cGUgfSk7XG5cbiAgICAgIHJlYWRlcltyZWFkZXJIYW5kbGVGbl0oZmlsZXNba2V5XSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbGVzQ2hhbmdlLm5leHQodGhpcy5pc011bHRpcGxlID8gdGhpcy5jb252ZXJ0ZWQgOiB0aGlzLmNvbnZlcnRlZFswXSk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkVycm9yLm5leHQoZXZlbnQudGFyZ2V0LmVycm9yLm1lc3NhZ2UgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gIH1cblxuICBoYW5kbGVQcm9ncmVzcyhldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcy5uZXh0KE1hdGgucm91bmQoKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqIDEwMCkpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFib3J0KCk6IHZvaWQge1xuICAgIHRoaXMub25BYm9ydC5uZXh0KCdyZWFkIGNhbmNlbGxlZCcpO1xuICB9XG5cbiAgc3RvcmUoZmlsZTogeyB0YXJnZXQgfSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnZlcnRlZFt0aGlzLmN1cnJlbnRJbmRleF1ba2V5XSA9IGZpbGUudGFyZ2V0LnJlc3VsdDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMuY3VycmVudEluZGV4ICsgMTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuZmlsZXNDaGFuZ2VkLmJpbmQodGhpcyksIGZhbHNlKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoKHdpbmRvdyBhcyBhbnkpLkZpbGUgJiYgKHdpbmRvdyBhcyBhbnkpLkZpbGVSZWFkZXIgJiZcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBhbnkpLkZpbGVMaXN0ICYmIHdpbmRvdy5CbG9iKTtcbiAgfVxuXG4gIGdldCBpc011bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiB0aGlzLm11bHRpcGxlID09PSAndW5kZWZpbmVkJyk7XG4gIH1cbn1cbiJdfQ==