@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
128 lines • 15.1 kB
JavaScript
import * as tslib_1 from "tslib";
var MaskDirective_1;
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
import { Directive, ElementRef, Input, HostListener, Renderer2, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { InternationalizationService } from '../internationalization/internationalization.service';
import { MaskSettings } from '@true-directive/base';
import { MaskState } from '@true-directive/base';
import { MaskBaseDirective } from './mask-base.directive';
let MaskDirective = MaskDirective_1 = class MaskDirective extends MaskBaseDirective {
constructor(_renderer, _elementRef, intl) {
super(_renderer, _elementRef, intl);
this._renderer = _renderer;
this._elementRef = _elementRef;
this.intl = intl;
this.onChange = (_) => { };
this.onTouched = () => { };
}
registerOnChange(fn) { this.onChange = fn; }
registerOnTouched(fn) { this.onTouched = fn; }
blur() {
// Очищаем, если маска неверна
const autocorrected = this._mask.applyMask(this._txtValue);
if (autocorrected === '' && !this._mask.settings.allowIncomplete) {
this.setText('');
}
else {
// Маска верна, но нужно автокоррекцию провернуть
if (autocorrected !== this._txtValue) {
this.setText(autocorrected);
}
}
this.onTouched();
}
// Пользователь вносит значение. Parser: View --> Ctrl
// Только то, что не обработано маской
input(txt) {
this.doInput(txt);
}
// Обновляем состояние
updateState() {
if (this._txtValue === '') {
// Пустое значение
this.state = MaskState.EMPTY;
}
else {
if (!this._mask.checkMask(this._txtValue)) {
// Считаем, что пользователь не завершил ввод
this.state = MaskState.TYPING;
}
else {
this.state = MaskState.OK;
}
}
}
toModel() {
// Отправляем в модель
this.onChange(this._txtValue);
// Обновляем состояние
this.updateState();
}
// Отображаем значение в компоненте. Formatter: Ctrl --> View
writeValue(txt) {
if (this._txtValue !== txt) {
this.setText(txt, false); // Не отправляем значение в модель, т.к. этот метод вызывается как раз после изменения модели
}
// Но обновить состояние нужно...
this.updateState();
}
set pattern(m) {
if (this._txtValue !== '' && this._mask.pattern !== '' && this._mask.pattern !== m) {
// По сложному пути
let res = this.currentRes();
let s = this._mask.pureValue(res.newValue);
this._mask.pattern = m;
res.newValue = this._mask.applyPureValue(s);
this.setRes(res);
}
else {
this._mask.pattern = m;
}
}
get pattern() {
return this._mask.pattern;
}
set settings(v) {
this._mask.settings = v;
}
keyDown(e) {
return this.processKey(e);
}
};
tslib_1.__decorate([
Input('true-mask'),
tslib_1.__metadata("design:type", String),
tslib_1.__metadata("design:paramtypes", [String])
], MaskDirective.prototype, "pattern", null);
tslib_1.__decorate([
Input('true-mask-settings'),
tslib_1.__metadata("design:type", MaskSettings),
tslib_1.__metadata("design:paramtypes", [MaskSettings])
], MaskDirective.prototype, "settings", null);
tslib_1.__decorate([
HostListener('keydown', ['$event']),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [Object]),
tslib_1.__metadata("design:returntype", void 0)
], MaskDirective.prototype, "keyDown", null);
MaskDirective = MaskDirective_1 = tslib_1.__decorate([
Directive({
selector: '[true-mask]',
host: { '(input)': 'input($event.target.value)', '(blur)': 'blur()' },
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MaskDirective_1),
multi: true
}]
}),
tslib_1.__metadata("design:paramtypes", [Renderer2,
ElementRef,
InternationalizationService])
], MaskDirective);
export { MaskDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9tYXNrL21hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVUxRCxJQUFhLGFBQWEscUJBQTFCLE1BQWEsYUFBYyxTQUFRLGlCQUFpQjtJQXlGaEQsWUFDWSxTQUFvQixFQUNwQixXQUF1QixFQUN2QixJQUFpQztRQUMzQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUgxQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQTZCO1FBMUZyQyxhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBMkY3QixDQUFDO0lBekZELGdCQUFnQixDQUFDLEVBQW9CLElBQVUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLGlCQUFpQixDQUFDLEVBQWMsSUFBVSxJQUFJLENB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LFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUdELE9BQU8sQ0FBQyxDQUFNO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FTSixDQUFBO0FBbkNHO0lBREMsS0FBSyxDQUFDLFdBQVcsQ0FBQzs7OzRDQWFsQjtBQU9EO0lBREMsS0FBSyxDQUFDLG9CQUFvQixDQUFDO3NDQUNaLFlBQVk7NkNBQVosWUFBWTs2Q0FFM0I7QUFHRDtJQURDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Ozs0Q0FHbkM7QUF2RlEsYUFBYTtJQVJ6QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsYUFBYTtRQUN2QixJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQztRQUNuRSxTQUFTLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWEsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLElBQUk7YUFBQyxDQUFDO0tBQ3BCLENBQUM7NkNBMkZ5QixTQUFTO1FBQ1AsVUFBVTtRQUNqQiwyQkFBMkI7R0E1RnBDLGFBQWEsQ0FnR3pCO1NBaEdZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgQWxla3NleSBNZWxuaWtvdiwgVHJ1ZSBEaXJlY3RpdmUgQ29tcGFueS5cclxuICogQGxpbmsgaHR0cHM6Ly90cnVlZGlyZWN0aXZlLmNvbS9cclxuICogQGxpY2Vuc2UgTUlUXHJcbiovXHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIEhvc3RMaXN0ZW5lciwgUmVuZGVyZXIyLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IEludGVybmF0aW9uYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVybmF0aW9uYWxpemF0aW9uL2ludGVybmF0aW9uYWxpemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXNrIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5pbXBvcnQgeyBNYXNrU2V0dGluZ3MgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IE1hc2tTdGF0ZSB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuXHJcbmltcG9ydCB7IE1hc2tCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9tYXNrLWJhc2UuZGlyZWN0aXZlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbdHJ1ZS1tYXNrXScsXHJcbiAgICBob3N0OiB7JyhpbnB1dCknOiAnaW5wdXQoJGV2ZW50LnRhcmdldC52YWx1ZSknLCAnKGJsdXIpJzogJ2JsdXIoKSd9LFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hc2tEaXJlY3RpdmUpLFxyXG4gICAgICAgIG11bHRpOiB0cnVlfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1hc2tEaXJlY3RpdmUgZXh0ZW5kcyBNYXNrQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XHJcbiAgICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XHJcblxyXG4gICAgYmx1cigpIHtcclxuICAgICAgLy8g0J7Rh9C40YnQsNC10LwsINC10YHQu9C4INC80LDRgdC60LAg0L3QtdCy0LXRgNC90LBcclxuICAgICAgY29uc3QgYXV0b2NvcnJlY3RlZCA9IHRoaXMuX21hc2suYXBwbHlNYXNrKHRoaXMuX3R4dFZhbHVlKTtcclxuICAgICAgaWYgKGF1dG9jb3JyZWN0ZWQgPT09ICcnICYmICF0aGlzLl9tYXNrLnNldHRpbmdzLmFsbG93SW5jb21wbGV0ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0VGV4dCgnJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g0JzQsNGB0LrQsCDQstC10YDQvdCwLCDQvdC+INC90YPQttC90L4g0LDQstGC0L7QutC+0YDRgNC10LrRhtC40Y4g0L/RgNC+0LLQtdGA0L3Rg9GC0YxcclxuICAgICAgICBpZiAoYXV0b2NvcnJlY3RlZCAhPT0gdGhpcy5fdHh0VmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VGV4dChhdXRvY29ycmVjdGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINCy0L3QvtGB0LjRgiDQt9C90LDRh9C10L3QuNC1LiBQYXJzZXI6IFZpZXcgLS0+IEN0cmxcclxuICAgIC8vINCi0L7Qu9GM0LrQviDRgtC+LCDRh9GC0L4g0L3QtSDQvtCx0YDQsNCx0L7RgtCw0L3QviDQvNCw0YHQutC+0LlcclxuICAgIGlucHV0KHR4dDogYW55KSB7XHJcbiAgICAgIHRoaXMuZG9JbnB1dCh0eHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDRgdC+0YHRgtC+0Y/QvdC40LVcclxuICAgIHByb3RlY3RlZCB1cGRhdGVTdGF0ZSgpIHtcclxuICAgICAgaWYgKHRoaXMuX3R4dFZhbHVlID09PSAnJykge1xyXG4gICAgICAgIC8vINCf0YPRgdGC0L7QtSDQt9C90LDRh9C10L3QuNC1XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IE1hc2tTdGF0ZS5FTVBUWTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21hc2suY2hlY2tNYXNrKHRoaXMuX3R4dFZhbHVlKSkge1xyXG4gICAgICAgICAgLy8g0KHRh9C40YLQsNC10LwsINGH0YLQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0L3QtSDQt9Cw0LLQtdGA0YjQuNC7INCy0LLQvtC0XHJcbiAgICAgICAgICB0aGlzLnN0YXRlID0gTWFza1N0YXRlLlRZUElORztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IE1hc2tTdGF0ZS5PSztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdG9Nb2RlbCgpOiB2b2lkIHtcclxuICAgICAgLy8g0J7RgtC/0YDQsNCy0LvRj9C10Lwg0LIg0LzQvtC00LXQu9GMXHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdHh0VmFsdWUpO1xyXG4gICAgICAvLyDQntCx0L3QvtCy0LvRj9C10Lwg0YHQvtGB0YLQvtGP0L3QuNC1XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQntGC0L7QsdGA0LDQttCw0LXQvCDQt9C90LDRh9C10L3QuNC1INCyINC60L7QvNC/0L7QvdC10L3RgtC1LiBGb3JtYXR0ZXI6IEN0cmwgLS0+IFZpZXdcclxuICAgIHdyaXRlVmFsdWUodHh0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMuX3R4dFZhbHVlICE9PSB0eHQpIHtcclxuICAgICAgICB0aGlzLnNldFRleHQodHh0LCBmYWxzZSk7IC8vINCd0LUg0L7RgtC/0YDQsNCy0LvRj9C10Lwg0LfQvdCw0YfQtdC90LjQtSDQsiDQvNC+0LTQtdC70YwsINGCLtC6LiDRjdGC0L7RgiDQvNC10YLQvtC0INCy0YvQt9GL0LLQsNC10YLRgdGPINC60LDQuiDRgNCw0Lcg0L/QvtGB0LvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LzQvtC00LXQu9C4XHJcbiAgICAgIH1cclxuICAgICAgLy8g0J3QviDQvtCx0L3QvtCy0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQvdGD0LbQvdC+Li4uXHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoJ3RydWUtbWFzaycpXHJcbiAgICBwdWJsaWMgc2V0IHBhdHRlcm4obTogc3RyaW5nKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5fdHh0VmFsdWUgIT09ICcnICYmIHRoaXMuX21hc2sucGF0dGVybiAhPT0gJycgJiYgdGhpcy5fbWFzay5wYXR0ZXJuICE9PSBtKSB7XHJcbiAgICAgICAgLy8g0J/QviDRgdC70L7QttC90L7QvNGDINC/0YPRgtC4XHJcbiAgICAgICAgbGV0IHJlcyA9IHRoaXMuY3VycmVudFJlcygpO1xyXG4gICAgICAgIGxldCBzID0gdGhpcy5fbWFzay5wdXJlVmFsdWUocmVzLm5ld1ZhbHVlKTtcclxuICAgICAgICB0aGlzLl9tYXNrLnBhdHRlcm4gPSBtO1xyXG4gICAgICAgIHJlcy5uZXdWYWx1ZSA9IHRoaXMuX21hc2suYXBwbHlQdXJlVmFsdWUocyk7XHJcbiAgICAgICAgdGhpcy5zZXRSZXMocmVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9tYXNrLnBhdHRlcm4gPSBtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXR0ZXJuKCk6IHN0cmluZyB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9tYXNrLnBhdHRlcm47XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCd0cnVlLW1hc2stc2V0dGluZ3MnKVxyXG4gICAgc2V0IHNldHRpbmdzKHY6IE1hc2tTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLl9tYXNrLnNldHRpbmdzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIGtleURvd24oZTogYW55KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NLZXkoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgcHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICBwcm90ZWN0ZWQgaW50bDogSW50ZXJuYXRpb25hbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHN1cGVyKF9yZW5kZXJlciwgX2VsZW1lbnRSZWYsIGludGwpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=