UNPKG

@asi-ngtools/lib

Version:

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

177 lines (176 loc) 12.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { DefaultControlValueAccessor } from './../common/default-control-value-accessor'; import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms'; import { Component, forwardRef, Input, ElementRef, ViewChild, Renderer2 } from '@angular/core'; import * as nh from '../../native-helper'; export class AsiTextareaComponent extends DefaultControlValueAccessor { /** * @param {?} renderer * @param {?} elementRef */ constructor(renderer, elementRef) { super(); this.renderer = renderer; this.elementRef = elementRef; /** * Label position */ this.labelPosition = 'top'; /** * Placeholder to display (is translated) */ this.placeholder = ''; /** * number of rows to display */ this.rows = 2; /** * number of cols */ this.cols = 100; /** * max length of the text */ this.maxlength = -1; this.textareaControl = new FormControl(); } /** * @return {?} */ ngOnInit() { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); } /** * @return {?} */ ngAfterViewInit() { this.textareaControl.valueChanges.subscribe((value) => { if (value === '') { this.value = null; } else if (this.isValide(value)) { this.value = value; } else if (this.maxlength !== -1 && value.length > this.maxlength) { // si la taille n'est pas respectée on coupe this.value = value.substr(0, this.maxlength); } this.textareaElm.nativeElement.value = this._value || ''; }); } /** * @param {?} value * @return {?} */ isValide(value) { return value == null || ((this.maxlength === -1 || value.length <= this.maxlength) && (this.pattern == null || this.pattern.test(value))); } /** * @param {?} value * @return {?} */ writeValue(value) { if (this.isValide(value)) { this.textareaControl.setValue(value, { emitEvent: false }); } else if (this.maxlength !== -1 && value.length > this.maxlength) { // Length incorrect on truncate this.textareaControl.setValue(nh.truncate(value, this.maxlength), { emitEvent: false }); } else { // Pattern incorrect this.textareaElm.nativeElement.value = 'Incorrect value'; } } } AsiTextareaComponent.decorators = [ { type: Component, args: [{ selector: 'asi-textarea', host: { 'class': 'asi-component asi-textarea' }, template: "<label class=\"input-label\" *ngIf=\"label != null\">{{label | translate}}</label>\n<textarea #textarea\n[attr.id]=\"id\"\n[attr.name]=\"name\"\n[attr.rows]=\"rows\"\n[attr.cols]=\"cols\"\nclass=\"asi-focus-error\"\n[attr.disabled]=\"disabled ? '' : null\"\n[placeholder]=\"placeholder\"\n[formControl]=\"textareaControl\"></textarea>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AsiTextareaComponent), multi: true } ] }] } ]; /** @nocollapse */ AsiTextareaComponent.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; AsiTextareaComponent.propDecorators = { id: [{ type: Input }], name: [{ type: Input }], label: [{ type: Input }], labelPosition: [{ type: Input }], placeholder: [{ type: Input }], rows: [{ type: Input }], cols: [{ type: Input }], maxlength: [{ type: Input }], pattern: [{ type: Input }], textareaElm: [{ type: ViewChild, args: ['textarea',] }] }; if (false) { /** * html id * @type {?} */ AsiTextareaComponent.prototype.id; /** * html name * @type {?} */ AsiTextareaComponent.prototype.name; /** * Label to display (is translated) * @type {?} */ AsiTextareaComponent.prototype.label; /** * Label position * @type {?} */ AsiTextareaComponent.prototype.labelPosition; /** * Placeholder to display (is translated) * @type {?} */ AsiTextareaComponent.prototype.placeholder; /** * number of rows to display * @type {?} */ AsiTextareaComponent.prototype.rows; /** * number of cols * @type {?} */ AsiTextareaComponent.prototype.cols; /** * max length of the text * @type {?} */ AsiTextareaComponent.prototype.maxlength; /** * Allow you to define a regex that the input must respect * @type {?} */ AsiTextareaComponent.prototype.pattern; /** @type {?} */ AsiTextareaComponent.prototype.textareaControl; /** @type {?} */ AsiTextareaComponent.prototype.textareaElm; /** @type {?} */ AsiTextareaComponent.prototype.renderer; /** @type {?} */ AsiTextareaComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhc2ktbmd0b29scy9saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hc2ktdGV4dGFyZWEvYXNpLXRleHRhcmVhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUF5QixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWMxQyxNQUFNLDJCQUE0QixTQUFRLDJCQUEyQjs7Ozs7SUE2Qm5FLFlBQW9CLFFBQW1CLEVBQzdCO1FBQ1IsS0FBSyxFQUFFLENBQUM7UUFGVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQzdCLGVBQVUsR0FBVixVQUFVOzs7OzZCQXJCMkUsS0FBSzs7OzsyQkFFN0UsRUFBRTs7OztvQkFHVCxDQUFDOzs7O29CQUdELEdBQUc7Ozs7eUJBR0UsQ0FBQyxDQUFDOytCQUtMLElBQUksV0FBVyxFQUFFO0tBT2xDOzs7O0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDdEY7Ozs7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEQsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ25CO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNwQjtZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O2dCQUVsRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5QztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUMxRCxDQUFDLENBQUM7S0FDSjs7Ozs7SUFFTyxRQUFRLENBQUMsS0FBYTtRQUM1QixNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7ZUFDN0UsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Ozs7OztJQUcxRCxVQUFVLENBQUMsS0FBYTtRQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM1RDtRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O1lBRWxFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3pGO1FBQUMsSUFBSSxDQUFDLENBQUM7O1lBRU4sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDO1NBQzFEO0tBQ0Y7OztZQS9FRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRTtnQkFDL0MsNFZBQTBDO2dCQUMxQyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDbkQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7YUFDRjs7OztZQWZvRixTQUFTO1lBQXZELFVBQVU7OztpQkFtQjlDLEtBQUs7bUJBRUwsS0FBSztvQkFFTCxLQUFLOzRCQUVMLEtBQUs7MEJBRUwsS0FBSzttQkFHTCxLQUFLO21CQUdMLEtBQUs7d0JBR0wsS0FBSztzQkFHTCxLQUFLOzBCQUlMLFNBQVMsU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi8uLi9jb21tb24vZGVmYXVsdC1jb250cm9sLXZhbHVlLWFjY2Vzc29yJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgbmggZnJvbSAnLi4vLi4vbmF0aXZlLWhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FzaS10ZXh0YXJlYScsXG4gIGhvc3Q6IHsgJ2NsYXNzJzogJ2FzaS1jb21wb25lbnQgYXNpLXRleHRhcmVhJyB9LFxuICB0ZW1wbGF0ZVVybDogJ2FzaS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXNpVGV4dGFyZWFDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXNpVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0Q29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIC8qKiBodG1sIGlkICovXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIC8qKiBodG1sIG5hbWUgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICAvKiogTGFiZWwgdG8gZGlzcGxheSAoaXMgdHJhbnNsYXRlZCkgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgLyoqIExhYmVsIHBvc2l0aW9uICovXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246ICd0b3AnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2JvdHRvbS1jZW50ZXInIHwgJ3RvcC1jZW50ZXInID0gJ3RvcCc7XG4gIC8qKiBQbGFjZWhvbGRlciB0byBkaXNwbGF5IChpcyB0cmFuc2xhdGVkKSAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xuXG4gIC8qKiBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5ICovXG4gIEBJbnB1dCgpIHJvd3MgPSAyO1xuXG4gIC8qKiBudW1iZXIgb2YgY29scyAqL1xuICBASW5wdXQoKSBjb2xzID0gMTAwO1xuXG4gIC8qKiBtYXggbGVuZ3RoIG9mIHRoZSB0ZXh0ICovXG4gIEBJbnB1dCgpIG1heGxlbmd0aCA9IC0xO1xuXG4gIC8qKiBBbGxvdyB5b3UgdG8gZGVmaW5lIGEgcmVnZXggdGhhdCB0aGUgaW5wdXQgbXVzdCByZXNwZWN0ICovXG4gIEBJbnB1dCgpIHBhdHRlcm46IFJlZ0V4cDtcblxuICB0ZXh0YXJlYUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICBAVmlld0NoaWxkKCd0ZXh0YXJlYScpIHRleHRhcmVhRWxtOiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2xhYmVsLScgKyB0aGlzLmxhYmVsUG9zaXRpb24pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudGV4dGFyZWFDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVmFsaWRlKHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF4bGVuZ3RoICE9PSAtMSAmJiB2YWx1ZS5sZW5ndGggPiB0aGlzLm1heGxlbmd0aCkge1xuICAgICAgICAvLyBzaSBsYSB0YWlsbGUgbidlc3QgcGFzIHJlc3BlY3TDqWUgb24gY291cGVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCB0aGlzLm1heGxlbmd0aCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRleHRhcmVhRWxtLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZSB8fCAnJztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZGUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8ICgodGhpcy5tYXhsZW5ndGggPT09IC0xIHx8IHZhbHVlLmxlbmd0aCA8PSB0aGlzLm1heGxlbmd0aClcbiAgICAgICYmICh0aGlzLnBhdHRlcm4gPT0gbnVsbCB8fCB0aGlzLnBhdHRlcm4udGVzdCh2YWx1ZSkpKVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZGUodmFsdWUpKSB7XG4gICAgICB0aGlzLnRleHRhcmVhQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYXhsZW5ndGggIT09IC0xICYmIHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4bGVuZ3RoKSB7XG4gICAgICAvLyBMZW5ndGggaW5jb3JyZWN0IG9uIHRydW5jYXRlXG4gICAgICB0aGlzLnRleHRhcmVhQ29udHJvbC5zZXRWYWx1ZShuaC50cnVuY2F0ZSh2YWx1ZSwgdGhpcy5tYXhsZW5ndGgpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhdHRlcm4gaW5jb3JyZWN0XG4gICAgICB0aGlzLnRleHRhcmVhRWxtLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnSW5jb3JyZWN0IHZhbHVlJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==