UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

261 lines (260 loc) 17.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { AsiFileService } from './../../services/asi-file.service'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { DefaultControlValueAccessor } from './../common/default-control-value-accessor'; import { Component, Input, EventEmitter, Output, forwardRef, ViewChild, Renderer2, ElementRef } from '@angular/core'; var AsiImageChooserComponent = /** @class */ (function (_super) { tslib_1.__extends(AsiImageChooserComponent, _super); function AsiImageChooserComponent(fileService, renderer, elementRef) { var _this = _super.call(this) || this; _this.fileService = fileService; _this.renderer = renderer; _this.elementRef = elementRef; /** * Label position */ _this.labelPosition = 'top'; /** * Icon to display when empty */ _this.icon = 'far fa-image'; /** * Event emitted when an image is selected */ _this.onImageSelected = new EventEmitter(); _this.dragging = false; _this.loaded = false; _this.imageLoaded = false; _this.init = false; return _this; } /** * @return {?} */ AsiImageChooserComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); }; /** * @return {?} */ AsiImageChooserComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; if (this.imageSrc != null) { this.fileService.getBlobImage(this.imageSrc).subscribe(function (blob) { _this.fileService.blobToBase64(blob, true).subscribe(function (base64) { _this.image64 = base64; }); /** @type {?} */ var imageName = _this.imageSrc.split('/').pop(); _this.value = new Blob([blob], { type: blob.type }); _this.value.name = imageName; _this.init = true; }); } else { this.init = true; } }; /** * @return {?} */ AsiImageChooserComponent.prototype.openFileInput = /** * @return {?} */ function () { this.fileInput.nativeElement.click(); }; /** * @return {?} */ AsiImageChooserComponent.prototype.handleDragEnter = /** * @return {?} */ function () { this.dragging = true; }; /** * @return {?} */ AsiImageChooserComponent.prototype.handleDragLeave = /** * @return {?} */ function () { this.dragging = false; }; /** * @param {?} e * @return {?} */ AsiImageChooserComponent.prototype.handleDrop = /** * @param {?} e * @return {?} */ function (e) { e.preventDefault(); this.dragging = false; this.handleInputChange(e); }; /** * @return {?} */ AsiImageChooserComponent.prototype.handleImageLoad = /** * @return {?} */ function () { this.imageLoaded = true; }; /** * @param {?} event * @return {?} */ AsiImageChooserComponent.prototype.handleInputChange = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var imageFile = event.dataTransfer ? event.dataTransfer.files[0] : event.target.files[0]; /** @type {?} */ var reader = new FileReader(); this.loaded = false; this.imageFile = imageFile; reader.onload = this._handleReaderLoaded.bind(this); reader.readAsDataURL(imageFile); }; /** * @param {?} event * @return {?} */ AsiImageChooserComponent.prototype._handleReaderLoaded = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var reader = event.target; this.image64 = reader.result; this.onImageSelected.emit(this.imageFile); this.loaded = true; this.value = this.imageFile; }; /** * @param {?} value * @return {?} */ AsiImageChooserComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { this._value = value; if (value == null && this.init) { this.imageSrc = null; this.image64 = null; } }; AsiImageChooserComponent.decorators = [ { type: Component, args: [{ selector: 'asi-image-chooser', host: { 'class': 'asi-component asi-image-chooser' }, template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n\n<label class=\"asi-image-chooser-container\" ondragover=\"return false;\" [class.loaded]=\"loaded\" (dragenter)=\"handleDragEnter()\" (dragleave)=\"handleDragLeave()\"\n (drop)=\"handleDrop($event)\">\n <img *ngIf=\"image64 != null\" [src]=\"image64\" (load)=\"handleImageLoad()\" [class.loaded]=\"imageLoaded\" />\n <input #asiFileInput type=\"file\" [disabled]=\"disabled\" [attr.id]=\"id\" [attr.name]=\"name\" accept=\"image/*\" (change)=\"handleInputChange($event)\">\n <asi-fa-icon *ngIf=\"image64 == null\" (onClick)=\"openFileInput()\" class=\"asi-focus-error\" [icon]=\"icon\" size=\"2x\"></asi-fa-icon>\n</label>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return AsiImageChooserComponent; }), multi: true } ] }] } ]; /** @nocollapse */ AsiImageChooserComponent.ctorParameters = function () { return [ { type: AsiFileService }, { type: Renderer2 }, { type: ElementRef } ]; }; AsiImageChooserComponent.propDecorators = { id: [{ type: Input }], name: [{ type: Input }], label: [{ type: Input }], labelPosition: [{ type: Input }], imageSrc: [{ type: Input }], image64: [{ type: Input }], icon: [{ type: Input }], onImageSelected: [{ type: Output }], fileInput: [{ type: ViewChild, args: ['asiFileInput',] }] }; return AsiImageChooserComponent; }(DefaultControlValueAccessor)); export { AsiImageChooserComponent }; if (false) { /** * html id * @type {?} */ AsiImageChooserComponent.prototype.id; /** * html name * @type {?} */ AsiImageChooserComponent.prototype.name; /** * Label to display (is translated) * @type {?} */ AsiImageChooserComponent.prototype.label; /** * Label position * @type {?} */ AsiImageChooserComponent.prototype.labelPosition; /** * Init the image chooser with an url * @type {?} */ AsiImageChooserComponent.prototype.imageSrc; /** * Init the image chooser with a base64 * @type {?} */ AsiImageChooserComponent.prototype.image64; /** * Icon to display when empty * @type {?} */ AsiImageChooserComponent.prototype.icon; /** * Event emitted when an image is selected * @type {?} */ AsiImageChooserComponent.prototype.onImageSelected; /** @type {?} */ AsiImageChooserComponent.prototype.fileInput; /** @type {?} */ AsiImageChooserComponent.prototype.dragging; /** @type {?} */ AsiImageChooserComponent.prototype.loaded; /** @type {?} */ AsiImageChooserComponent.prototype.imageLoaded; /** @type {?} */ AsiImageChooserComponent.prototype.imageFile; /** @type {?} */ AsiImageChooserComponent.prototype.init; /** @type {?} */ AsiImageChooserComponent.prototype.fileService; /** @type {?} */ AsiImageChooserComponent.prototype.renderer; /** @type {?} */ AsiImageChooserComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWltYWdlLWNob29zZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1pbWFnZS1jaG9vc2VyL2FzaS1pbWFnZS1jaG9vc2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQWlCLE1BQU0sRUFDckQsVUFBVSxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUNyRCxNQUFNLGVBQWUsQ0FBQzs7SUFjdUIsb0RBQTJCO0lBZ0N2RSxrQ0FBb0IsV0FBMkIsRUFBVSxRQUFtQixFQUNsRTtRQURWLFlBRUUsaUJBQU8sU0FDUjtRQUhtQixpQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxjQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ2xFLGdCQUFVLEdBQVYsVUFBVTs7Ozs4QkF2QjJFLEtBQUs7Ozs7cUJBUXBGLGNBQWM7Ozs7Z0NBR0YsSUFBSSxZQUFZLEVBQVE7eUJBSXpDLEtBQUs7dUJBQ1AsS0FBSzs0QkFDQSxLQUFLO3FCQUdaLEtBQUs7O0tBS1g7Ozs7SUFFRCwyQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ3RGOzs7O0lBRUQsa0RBQWU7OztJQUFmO1FBQUEsaUJBY0M7UUFiQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUks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QUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7S0FDRjs7Z0JBcEhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUU7b0JBQ3BELDh0QkFBaUQ7b0JBQ2pELFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLGNBQU0sT0FBQSx3QkFBd0IsRUFBeEIsQ0FBd0IsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBbkJRLGNBQWM7Z0JBS1UsU0FBUztnQkFBRSxVQUFVOzs7cUJBa0JuRCxLQUFLO3VCQUVMLEtBQUs7d0JBR0wsS0FBSztnQ0FFTCxLQUFLOzJCQUdMLEtBQUs7MEJBRUwsS0FBSzt1QkFHTCxLQUFLO2tDQUdMLE1BQU07NEJBRU4sU0FBUyxTQUFDLGNBQWM7O21DQTNDM0I7RUFvQjhDLDJCQUEyQjtTQUE1RCx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2lGaWxlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvYXNpLWZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsIElucHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQsIE91dHB1dCxcbiAgZm9yd2FyZFJlZiwgVmlld0NoaWxkLCBPbkluaXQsIFJlbmRlcmVyMiwgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXNpLWltYWdlLWNob29zZXInLFxuICBob3N0OiB7ICdjbGFzcyc6ICdhc2ktY29tcG9uZW50IGFzaS1pbWFnZS1jaG9vc2VyJyB9LFxuICB0ZW1wbGF0ZVVybDogJy4vYXNpLWltYWdlLWNob29zZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFzaUltYWdlQ2hvb3NlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBc2lJbWFnZUNob29zZXJDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0Q29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuXG4gIC8qKiBodG1sIGlkICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIC8qKiBodG1sIG5hbWUgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKiBMYWJlbCB0byBkaXNwbGF5IChpcyB0cmFuc2xhdGVkKSAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICAvKiogTGFiZWwgcG9zaXRpb24gKi9cbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogJ3RvcCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnYm90dG9tLWNlbnRlcicgfCAndG9wLWNlbnRlcicgPSAndG9wJztcblxuICAvKiogSW5pdCB0aGUgaW1hZ2UgY2hvb3NlciB3aXRoIGFuIHVybCAqL1xuICBASW5wdXQoKSBpbWFnZVNyYzogc3RyaW5nO1xuICAvKiogSW5pdCB0aGUgaW1hZ2UgY2hvb3NlciB3aXRoIGEgYmFzZTY0ICovXG4gIEBJbnB1dCgpIGltYWdlNjQ6IHN0cmluZztcblxuICAvKiogSWNvbiB0byBkaXNwbGF5IHdoZW4gZW1wdHkgKi9cbiAgQElucHV0KCkgaWNvbiA9ICdmYXIgZmEtaW1hZ2UnO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gaW1hZ2UgaXMgc2VsZWN0ZWQgKi9cbiAgQE91dHB1dCgpIG9uSW1hZ2VTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICBAVmlld0NoaWxkKCdhc2lGaWxlSW5wdXQnKSBmaWxlSW5wdXQ6IGFueTtcblxuICBkcmFnZ2luZyA9IGZhbHNlO1xuICBsb2FkZWQgPSBmYWxzZTtcbiAgaW1hZ2VMb2FkZWQgPSBmYWxzZTtcbiAgaW1hZ2VGaWxlOiBGaWxlO1xuXG4gIGluaXQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbGVTZXJ2aWNlOiBBc2lGaWxlU2VydmljZSwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbGFiZWwtJyArIHRoaXMubGFiZWxQb3NpdGlvbik7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VTcmMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5maWxlU2VydmljZS5nZXRCbG9iSW1hZ2UodGhpcy5pbWFnZVNyYykuc3Vic2NyaWJlKGJsb2IgPT4ge1xuICAgICAgICB0aGlzLmZpbGVTZXJ2aWNlLmJsb2JUb0Jhc2U2NChibG9iLCB0cnVlKS5zdWJzY3JpYmUoKGJhc2U2NCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW1hZ2U2NCA9IGJhc2U2NDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGltYWdlTmFtZSA9IHRoaXMuaW1hZ2VTcmMuc3BsaXQoJy8nKS5wb3AoKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBCbG9iKFtibG9iXSwgeyB0eXBlOiBibG9iLnR5cGUgfSk7XG4gICAgICAgIHRoaXMudmFsdWUubmFtZSA9IGltYWdlTmFtZTtcbiAgICAgICAgdGhpcy5pbml0ID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5GaWxlSW5wdXQoKSB7XG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgaGFuZGxlRHJhZ0VudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICB9XG5cbiAgaGFuZGxlRHJhZ0xlYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZURyb3AoZTogRXZlbnQpOiB2b2lkIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoZSk7XG4gIH1cblxuICBoYW5kbGVJbWFnZUxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbWFnZUxvYWRlZCA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgaW1hZ2VGaWxlID0gZXZlbnQuZGF0YVRyYW5zZmVyID8gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzWzBdIDogZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW1hZ2VGaWxlID0gaW1hZ2VGaWxlO1xuICAgIHJlYWRlci5vbmxvYWQgPSB0aGlzLl9oYW5kbGVSZWFkZXJMb2FkZWQuYmluZCh0aGlzKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbWFnZUZpbGUpO1xuICB9XG5cbiAgX2hhbmRsZVJlYWRlckxvYWRlZChldmVudDogYW55KSB7XG4gICAgY29uc3QgcmVhZGVyID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuaW1hZ2U2NCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgdGhpcy5vbkltYWdlU2VsZWN0ZWQuZW1pdCh0aGlzLmltYWdlRmlsZSk7XG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW1hZ2VGaWxlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiB0aGlzLmluaXQpIHtcbiAgICAgIHRoaXMuaW1hZ2VTcmMgPSBudWxsO1xuICAgICAgdGhpcy5pbWFnZTY0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==