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