UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

140 lines 16.2 kB
import * as tslib_1 from "tslib"; /** * 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'; var MaskDirective = /** @class */ (function (_super) { tslib_1.__extends(MaskDirective, _super); function MaskDirective(_renderer, _elementRef, intl) { var _this = _super.call(this, _renderer, _elementRef, intl) || this; _this._renderer = _renderer; _this._elementRef = _elementRef; _this.intl = intl; _this.onChange = function (_) { }; _this.onTouched = function () { }; return _this; } MaskDirective_1 = MaskDirective; MaskDirective.prototype.registerOnChange = function (fn) { this.onChange = fn; }; MaskDirective.prototype.registerOnTouched = function (fn) { this.onTouched = fn; }; MaskDirective.prototype.blur = function () { // Очищаем, если маска неверна var 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 // Только то, что не обработано маской MaskDirective.prototype.input = function (txt) { this.doInput(txt); }; // Обновляем состояние MaskDirective.prototype.updateState = function () { if (this._txtValue === '') { // Пустое значение this.state = MaskState.EMPTY; } else { if (!this._mask.checkMask(this._txtValue)) { // Считаем, что пользователь не завершил ввод this.state = MaskState.TYPING; } else { this.state = MaskState.OK; } } }; MaskDirective.prototype.toModel = function () { // Отправляем в модель this.onChange(this._txtValue); // Обновляем состояние this.updateState(); }; // Отображаем значение в компоненте. Formatter: Ctrl --> View MaskDirective.prototype.writeValue = function (txt) { if (this._txtValue !== txt) { this.setText(txt, false); // Не отправляем значение в модель, т.к. этот метод вызывается как раз после изменения модели } // Но обновить состояние нужно... this.updateState(); }; Object.defineProperty(MaskDirective.prototype, "pattern", { get: function () { return this._mask.pattern; }, set: function (m) { if (this._txtValue !== '' && this._mask.pattern !== '' && this._mask.pattern !== m) { // По сложному пути var res = this.currentRes(); var s = this._mask.pureValue(res.newValue); this._mask.pattern = m; res.newValue = this._mask.applyPureValue(s); this.setRes(res); } else { this._mask.pattern = m; } }, enumerable: true, configurable: true }); Object.defineProperty(MaskDirective.prototype, "settings", { set: function (v) { this._mask.settings = v; }, enumerable: true, configurable: true }); MaskDirective.prototype.keyDown = function (e) { return this.processKey(e); }; var MaskDirective_1; 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(function () { return MaskDirective_1; }), multi: true }] }), tslib_1.__metadata("design:paramtypes", [Renderer2, ElementRef, InternationalizationService]) ], MaskDirective); return MaskDirective; }(MaskBaseDirective)); export { MaskDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9tYXNrL21hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztFQUlFO0FBQ0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUVuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBVTFEO0lBQW1DLHlDQUFpQjtJQXlGaEQsdUJBQ1ksU0FBb0IsRUFDcEIsV0FBdUIsRUFDdkIsSUFBaUM7UUFIN0MsWUFJRSxrQkFBTSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUNwQztRQUpXLGVBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsaUJBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsVUFBSSxHQUFKLElBQUksQ0FBNkI7UUExRnJDLGNBQVEsR0FBRyxVQUFDLENBQU0sSUFBTSxDQUFDLENBQUM7UUFDMUIsZUFBUyxHQUFHLGNBQU8sQ0FBQyxDQUFDOztJQTJGN0IsQ0FBQztzQkE5RlEsYUFBYTtJQUt0Qix3Q0FBZ0IsR0FBaEIsVUFBaUIsRUFBb0IsSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUseUNBQWlCLEdBQWpCLFVBQWtCLEVBQWMsSUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUs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QUFhLENBQWU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBR0QsK0JBQU8sR0FBUCxVQUFRLENBQU07UUFDWixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7SUExQkQ7UUFEQyxLQUFLLENBQUMsV0FBVyxDQUFDOzs7Z0RBYWxCO0lBT0Q7UUFEQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7MENBQ1osWUFBWTtpREFBWixZQUFZO2lEQUUzQjtJQUdEO1FBREMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O2dEQUduQztJQXZGUSxhQUFhO1FBUnpCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO1lBQ25FLFNBQVMsRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLGVBQWEsRUFBYixDQUFhLENBQUM7b0JBQzVDLEtBQUssRUFBRSxJQUFJO2lCQUFDLENBQUM7U0FDcEIsQ0FBQztpREEyRnlCLFNBQVM7WUFDUCxVQUFVO1lBQ2pCLDJCQUEyQjtPQTVGcEMsYUFBYSxDQWdHekI7SUFBRCxvQkFBQztDQUFBLEFBaEdELENBQW1DLGlCQUFpQixHQWdHbkQ7U0FoR1ksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBbGVrc2V5IE1lbG5pa292LCBUcnVlIERpcmVjdGl2ZSBDb21wYW55LlxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgSG9zdExpc3RlbmVyLCBSZW5kZXJlcjIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgSW50ZXJuYXRpb25hbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJuYXRpb25hbGl6YXRpb24vaW50ZXJuYXRpb25hbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc2sgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IE1hc2tTZXR0aW5ncyB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgTWFza1N0YXRlIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuaW1wb3J0IHsgTWFza0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL21hc2stYmFzZS5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1t0cnVlLW1hc2tdJyxcclxuICAgIGhvc3Q6IHsnKGlucHV0KSc6ICdpbnB1dCgkZXZlbnQudGFyZ2V0LnZhbHVlKScsICcoYmx1ciknOiAnYmx1cigpJ30sXHJcbiAgICBwcm92aWRlcnM6IFt7XHJcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWFza0RpcmVjdGl2ZSksXHJcbiAgICAgICAgbXVsdGk6IHRydWV9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFza0RpcmVjdGl2ZSBleHRlbmRzIE1hc2tCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICAgIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cclxuXHJcbiAgICBibHVyKCkge1xyXG4gICAgICAvLyDQntGH0LjRidCw0LXQvCwg0LXRgdC70Lgg0LzQsNGB0LrQsCDQvdC10LLQtdGA0L3QsFxyXG4gICAgICBjb25zdCBhdXRvY29ycmVjdGVkID0gdGhpcy5fbWFzay5hcHBseU1hc2sodGhpcy5fdHh0VmFsdWUpO1xyXG4gICAgICBpZiAoYXV0b2NvcnJlY3RlZCA9PT0gJycgJiYgIXRoaXMuX21hc2suc2V0dGluZ3MuYWxsb3dJbmNvbXBsZXRlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUZXh0KCcnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDQnNCw0YHQutCwINCy0LXRgNC90LAsINC90L4g0L3Rg9C20L3QviDQsNCy0YLQvtC60L7RgNGA0LXQutGG0LjRjiDQv9GA0L7QstC10YDQvdGD0YLRjFxyXG4gICAgICAgIGlmIChhdXRvY29ycmVjdGVkICE9PSB0aGlzLl90eHRWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRUZXh0KGF1dG9jb3JyZWN0ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQn9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0LLQvdC+0YHQuNGCINC30L3QsNGH0LXQvdC40LUuIFBhcnNlcjogVmlldyAtLT4gQ3RybFxyXG4gICAgLy8g0KLQvtC70YzQutC+INGC0L4sINGH0YLQviDQvdC1INC+0LHRgNCw0LHQvtGC0LDQvdC+INC80LDRgdC60L7QuVxyXG4gICAgaW5wdXQodHh0OiBhbnkpIHtcclxuICAgICAgdGhpcy5kb0lucHV0KHR4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0J7QsdC90L7QstC70Y/QtdC8INGB0L7RgdGC0L7Rj9C90LjQtVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlKCkge1xyXG4gICAgICBpZiAodGhpcy5fdHh0VmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgLy8g0J/Rg9GB0YLQvtC1INC30L3QsNGH0LXQvdC40LVcclxuICAgICAgICB0aGlzLnN0YXRlID0gTWFza1N0YXRlLkVNUFRZO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWFzay5jaGVja01hc2sodGhpcy5fdHh0VmFsdWUpKSB7XHJcbiAgICAgICAgICAvLyDQodGH0LjRgtCw0LXQvCwg0YfRgtC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQvdC1INC30LDQstC10YDRiNC40Lsg0LLQstC+0LRcclxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBNYXNrU3RhdGUuVFlQSU5HO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXRlID0gTWFza1N0YXRlLk9LO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b01vZGVsKCk6IHZvaWQge1xyXG4gICAgICAvLyDQntGC0L/RgNCw0LLQu9GP0LXQvCDQsiDQvNC+0LTQtdC70YxcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl90eHRWYWx1ZSk7XHJcbiAgICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDRgdC+0YHRgtC+0Y/QvdC40LVcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vINCe0YLQvtCx0YDQsNC20LDQtdC8INC30L3QsNGH0LXQvdC40LUg0LIg0LrQvtC80L/QvtC90LXQvdGC0LUuIEZvcm1hdHRlcjogQ3RybCAtLT4gVmlld1xyXG4gICAgd3JpdGVWYWx1ZSh0eHQ6IGFueSk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5fdHh0VmFsdWUgIT09IHR4dCkge1xyXG4gICAgICAgIHRoaXMuc2V0VGV4dCh0eHQsIGZhbHNlKTsgLy8g0J3QtSDQvtGC0L/RgNCw0LLQu9GP0LXQvCDQt9C90LDRh9C10L3QuNC1INCyINC80L7QtNC10LvRjCwg0YIu0LouINGN0YLQvtGCINC80LXRgtC+0LQg0LLRi9C30YvQstCw0LXRgtGB0Y8g0LrQsNC6INGA0LDQtyDQv9C+0YHQu9C1INC40LfQvNC10L3QtdC90LjRjyDQvNC+0LTQtdC70LhcclxuICAgICAgfVxyXG4gICAgICAvLyDQndC+INC+0LHQvdC+0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC90YPQttC90L4uLi5cclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgndHJ1ZS1tYXNrJylcclxuICAgIHB1YmxpYyBzZXQgcGF0dGVybihtOiBzdHJpbmcpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl90eHRWYWx1ZSAhPT0gJycgJiYgdGhpcy5fbWFzay5wYXR0ZXJuICE9PSAnJyAmJiB0aGlzLl9tYXNrLnBhdHRlcm4gIT09IG0pIHtcclxuICAgICAgICAvLyDQn9C+INGB0LvQvtC20L3QvtC80YMg0L/Rg9GC0LhcclxuICAgICAgICBsZXQgcmVzID0gdGhpcy5jdXJyZW50UmVzKCk7XHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLl9tYXNrLnB1cmVWYWx1ZShyZXMubmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX21hc2sucGF0dGVybiA9IG07XHJcbiAgICAgICAgcmVzLm5ld1ZhbHVlID0gdGhpcy5fbWFzay5hcHBseVB1cmVWYWx1ZShzKTtcclxuICAgICAgICB0aGlzLnNldFJlcyhyZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX21hc2sucGF0dGVybiA9IG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBhdHRlcm4oKTogc3RyaW5nIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX21hc2sucGF0dGVybjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoJ3RydWUtbWFzay1zZXR0aW5ncycpXHJcbiAgICBzZXQgc2V0dGluZ3ModjogTWFza1NldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuX21hc2suc2V0dGluZ3MgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAga2V5RG93bihlOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0tleShlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgIHByb3RlY3RlZCBpbnRsOiBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UpIHtcclxuICAgICAgc3VwZXIoX3JlbmRlcmVyLCBfZWxlbWVudFJlZiwgaW50bCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==