UNPKG

ng2-input-filter

Version:

Input filter directive for Angular

129 lines 11.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/input-filter.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, HostListener, Input } from '@angular/core'; export class InputFilterDirective { constructor() { this.regExpMap = new Map(); } /** * @return {?} */ ngOnInit() { this.previousValue = this.ngModel ? this.ngModel.toString() : ''; this.regExpMap.set('INTEGER', new RegExp('^\\d*$')); this.regExpMap.set('REAL', new RegExp('^[-+]?\\d*[\\.\\,]?\\d*$')); this.regExpMap.set('NON_NEGATIVE_REAL', new RegExp('^[+]?\\d*[\\.\\,]?\\d*$')); } /** * @param {?} value * @return {?} */ isReal(value) { return !isNaN(+value - +value); } /** * @param {?} value * @return {?} */ checkValueOnBlur(value) { switch (this.ng2InputFilter) { case 'REAL': return this.isReal(value); case 'NON_NEGATIVE_REAL': return this.isReal(value) && +value >= 0; case 'POSITIVE_REAL': return this.isReal(value) && +value > 0; case 'POSITIVE_INTEGER': return !(+value < 1); default: return true; } } /** * @param {?} value * @return {?} */ checkValueOnType(value) { if (value.length === 0) { return true; } switch (this.ng2InputFilter) { case 'REAL': return this.regexCheck('REAL', value); case 'NON_NEGATIVE_REAL': return this.regexCheck('NON_NEGATIVE_REAL', value); case 'POSITIVE_REAL': // non_negative + 0. return this.regexCheck('NON_NEGATIVE_REAL', value); case 'POSITIVE_INTEGER': return this.regexCheck('INTEGER', value) && +value > 0; case 'NON_NEGATIVE_INTEGER': return this.regexCheck('INTEGER', value) && +value >= 0; case 'INTEGER': return this.regexCheck('INTEGER', value); default: return true; } } /** * @param {?} key * @param {?} value * @return {?} */ regexCheck(key, value) { return this.regExpMap.get(key).test(value); } /** * @param {?} input * @return {?} */ onBlur(input) { /** @type {?} */ const valid = this.checkValueOnBlur(input.value); if (!valid) { input.value = ''; } } /** * @param {?} input * @return {?} */ onType(input) { input.value = input.value.replace(',', '.'); /** @type {?} */ const valid = this.checkValueOnType(input.value); if (!valid) { input.value = this.previousValue; input.dispatchEvent(new Event('input')); } else { this.previousValue = input.value; } } } InputFilterDirective.decorators = [ { type: Directive, args: [{ selector: '[ng2InputFilter]' },] } ]; /** @nocollapse */ InputFilterDirective.ctorParameters = () => []; InputFilterDirective.propDecorators = { ng2InputFilter: [{ type: Input }], ngModel: [{ type: Input }], onBlur: [{ type: HostListener, args: ['blur', ['$event.target'],] }], onType: [{ type: HostListener, args: ['input', ['$event.target'],] }] }; if (false) { /** @type {?} */ InputFilterDirective.prototype.ng2InputFilter; /** @type {?} */ InputFilterDirective.prototype.ngModel; /** @type {?} */ InputFilterDirective.prototype.previousValue; /** @type {?} */ InputFilterDirective.prototype.regExpMap; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nMi1pbnB1dC1maWx0ZXIvIiwic291cmNlcyI6WyJsaWIvaW5wdXQtZmlsdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUtyRSxNQUFNLE9BQU8sb0JBQW9CO0lBTS9CO1FBRkEsY0FBUyxHQUF3QixJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUczRCxDQUFDOzs7O0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Ozs7O0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDM0IsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixL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OztJQUN0Qiw2Q0FBc0I7O0lBQ3RCLHlDQUEyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbmcySW5wdXRGaWx0ZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBJbnB1dEZpbHRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG5nMklucHV0RmlsdGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5nTW9kZWw6IGFueTtcbiAgcHJldmlvdXNWYWx1ZTogc3RyaW5nO1xuICByZWdFeHBNYXA6IE1hcDxzdHJpbmcsIFJlZ0V4cD4gPSBuZXcgTWFwPHN0cmluZywgUmVnRXhwPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy5uZ01vZGVsID8gdGhpcy5uZ01vZGVsLnRvU3RyaW5nKCkgOiAnJztcbiAgICB0aGlzLnJlZ0V4cE1hcC5zZXQoJ0lOVEVHRVInLCBuZXcgUmVnRXhwKCdeXFxcXGQqJCcpKTtcbiAgICB0aGlzLnJlZ0V4cE1hcC5zZXQoJ1JFQUwnLCBuZXcgUmVnRXhwKCdeWy0rXT9cXFxcZCpbXFxcXC5cXFxcLF0/XFxcXGQqJCcpKTtcbiAgICB0aGlzLnJlZ0V4cE1hcC5zZXQoJ05PTl9ORUdBVElWRV9SRUFMJywgbmV3IFJlZ0V4cCgnXlsrXT9cXFxcZCpbXFxcXC5cXFxcLF0/XFxcXGQqJCcpKTtcbiAgfVxuXG4gIGlzUmVhbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICFpc05hTigrdmFsdWUgLSArdmFsdWUpO1xuICB9XG5cbiAgY2hlY2tWYWx1ZU9uQmx1cih2YWx1ZSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy5uZzJJbnB1dEZpbHRlcikge1xuICAgICAgY2FzZSAnUkVBTCc6XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmVhbCh2YWx1ZSk7XG4gICAgICBjYXNlICdOT05fTkVHQVRJVkVfUkVBTCc6XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmVhbCh2YWx1ZSkgJiYgK3ZhbHVlID49IDA7XG4gICAgICBjYXNlICdQT1NJVElWRV9SRUFMJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSZWFsKHZhbHVlKSAmJiArdmFsdWUgPiAwO1xuICAgICAgY2FzZSAnUE9TSVRJVkVfSU5URUdFUic6XG4gICAgICAgIHJldHVybiAhKCt2YWx1ZSA8IDEpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWYWx1ZU9uVHlwZSh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMubmcySW5wdXRGaWx0ZXIpIHtcbiAgICAgIGNhc2UgJ1JFQUwnOlxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleENoZWNrKCdSRUFMJywgdmFsdWUpO1xuICAgICAgY2FzZSAnTk9OX05FR0FUSVZFX1JFQUwnOlxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleENoZWNrKCdOT05fTkVHQVRJVkVfUkVBTCcsIHZhbHVlKTtcbiAgICAgIGNhc2UgJ1BPU0lUSVZFX1JFQUwnOiAvLyBub25fbmVnYXRpdmUgKyAwLlxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleENoZWNrKCdOT05fTkVHQVRJVkVfUkVBTCcsIHZhbHVlKTtcbiAgICAgIGNhc2UgJ1BPU0lUSVZFX0lOVEVHRVInOlxuICAgICAgICByZXR1cm4gdGhpcy5yZWdleENoZWNrKCdJTlRFR0VSJywgdmFsdWUpICYmICt2YWx1ZSA+IDA7XG4gICAgICBjYXNlICdOT05fTkVHQVRJVkVfSU5URUdFUic6XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4Q2hlY2soJ0lOVEVHRVInLCB2YWx1ZSkgJiYgK3ZhbHVlID49IDA7XG4gICAgICBjYXNlICdJTlRFR0VSJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhDaGVjaygnSU5URUdFUicsIHZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2V4Q2hlY2soa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWdFeHBNYXAuZ2V0KGtleSkudGVzdCh2YWx1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIG9uQmx1cihpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuICAgIGNvbnN0IHZhbGlkID0gdGhpcy5jaGVja1ZhbHVlT25CbHVyKGlucHV0LnZhbHVlKTtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQudGFyZ2V0J10pXG4gIG9uVHlwZShpbnB1dDogSFRNTElucHV0RWxlbWVudCkge1xuICAgIGlucHV0LnZhbHVlID0gaW5wdXQudmFsdWUucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsdWVPblR5cGUoaW5wdXQudmFsdWUpO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5wcmV2aW91c1ZhbHVlO1xuICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==