ngx-advanced-input
Version:
A simple library to allow/restrict characters when typing.
183 lines (177 loc) • 7.23 kB
JavaScript
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