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
JavaScript
/**
* @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==