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