ngx-advanced-input
Version:
A simple library to allow/restrict characters when typing.
209 lines • 19.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, HostListener, Input, ElementRef } from '@angular/core';
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;
}());
export { NgxAdvancedInputDirective };
if (false) {
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.regex;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.regexWithSpace;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.regexWithUnderScore;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.numberRegex;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.numberWithFullColon;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.strictlyNumberRegExp;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.specialKeys;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.isSpaceEntered;
/** @type {?} */
NgxAdvancedInputDirective.prototype.inputType;
/**
* @type {?}
* @private
*/
NgxAdvancedInputDirective.prototype.el;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFkdmFuY2VkLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hZHZhbmNlZC1pbnB1dC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtYWR2YW5jZWQtaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCO0lBZ0JDLG1DQUE2QixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTs7UUFYMUIsVUFBSyxHQUFXLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsbUJBQWMsR0FBVyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZELHdCQUFtQixHQUFXLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUQsZ0JBQVcsR0FBVyxJQUFJLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2xFLHdCQUFtQixHQUFXLElBQUksTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDMUUseUJBQW9CLEdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7OztRQUd2RCxnQkFBVyxHQUFrQixDQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUUsQ0FBQztRQUN0RixtQkFBYyxHQUFHLEtBQUssQ0FBQztJQUVlLENBQUM7Ozs7O0lBRS9DLDZDQUFTOzs7O0lBRFQsVUFDVSxLQUFvQjtRQUM3QiwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDL0MsT0FBTztTQUNQO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLGdCQUFnQixFQUFFO1lBQ3hDLElBQUks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bUY7Ozs7O0lBQ25GLHdEQUEyRjs7Ozs7SUFDM0YseURBQXdFOzs7OztJQUd4RSxnREFBOEY7Ozs7O0lBQzlGLG1EQUErQjs7SUFDL0IsOENBQXNDOzs7OztJQUMxQix1Q0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWR2YW5jZWRJbnB1dF0nXG59KVxuZXhwb3J0IGNsYXNzIE5neEFkdmFuY2VkSW5wdXREaXJlY3RpdmUge1xuICAvLyBBbGxvdyBkZWNpbWFsIG51bWJlcnMgYW5kIG5lZ2F0aXZlIHZhbHVlc1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2V4OiBSZWdFeHAgPSBuZXcgUmVnRXhwKC9eW2EtekEtWjAtOV0qJC8pO1xuXHRwcml2YXRlIHJlYWRvbmx5IHJlZ2V4V2l0aFNwYWNlOiBSZWdFeHAgPSBuZXcgUmVnRXhwKC9eW2EtekEtWjAtOSBdKiQvKTtcblx0cHJpdmF0ZSByZWFkb25seSByZWdleFdpdGhVbmRlclNjb3JlOiBSZWdFeHAgPSBuZXcgUmVnRXhwKC9eW2EtekEtWjAtOV9dKiQvKTtcblx0cHJpdmF0ZSByZWFkb25seSBudW1iZXJSZWdleDogUmVnRXhwID0gbmV3IFJlZ0V4cCgvXi0/KFswLTldKikrKFxcLlswLTldKil7MCwxfSQvZyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgbnVtYmVyV2l0aEZ1bGxDb2xvbjogUmVnRXhwID0gbmV3IFJlZ0V4cCgvXi0/KFswLTldKikrKFxcOlswLTldKil7MCwxfSQvZyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgc3RyaWN0bHlOdW1iZXJSZWdFeHA6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoL15bMC05XSokL2cpO1xuXHQvLyBBbGxvdyBrZXkgY29kZXMgZm9yIHNwZWNpYWwgZXZlbnRzLiBSZWZsZWN0IDpcblx0Ly8gQmFja3NwYWNlLCB0YWIsIGVuZCwgaG9tZVxuXHRwcml2YXRlIHJlYWRvbmx5IHNwZWNpYWxLZXlzOiBBcnJheTxzdHJpbmc+ID0gWyAnQmFja3NwYWNlJywgJ1RhYicsICdFbmQnLCAnSG9tZScsICdEZWxldGUnIF07XG5cdHByaXZhdGUgaXNTcGFjZUVudGVyZWQgPSBmYWxzZTtcblx0QElucHV0KCdpbnB1dFR5cGUnKSBpbnB1dFR5cGU6IHN0cmluZztcblx0Y29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlbDogRWxlbWVudFJlZikge31cblx0QEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsgJyRldmVudCcgXSlcblx0b25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0Ly8gQWxsb3cgQmFja3NwYWNlLCB0YWIsIGVuZCwgYW5kIGhvbWUga2V5c1xuXHRcdGlmICh0aGlzLnNwZWNpYWxLZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaW5wdXRUeXBlID09PSAnYWxwaGFXaXRoU3BhY2UnKSB7XG5cdFx0XHRpZiAoZXZlbnQuY29kZSA9PT0gJ1NwYWNlJyAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScgJiYgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKHRoaXMuaXNTcGFjZUVudGVyZWQpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaXNTcGFjZUVudGVyZWQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmlzU3BhY2VFbnRlcmVkID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0Y29uc3QgbmV4dDogc3RyaW5nID0gY3VycmVudC5jb25jYXQoZXZlbnQua2V5KTtcblx0XHRcdFx0aWYgKG5leHQgJiYgIVN0cmluZyhuZXh0KS5tYXRjaCh0aGlzLnJlZ2V4V2l0aFNwYWNlKSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuaW5wdXRUeXBlID09PSAnYWxwaGEnKSB7XG5cdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzcgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzkpIHtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0Y29uc3QgbmV4dDogc3RyaW5nID0gY3VycmVudC5jb25jYXQoZXZlbnQua2V5KTtcblx0XHRcdFx0aWYgKG5leHQgJiYgIVN0cmluZyhuZXh0KS5tYXRjaCh0aGlzLnJlZ2V4KSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuaW5wdXRUeXBlID09PSAnbm9TcGFjZScpIHtcblx0XHRcdGlmIChldmVudC5jb2RlID09PSAnU3BhY2UnICYmIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH0gZWxzZSBpZiAoZXZlbnQuY29kZSA9PT0gJ1NwYWNlJyAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAodGhpcy5pc1NwYWNlRW50ZXJlZCkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5pc1NwYWNlRW50ZXJlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuaXNTcGFjZUVudGVyZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuaW5wdXRUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0aWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleUNvZGUgPT0gNjcpIHtcblx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5Q29kZSA9PSA4Nikge1xuXHRcdFx0fSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAzNyB8fCBldmVudC5rZXlDb2RlID09PSAzOSkge1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudDogc3RyaW5nID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRjb25zdCBuZXh0OiBzdHJpbmcgPSBjdXJyZW50LmNvbmNhdChldmVudC5rZXkpO1xuXHRcdFx0XHRpZiAobmV4dCAmJiAhU3RyaW5nKG5leHQpLm1hdGNoKHRoaXMubnVtYmVyUmVnZXgpKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGhpcy5pbnB1dFR5cGUgPT09ICdzdHJpY3RseU51bWJlcicpIHtcblx0XHRcdGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXlDb2RlID09IDY3KSB7XG5cdFx0XHR9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleUNvZGUgPT0gODYpIHtcblx0XHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzcgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzkpIHtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0Y29uc3QgbmV4dDogc3RyaW5nID0gY3VycmVudC5jb25jYXQoZXZlbnQua2V5KTtcblx0XHRcdFx0aWYgKG5leHQgJiYgIVN0cmluZyhuZXh0KS5tYXRjaCh0aGlzLnN0cmljdGx5TnVtYmVyUmVnRXhwKSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuaW5wdXRUeXBlID09PSAnbm9GU3BhY2UnKSB7XG5cdFx0XHRpZiAoZXZlbnQuY29kZSA9PT0gJ1NwYWNlJyAmJiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlucHV0VHlwZSA9PT0gJ2FscGhhV2l0aFVuZGVyc2NvcmUnKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50OiBzdHJpbmcgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cdFx0XHRjb25zdCBuZXh0OiBzdHJpbmcgPSBjdXJyZW50LmNvbmNhdChldmVudC5rZXkpO1xuXHRcdFx0aWYgKG5leHQgJiYgIVN0cmluZyhuZXh0KS5tYXRjaCh0aGlzLnJlZ2V4V2l0aFVuZGVyU2NvcmUpKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlucHV0VHlwZSA9PT0gJ251bWJlcldpdGhDb2xvbicpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnQ6IHN0cmluZyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdGNvbnN0IG5leHQ6IHN0cmluZyA9IGN1cnJlbnQuY29uY2F0KGV2ZW50LmtleSk7XG5cdFx0XHRpZiAobmV4dCAmJiAhU3RyaW5nKG5leHQpLm1hdGNoKHRoaXMubnVtYmVyV2l0aEZ1bGxDb2xvbikpIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXG59Il19