UNPKG

ngx-advanced-input

Version:

A simple library to allow/restrict characters when typing.

183 lines (177 loc) 7.23 kB
import { Directive, HostListener, Input, ElementRef, NgModule } from '@angular/core'; /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NgxAdvancedInputDirective = /** @class */ (function () { function NgxAdvancedInputDirective(el) { this.el = el; // Allow decimal numbers and negative values this.regex = new RegExp(/^[a-zA-Z0-9]*$/); this.regexWithSpace = new RegExp(/^[a-zA-Z0-9 ]*$/); this.regexWithUnderScore = new RegExp(/^[a-zA-Z0-9_]*$/); this.numberRegex = new RegExp(/^-?([0-9]*)+(\.[0-9]*){0,1}$/g); this.numberWithFullColon = new RegExp(/^-?([0-9]*)+(\:[0-9]*){0,1}$/g); this.strictlyNumberRegExp = new RegExp(/^[0-9]*$/g); // Allow key codes for special events. Reflect : // Backspace, tab, end, home this.specialKeys = ['Backspace', 'Tab', 'End', 'Home', 'Delete']; this.isSpaceEntered = false; } /** * @param {?} event * @return {?} */ NgxAdvancedInputDirective.prototype.onKeyDown = /** * @param {?} event * @return {?} */ function (event) { // Allow Backspace, tab, end, and home keys if (this.specialKeys.indexOf(event.key) !== -1) { return; } if (this.inputType === 'alphaWithSpace') { if (event.code === 'Space' && this.el.nativeElement.value.length === 0) { event.preventDefault(); } else if (event.code === 'Space' && this.el.nativeElement.value.length > 0) { if (this.isSpaceEntered) { event.preventDefault(); } else { this.isSpaceEntered = true; } } else { this.isSpaceEntered = false; /** @type {?} */ var current = this.el.nativeElement.value; /** @type {?} */ var next = current.concat(event.key); if (next && !String(next).match(this.regexWithSpace)) { event.preventDefault(); } } } else if (this.inputType === 'alpha') { if (event.keyCode === 37 || event.keyCode === 39) ; else { /** @type {?} */ var current = this.el.nativeElement.value; /** @type {?} */ var next = current.concat(event.key); if (next && !String(next).match(this.regex)) { event.preventDefault(); } } } else if (this.inputType === 'noSpace') { if (event.code === 'Space' && this.el.nativeElement.value.length === 0) { event.preventDefault(); } else if (event.code === 'Space' && this.el.nativeElement.value.length > 0) { if (this.isSpaceEntered) { event.preventDefault(); } else { this.isSpaceEntered = true; } } else { this.isSpaceEntered = false; } } else if (this.inputType === 'number') { if ((event.ctrlKey || event.metaKey) && event.keyCode == 67) ; else if ((event.ctrlKey || event.metaKey) && event.keyCode == 86) ; else if (event.keyCode === 37 || event.keyCode === 39) ; else { /** @type {?} */ var current = this.el.nativeElement.value; /** @type {?} */ var next = current.concat(event.key); if (next && !String(next).match(this.numberRegex)) { event.preventDefault(); } } } else if (this.inputType === 'strictlyNumber') { if ((event.ctrlKey || event.metaKey) && event.keyCode == 67) ; else if ((event.ctrlKey || event.metaKey) && event.keyCode == 86) ; else if (event.keyCode === 37 || event.keyCode === 39) ; else { /** @type {?} */ var current = this.el.nativeElement.value; /** @type {?} */ var next = current.concat(event.key); if (next && !String(next).match(this.strictlyNumberRegExp)) { event.preventDefault(); } } } else if (this.inputType === 'noFSpace') { if (event.code === 'Space' && this.el.nativeElement.value.length === 0) { event.preventDefault(); } } else if (this.inputType === 'alphaWithUnderscore') { /** @type {?} */ var current = this.el.nativeElement.value; /** @type {?} */ var next = current.concat(event.key); if (next && !String(next).match(this.regexWithUnderScore)) { event.preventDefault(); } } else if (this.inputType === 'numberWithColon') { /** @type {?} */ var current = this.el.nativeElement.value; /** @type {?} */ var next = current.concat(event.key); if (next && !String(next).match(this.numberWithFullColon)) { event.preventDefault(); } } }; NgxAdvancedInputDirective.decorators = [ { type: Directive, args: [{ selector: '[advancedInput]' },] } ]; /** @nocollapse */ NgxAdvancedInputDirective.ctorParameters = function () { return [ { type: ElementRef } ]; }; NgxAdvancedInputDirective.propDecorators = { inputType: [{ type: Input, args: ['inputType',] }], onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }] }; return NgxAdvancedInputDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NgxAdvancedInputModule = /** @class */ (function () { function NgxAdvancedInputModule() { } NgxAdvancedInputModule.decorators = [ { type: NgModule, args: [{ declarations: [NgxAdvancedInputDirective], imports: [], exports: [NgxAdvancedInputDirective] },] } ]; return NgxAdvancedInputModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { NgxAdvancedInputDirective, NgxAdvancedInputModule }; //# sourceMappingURL=ngx-advanced-input.js.map