@neocomplexx/ngx-neo-directives-mat
Version:
1,268 lines • 53 kB
JavaScript
import { __decorate, __metadata, __awaiter, __generator } from 'tslib';
import { ElementRef, Input, HostListener, Directive, InjectionToken, Renderer2, NgModule } from '@angular/core';
import { BehaviorSubject, Subject, combineLatest, timer } from 'rxjs';
import { tap, map, filter, switchMap } from 'rxjs/operators';
import { NgModel } from '@angular/forms';
import { MatTabGroup } from '@angular/material/tabs';
var OnReturnDirective = /** @class */ (function () {
function OnReturnDirective(_el) {
this._el = _el;
this.setEnabled = true;
this.el = this._el;
}
OnReturnDirective_1 = OnReturnDirective;
OnReturnDirective.prototype.onKeyDown = function (e) {
if ((e.which === 13 || e.keyCode === 13)) {
e.preventDefault();
OnReturnDirective_1.setNextFocus(this.onReturn, this.setEnabled);
return;
}
};
// tslint:disable-next-line:member-ordering
OnReturnDirective.setNextFocus = function (onReturn, setEnabled) {
if (setEnabled === void 0) { setEnabled = true; }
if (onReturn instanceof Array) {
var termine = false;
var i = 0;
while (!termine && i < onReturn.length) {
var element = onReturn[i];
if (element) {
if (element instanceof HTMLInputElement ||
element instanceof HTMLButtonElement ||
element instanceof HTMLSelectElement ||
element instanceof HTMLSelectElement) {
if (!element.disabled) {
element.focus();
termine = true;
}
}
else {
if (element && element.nativeElement instanceof HTMLInputElement ||
element.nativeElement instanceof HTMLButtonElement ||
element.nativeElement instanceof HTMLSelectElement) {
if (!element.nativeElement.disabled) {
element.nativeElement.focus();
termine = true;
}
}
else {
var input = element['ctrInput'];
if (input) {
input = input['nativeElement'];
if (input && input instanceof HTMLInputElement) {
if (!input.disabled) {
input.focus();
termine = true;
}
}
}
else {
element = document.getElementById(element);
if (element) {
if (element.disabled && setEnabled) {
element.disabled = false;
}
if (!element.disabled) {
element.focus();
termine = true;
}
}
}
}
}
}
i++;
}
}
else if (onReturn) {
var element = onReturn;
if (element instanceof HTMLInputElement || element instanceof HTMLButtonElement || element instanceof HTMLSelectElement) {
if (element.disabled) {
element.disabled = false;
}
element.focus();
}
else {
var input = element['ctrInput'];
if (input) {
input = input['nativeElement'];
if (input && input instanceof HTMLInputElement) {
if (input.disabled) {
input.disabled = false;
}
input.focus();
}
}
else {
element = document.getElementById(onReturn);
if (element) {
if (element.disabled && setEnabled) {
element.disabled = false;
}
element.focus();
}
}
}
}
};
var OnReturnDirective_1;
OnReturnDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], OnReturnDirective.prototype, "onReturn", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], OnReturnDirective.prototype, "setEnabled", void 0);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], OnReturnDirective.prototype, "onKeyDown", null);
OnReturnDirective = OnReturnDirective_1 = __decorate([
Directive({
// tslint:disable-next-line:directive-selector
selector: '[onReturn]'
}),
__metadata("design:paramtypes", [ElementRef])
], OnReturnDirective);
return OnReturnDirective;
}());
// tslint:disable:indent
var COMMAND_CONFIG = new InjectionToken('COMMAND_CONFIG');
var COMMAND_DEFAULT_CONFIG = {
executingCssClass: 'executing',
};
/*
export function provideConfig(config: CommandOptions): any {
return Object.assign({}, COMMAND_DEFAULT_CONFIG, config);
} */
/**
*
* ### Example with options
* ```html
* <button [command]='saveCmd' [commandOptions]='{executingCssClass: 'in-progress'}'>Save</button>
* ```
*/
var CommandDirective = /** @class */ (function () {
function CommandDirective(renderer, element) {
this.renderer = renderer;
this.element = element;
this.stopPropagation = false;
// @HostBinding('disabled') isDisabled: boolean;
this.setEnabled = true;
this.config = COMMAND_DEFAULT_CONFIG;
this.ownDisabledState = false;
this.commandDisabledChanged = false;
}
CommandDirective.prototype.ngOnInit = function () {
var _this = this;
// console.log('[commandDirective::init]');
this.commandOptions = Object.assign({}, this.config, this.commandOptions);
if (!this.command) {
throw new Error('[commandDirective] command should be defined!');
}
else {
this.command.verifyCommandExecutionPipe();
this.command.setNextFocus(this.commandNextFocus);
this.command.setEnabledValue(this.setEnabled);
}
// if (this.element.nativeElement.localName === 'button') {
// let thisAux = this; // Set up a new observer
// var observer = new MutationObserver(function(mutations) {
// mutations.forEach(function(mutation) {
// // Check the modified attributeName is "disabled"
// if(!thisAux.commandDisabledChanged) {
// if (mutation.attributeName === "disabled") {
// thisAux.ownDisabledState = thisAux.element.nativeElement.disabled;
// }
// } else {
// thisAux.commandDisabledChanged = false;
// }
// });
// });
// // Configure to only listen to attribute changes
// var config = { attributes: true };
// // Start observing myElem
// observer.observe(this.element.nativeElement, config);
// }
this.canExecute$$ = this.command.canExecute$.pipe(tap(function (x) {
if (_this.element.nativeElement.localName === 'button') {
_this.commandDisabledChanged = true;
if (_this.commandValue == _this.command.executingParam) {
_this.element.nativeElement.disabled = !x;
// } else {
// this.element.nativeElement.disabled = !(!this.ownDisabledState && x);
}
}
})).subscribe();
this.isExecuting$$ = this.command.isExecuting$.pipe(tap(function (x) {
// console.log('[commandDirective::isExecuting$]', x);
x ? _this.renderer.addClass(_this.element.nativeElement, _this.commandOptions.executingCssClass) : _this.renderer.removeClass(_this.element.nativeElement, _this.commandOptions.executingCssClass);
})).subscribe();
if (this.isMobileOperatingSystem()) {
this.element.nativeElement.addEventListener('touchstart', function (event) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
event.preventDefault();
event.stopPropagation();
if (this.element.nativeElement.localName === 'input') {
return [2 /*return*/];
}
this.executeCommand();
return [2 /*return*/];
});
}); });
this.element.nativeElement.addEventListener('focusin', function (event) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
event.preventDefault();
event.stopPropagation();
this.executeCommand();
return [2 /*return*/];
});
}); });
}
else {
this.element.nativeElement.addEventListener('keydown', function (event) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
if ((event.which === 13 || event.keyCode === 13)) {
event.preventDefault();
event.stopPropagation();
this.executeCommand();
}
return [2 /*return*/];
});
}); });
this.element.nativeElement.addEventListener('click', function (event) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (this.element.nativeElement.localName === 'input') {
return [2 /*return*/];
}
event.preventDefault();
if (this.stopPropagation) {
event.stopPropagation();
}
this.executeCommand();
return [2 /*return*/];
});
}); });
}
};
CommandDirective.prototype.executeCommand = function () {
if (!this.element.nativeElement.disabled)
this.command.canExecute = true;
this.command.verifyCommandExecutionPipe();
this.command.execute(this.commandValue);
};
CommandDirective.prototype.ngOnDestroy = function () {
if (this.command) {
this.command.destroy();
}
if (this.canExecute$$) {
this.canExecute$$.unsubscribe();
}
if (this.isExecuting$$) {
this.isExecuting$$.unsubscribe();
}
};
CommandDirective.prototype.isMobileOperatingSystem = function () {
var isMobile = false;
var userAgent = navigator.userAgent || navigator.vendor;
// Windows Phone must come first because its UA also contains "Android"
if (/windows phone/i.test(userAgent)) {
isMobile = true; // "Windows Phone";
}
else if (/android/i.test(userAgent)) {
isMobile = true; // "Android";
}
else if (/iPad|iPhone|iPod/.test(userAgent)) {
// iOS detection from: http://stackoverflow.com/a/9039885/177710
isMobile = true; // "iOS";
}
isMobile = false;
return isMobile; // "unknown";
};
CommandDirective.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], CommandDirective.prototype, "command", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], CommandDirective.prototype, "commandOptions", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], CommandDirective.prototype, "commandCanExecute", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], CommandDirective.prototype, "commandValue", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], CommandDirective.prototype, "commandNextFocus", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], CommandDirective.prototype, "stopPropagation", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], CommandDirective.prototype, "setEnabled", void 0);
CommandDirective = __decorate([
Directive({
// tslint:disable-next-line:directive-selector
selector: '[command]'
}),
__metadata("design:paramtypes", [Renderer2,
ElementRef])
], CommandDirective);
return CommandDirective;
}());
/**
* Command object used to encapsulate information which is needed to perform an action.
*/
var Command = /** @class */ (function () {
/**
* Creates an instance of Command.
*/
function Command(executeParam, canExecute$, isAsync, delay) {
var _this = this;
this.executeParam = executeParam;
this.isAsync = isAsync;
this.delay = delay;
this.isExecuting = false;
this.isExecuting$ = new BehaviorSubject(false);
this.canExecute = true;
this.executionPipe$ = new Subject();
this.setEnabled = true;
if (canExecute$) {
this.canExecute$ = combineLatest(this.isExecuting$, canExecute$, function (isExecuting, canExecuteResult) {
// console.log('[command::combineLatest$] update!', { isExecuting, canExecuteResult });
_this.isExecuting = isExecuting;
_this.canExecute = !isExecuting && canExecuteResult;
return _this.canExecute;
});
this.canExecute$$ = this.canExecute$.subscribe();
}
else {
this.canExecute$ = this.isExecuting$.pipe(map(function (x) {
var canExecute = !x;
_this.canExecute = canExecute;
return canExecute;
}));
this.isExecuting$$ = this.isExecuting$.pipe(tap(function (x) { return _this.isExecuting = x; }))
.subscribe();
}
this.buildExecutionPipe(executeParam, isAsync, delay);
}
Command.prototype.verifyCommandExecutionPipe = function () {
if (this.executionPipe$.observers.length === 0) {
this.buildExecutionPipe(this.executeParam, this.isAsync, this.delay);
}
};
Command.prototype.execute = function (value) {
this.executingParam = value;
this.executionPipe$.next(value);
};
Command.prototype.executeWithResult = function (value) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.executingParam = value;
this.executionPipe$.next(value);
return [4 /*yield*/, this.result];
case 1: return [2 /*return*/, _a.sent()];
}
});
});
};
Command.prototype.destroy = function () {
if (this.executionPipe$$) {
this.executionPipe$$.unsubscribe();
}
if (this.canExecute$$) {
this.canExecute$$.unsubscribe();
}
if (this.isExecuting$$) {
this.isExecuting$$.unsubscribe();
}
if (this.isExecuting$) {
this.isExecuting$.complete();
}
if (this.asyncAction != null) {
this.asyncAction = null;
this.resultAsyncAction = null;
}
};
Command.prototype.buildExecutionPipe = function (executeParm, isAsync, delay) {
var _this = this;
var pipe$ = this.executionPipe$.pipe(filter(function () { return _this.canExecute; }), tap(function () {
_this.isExecuting$.next(true);
if (isAsync && _this.asyncAction != null) {
_this.resultAsyncAction = _this.asyncAction(undefined);
}
}));
pipe$ = isAsync
? pipe$.pipe(switchMap(function (value) {
if (delay && delay > 0) {
if (_this.delaySubscribe) {
_this.delaySubscribe.unsubscribe();
}
var delayTimer = timer(delay);
_this.delaySubscribe = delayTimer.subscribe(function (t) { executeParm(value); });
return Promise.resolve(null);
}
else {
var result = executeParm(value);
return Promise.resolve(result);
}
}))
: pipe$.pipe(tap(function (value) { executeParm(value); }));
pipe$ = pipe$.pipe(tap(function () {
// console.log('[command::excutionPipe$] do#2 - set idle');
_this.isExecuting$.next(false);
_this.executingParam = undefined;
if (isAsync && _this.asyncAction != null) {
_this.resultAsyncAction = _this.asyncAction(_this.resultAsyncAction);
}
OnReturnDirective.setNextFocus(_this.elementNextFocus, _this.setEnabled);
}, function (e) {
console.log('[command::excutionPipe$] do#2 error - set idle' + e.toString());
_this.isExecuting$.next(false);
_this.executingParam = undefined;
if (isAsync && _this.asyncAction != null) {
_this.resultAsyncAction = _this.asyncAction(_this.resultAsyncAction);
}
_this.buildExecutionPipe(executeParm, isAsync, delay);
}));
this.executionPipe$$ = pipe$.subscribe();
};
Command.prototype.setNextFocus = function (element) {
this.elementNextFocus = element;
};
Command.prototype.setEnabledValue = function (enabled) {
this.setEnabled = enabled;
};
return Command;
}());
var StringsDirective = /** @class */ (function () {
function StringsDirective(_el) {
this._el = _el;
this.el = this._el;
}
StringsDirective.prototype.onKeyDown = function (e) {
if (e.key === 'Delete' || e.key === 'Tab' || e.key === 'Backspace' || e.key === 'ArrowLeft' ||
e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' ||
e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift') {
return;
}
var element = this._el.nativeElement.value;
if (element && element.length >= this.maxLength) {
e.preventDefault();
}
};
StringsDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], StringsDirective.prototype, "maxLength", void 0);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], StringsDirective.prototype, "onKeyDown", null);
StringsDirective = __decorate([
Directive({
// tslint:disable-next-line:directive-selector
selector: '[maxLength]'
}),
__metadata("design:paramtypes", [ElementRef])
], StringsDirective);
return StringsDirective;
}());
var NeoNumbersDirective = /** @class */ (function () {
function NeoNumbersDirective(el, renderer, model) {
this.el = el;
this.renderer = renderer;
this.model = model;
this.allowNullValue = false;
}
NeoNumbersDirective.prototype.ngOnInit = function () {
if (this.allowNullValue === "")
this.allowNullValue = true;
this.regex = new RegExp('^\\d+$');
this.el.nativeElement.type = "number";
};
NeoNumbersDirective.prototype.blockPaste = function (e) {
var _this = this;
var clipboardData = e.clipboardData || window['clipboardData'];
var pastedData = clipboardData.getData('text/plain').split(",").join(".");
var posPoint = pastedData.lastIndexOf('.');
if (posPoint > -1) {
pastedData = pastedData.substring(0, posPoint).split(".").join("");
}
var onlyNumbers = Array.from(pastedData).map(function (x) { return _this.isOnlyNumber(x); }).reduce(function (prev, el) { return prev && el; }, true);
var isCorrect = this.regex.test(pastedData);
if (isCorrect && this.el.nativeElement.max && pastedData.length > this.el.nativeElement.max.length)
pastedData = pastedData.substr(0, this.el.nativeElement.max.length);
setTimeout(function () {
if (onlyNumbers && isCorrect) {
_this.el.nativeElement.value = pastedData;
}
else {
_this.el.nativeElement.value = '0';
}
}, 10);
};
NeoNumbersDirective.prototype.onfocus = function () {
if (this.el.nativeElement.value == "0") {
this.el.nativeElement.value = null;
}
};
NeoNumbersDirective.prototype.onBlur = function () {
var current = this.el.nativeElement.value;
if (current == "") {
if (this.allowNullValue) {
this.el.nativeElement.value = null;
this.model.control.setValue(null);
}
else {
this.el.nativeElement.value = "0";
this.model.control.setValue(0);
}
}
else {
this.el.nativeElement.type = "text";
this.el.nativeElement.type = "number";
if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) {
this.el.nativeElement.value = this.el.nativeElement.max;
this.model.control.setValue(this.el.nativeElement.valueAsNumber);
}
}
};
NeoNumbersDirective.prototype.onKeyUp = function (event) {
console.log(event);
var current = this.el.nativeElement.value;
current = current.split("-").join("");
var posPoint = current.indexOf('.');
if (posPoint > -1) {
current = current.substring(0, posPoint);
this.el.nativeElement.value = current;
}
if (this.isSpecial(event) || current == "") {
if (event.keyCode == 8 || current != "") {
this.prev = current;
}
return;
}
if (!this.isOnlyNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) {
this.el.nativeElement.value = current.substring(0, current.length - 1);
}
};
NeoNumbersDirective.prototype.onKeyDown = function (event) {
if (this.isSpecial(event)) {
return;
}
if (!this.isOnlyNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
var current = this.el.nativeElement.value;
this.prev = current;
};
NeoNumbersDirective.prototype.isSpecial = function (e) {
return e.key === 'Delete' || (e.key === 'Tab' || e.keyCode == 9) || (e.key === 'Backspace' || e.keyCode == 8) || e.key === 'ArrowLeft' ||
e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' ||
e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift' ||
(e.keyIdentifier == 'Down' || e.keyIdentifier == 'Up' || e.keyIdentifier == 'Left' || e.keyIdentifier == 'Right');
};
NeoNumbersDirective.prototype.isOnlyNumber = function (e) {
if (e instanceof KeyboardEvent) {
return ((e.key >= '0' && e.key <= '9') || (e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105));
}
else {
return (e >= '0' && e <= '9');
}
};
NeoNumbersDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: NgModel }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], NeoNumbersDirective.prototype, "isNumber", void 0);
__decorate([
Input('allowNullValue'),
__metadata("design:type", Object)
], NeoNumbersDirective.prototype, "allowNullValue", void 0);
__decorate([
HostListener('paste', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [ClipboardEvent]),
__metadata("design:returntype", void 0)
], NeoNumbersDirective.prototype, "blockPaste", null);
__decorate([
HostListener('focus'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], NeoNumbersDirective.prototype, "onfocus", null);
__decorate([
HostListener('blur'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], NeoNumbersDirective.prototype, "onBlur", null);
__decorate([
HostListener('keyup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoNumbersDirective.prototype, "onKeyUp", null);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoNumbersDirective.prototype, "onKeyDown", null);
NeoNumbersDirective = __decorate([
Directive({
selector: '[isNumber]'
}),
__metadata("design:paramtypes", [ElementRef, Renderer2, NgModel])
], NeoNumbersDirective);
return NeoNumbersDirective;
}());
var NeoAutofocusDirective = /** @class */ (function () {
function NeoAutofocusDirective(el) {
this.el = el;
}
NeoAutofocusDirective.prototype.ngOnInit = function () {
};
NeoAutofocusDirective.prototype.ngAfterViewInit = function () {
var _this = this;
this.subscription = timer(100).subscribe(function () {
if (_this.neoAutofocus) {
_this.setFocus();
}
_this.subscription.unsubscribe();
});
};
NeoAutofocusDirective.prototype.setFocus = function () {
if (this.el) {
if (this.el instanceof HTMLInputElement ||
this.el instanceof HTMLButtonElement ||
this.el instanceof HTMLSelectElement ||
this.el instanceof HTMLSelectElement) {
if (!this.el.disabled) {
this.el.focus();
}
}
else {
if (this.el && this.el.nativeElement instanceof HTMLInputElement ||
this.el.nativeElement instanceof HTMLButtonElement ||
this.el.nativeElement instanceof HTMLSelectElement) {
if (!this.el.nativeElement.disabled) {
this.el.nativeElement.focus();
}
}
else {
var input = this.el['ctrInput'];
if (input) {
input = input['nativeElement'];
if (input && input instanceof HTMLInputElement) {
if (!input.disabled) {
input.focus();
}
}
}
}
}
}
};
NeoAutofocusDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input('neoAutofocus'),
__metadata("design:type", Boolean)
], NeoAutofocusDirective.prototype, "neoAutofocus", void 0);
NeoAutofocusDirective = __decorate([
Directive({
selector: '[neoAutofocus]'
}),
__metadata("design:paramtypes", [ElementRef])
], NeoAutofocusDirective);
return NeoAutofocusDirective;
}());
var NeoChangeCommandDirective = /** @class */ (function () {
function NeoChangeCommandDirective(element) {
this.element = element;
}
NeoChangeCommandDirective.prototype.onInputChange = function (event) {
var value = this.element.nativeElement.value;
if (!this._lastValue || this._lastValue !== value) {
this._lastValue = value;
this.changeCommand.execute(value);
}
};
NeoChangeCommandDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], NeoChangeCommandDirective.prototype, "changeCommand", void 0);
__decorate([
HostListener('keyup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoChangeCommandDirective.prototype, "onInputChange", null);
NeoChangeCommandDirective = __decorate([
Directive({
// tslint:disable-next-line:directive-selector
selector: '[changeCommand]'
}),
__metadata("design:paramtypes", [ElementRef])
], NeoChangeCommandDirective);
return NeoChangeCommandDirective;
}());
var NeoDecimalNumbersDirective = /** @class */ (function () {
function NeoDecimalNumbersDirective(el, renderer, model) {
this.el = el;
this.renderer = renderer;
this.model = model;
this.allowNullValue = false;
this.decimals = 2;
this.haveDecimalPoint = false;
}
NeoDecimalNumbersDirective.prototype.ngOnInit = function () {
var _a, _b;
if (this.options && !this.options.apply) {
return;
}
this.decimals = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.decimals) !== null && _b !== void 0 ? _b : 2;
if (this.decimals == "")
this.decimals = 2;
if (this.allowNullValue === "")
this.allowNullValue = true;
this.el.nativeElement.type = "number";
this.regex = new RegExp('^[0-9]+(\\.[0-9]{0,' + this.decimals + '})?$');
};
NeoDecimalNumbersDirective.prototype.blockPaste = function (e) {
var _this = this;
if (this.options && !this.options.apply) {
return;
}
var clipboardData = e.clipboardData || window['clipboardData'];
var pastedData = clipboardData.getData('text/plain').split(",").join(".");
var posPoint = pastedData.lastIndexOf('.');
if (posPoint > -1) {
pastedData = pastedData.substring(0, posPoint).split(".").join("") + pastedData.substring(posPoint);
posPoint = pastedData.lastIndexOf('.');
if (posPoint + this.decimals < pastedData.length) {
pastedData = pastedData.substring(0, posPoint + this.decimals + 1);
}
}
var onlyNumbers = Array.from(pastedData).map(function (x) { return _this.isNumber(x); }).reduce(function (prev, el) { return prev && el; }, true);
var a = this.regex.test(pastedData);
setTimeout(function () {
if (onlyNumbers && a) {
_this.el.nativeElement.value = pastedData;
}
else {
_this.el.nativeElement.value = '0';
}
}, 10);
};
NeoDecimalNumbersDirective.prototype.onfocus = function () {
if (this.options && !this.options.apply) {
return;
}
if (this.el.nativeElement.value == "0") {
this.el.nativeElement.value = null;
}
};
NeoDecimalNumbersDirective.prototype.onBlur = function () {
if (this.options && !this.options.apply) {
return;
}
var current = this.el.nativeElement.value;
if (current == "") {
if (this.allowNullValue) {
this.el.nativeElement.value = null;
this.model.control.setValue(null);
}
else {
this.el.nativeElement.value = "0";
this.model.control.setValue(0);
}
}
else {
this.el.nativeElement.type = "text";
this.el.nativeElement.type = "number";
if (this.el.nativeElement.max && this.el.nativeElement.valueAsNumber > +this.el.nativeElement.max) {
this.el.nativeElement.value = this.el.nativeElement.max;
this.model.control.setValue(this.el.nativeElement.valueAsNumber);
}
}
};
NeoDecimalNumbersDirective.prototype.onKeyUp = function (event) {
if (this.options && !this.options.apply) {
return;
}
var current = this.el.nativeElement.value;
current = current.split("-").join("");
var posPoint = current.indexOf('.');
if (posPoint > -1) {
this.el.nativeElement.value = current.substring(0, posPoint + 1) + current.substring(posPoint).split(".").join("");
}
if (this.haveDecimalPoint && current == "" && this.prev > "") {
this.haveDecimalPoint = false;
this.el.nativeElement.value = this.prev + (this.prev.endsWith(".0") ? "" : ".0");
this.el.nativeElement.type = "text";
this.el.nativeElement.selectionStart = this.el.nativeElement.value.length - 1;
this.el.nativeElement.selectionEnd = this.el.nativeElement.value.length;
this.el.nativeElement.type = "number";
return;
}
if (this.isSpecial(event) || current == "") {
if (event.keyCode == 8 || current != "") {
this.prev = current;
var dotIndex = current.toString().indexOf('.');
if (dotIndex >= 0)
this.haveDecimalPoint = false;
}
return;
}
if (!this.isNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
if (current) {
current = current.toString();
var dotIndex = current.indexOf('.');
if ((dotIndex >= 0) && ((current.length - 1) - dotIndex > this.decimals)) {
this.renderer.setProperty(this.el.nativeElement, 'value', current.slice(0, dotIndex + this.decimals + 1));
}
}
else {
this.renderer.setProperty(this.el.nativeElement, 'value', this.prev);
}
};
NeoDecimalNumbersDirective.prototype.onKeyDown = function (event) {
if (this.options && !this.options.apply) {
return;
}
if (this.isSpecial(event)) {
return;
}
if (!this.isNumber(event)) {
event.preventDefault();
event.stopPropagation();
return false;
}
var current = this.el.nativeElement.value;
if (this.isDecimalPoint(event)) {
this.haveDecimalPoint = true;
if (!current.endsWith(".0")) {
this.el.nativeElement.value = current + ".0";
this.el.nativeElement.type = "text";
this.el.nativeElement.selectionStart = this.el.nativeElement.value.length - 1;
this.el.nativeElement.selectionEnd = this.el.nativeElement.value.length;
this.el.nativeElement.type = "number";
}
}
this.prev = current;
};
NeoDecimalNumbersDirective.prototype.isSpecial = function (e) {
return e.key === 'Delete' || (e.key === 'Tab' || e.keyCode == 9) || (e.key === 'Backspace' || e.keyCode == 8) || e.key === 'ArrowLeft' ||
e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' ||
e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'ArrowRight' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift' ||
(e.keyIdentifier == 'Down' || e.keyIdentifier == 'Up');
};
NeoDecimalNumbersDirective.prototype.isNumber = function (e) {
if (e instanceof KeyboardEvent) {
return ((e.key >= '0' && e.key <= '9') || ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105)) ||
(e.key === '.' || e.key === ',') || (e.keyCode === 188 || e.keyCode === 190 || e.keyCode === 229));
}
else {
return ((e >= '0' && e <= '9') || (e === '.' || e === ','));
}
};
NeoDecimalNumbersDirective.prototype.isDecimalPoint = function (e) {
return (e.key === '.' || e.key === ',') || (e.keyCode === 188 || e.keyCode === 190 || e.keyCode === 229);
};
NeoDecimalNumbersDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: NgModel }
]; };
__decorate([
Input('isDecimal'),
__metadata("design:type", Object)
], NeoDecimalNumbersDirective.prototype, "options", void 0);
__decorate([
Input('allowNullValue'),
__metadata("design:type", Object)
], NeoDecimalNumbersDirective.prototype, "allowNullValue", void 0);
__decorate([
HostListener('paste', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [ClipboardEvent]),
__metadata("design:returntype", void 0)
], NeoDecimalNumbersDirective.prototype, "blockPaste", null);
__decorate([
HostListener('focus'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], NeoDecimalNumbersDirective.prototype, "onfocus", null);
__decorate([
HostListener('blur'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], NeoDecimalNumbersDirective.prototype, "onBlur", null);
__decorate([
HostListener('keyup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoDecimalNumbersDirective.prototype, "onKeyUp", null);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoDecimalNumbersDirective.prototype, "onKeyDown", null);
NeoDecimalNumbersDirective = __decorate([
Directive({
selector: '[isDecimal]'
}),
__metadata("design:paramtypes", [ElementRef, Renderer2, NgModel])
], NeoDecimalNumbersDirective);
return NeoDecimalNumbersDirective;
}());
/**
* Boolean function that check if the keyboard event is not a normal key but a command like key
* Will return boolean if the key is Alt, Shift , Control, Delete, Tab, Backspace, Arrows, Home, End, PageUp and PageDown.
*
* @export
* @param e
*/
function isCommandKey(e) {
return e.key === 'Delete' || e.key === 'Tab' || e.key === 'Backspace' || e.key === 'ArrowLeft' || e.key === 'Left' ||
e.altKey || e.ctrlKey || e.key === 'Home' || e.key === 'End' || e.key === 'PageDown' || e.key === 'PageUp' ||
e.key === 'ArrowRight' || e.key === 'Right' || e.key === 'Control' || e.key === 'Alt' || e.key === 'Shift';
}
var NeoCompositeInputDirective = /** @class */ (function () {
function NeoCompositeInputDirective(el) {
this.el = el;
// Next input to move from the current input
this.previousInput = null;
// Previous input to move from the current input
this.nextInput = null;
}
NeoCompositeInputDirective.prototype.onKeyDown = function (e) {
// If the element is selected and the user presses backspace we must clear the input
if (e.key === 'Backspace' && this.elementIsSelected()) {
return true;
}
// We must move to the previous input if the user presses backspace and he is in the first position of the input
// or if he presses the left key
if (((e.key === 'Backspace') && (this.el.nativeElement.selectionStart === 0) || ((e.key === 'ArrowLeft') || (e.key === 'Left')))) {
if ((this.previousInput) && (this.previousInput instanceof HTMLInputElement) && (!this.previousInput.disabled)) {
this.previousInput.focus();
return false;
}
}
// If he presses the right arrow it must move to the next input
if (e.key === 'ArrowRight' || e.key === 'Right') {
if ((this.nextInput) && (this.nextInput instanceof HTMLInputElement) && (!this.nextInput.disabled)) {
this.nextInput.focus();
return false;
}
}
};
/**
*
* Method called on keyup to check if the pressed key is allow, if it is not it stops the event.
* If the element reached its maximum length on key pressed it must jump to the next input
* @param e
*/
NeoCompositeInputDirective.prototype.onKeyUp = function (e) {
if (isCommandKey(e)) {
return;
}
var value = this.el.nativeElement.value;
if (this.nextInput && (value.length >= this.el.nativeElement.maxLength)) {
this.nextInput.focus();
}
};
/**
* On focus we select the entire value of the input
*/
NeoCompositeInputDirective.prototype.onFocus = function () {
this.el.nativeElement.select();
};
/**
* Method to check if the element is selected
*
*/
NeoCompositeInputDirective.prototype.elementIsSelected = function () {
return this.el.nativeElement.selectionStart === 0 && this.el.nativeElement.selectionEnd !== 0;
};
NeoCompositeInputDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], NeoCompositeInputDirective.prototype, "previousInput", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NeoCompositeInputDirective.prototype, "nextInput", void 0);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoCompositeInputDirective.prototype, "onKeyDown", null);
__decorate([
HostListener('keyup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], NeoCompositeInputDirective.prototype, "onKeyUp", null);
__decorate([
HostListener('focus', []),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], NeoCompositeInputDirective.prototype, "onFocus", null);
NeoCompositeInputDirective = __decorate([
Directive({
selector: '[compositeInput]'
}),
__metadata("design:paramtypes", [ElementRef])
], NeoCompositeInputDirective);
return NeoCompositeInputDirective;
}());
var NeoMatchHeightDirective = /** @class */ (function () {
function NeoMatchHeightDirective(el) {
this.el = el;
}
NeoMatchHeightDirective.prototype.onResize = function () {
this.matchHeight(this.el.nativeElement, this.matchHeightClassName);
};
NeoMatchHeightDirective.prototype.ngAfterViewChecked = function () {
this.matchHeight(this.el.nativeElement, this.matchHeightClassName);
};
NeoMatchHeightDirective.prototype.matchHeight = function (parent, className) {
if (!parent) {
return;
}
// step 1: find all the child elements with the selected class name
var children = parent.getElementsByClassName(className);
if (!children) {
return;
}
// step 1b: reset all children height
Array.from(children).forEach(function (x) {
x.style.height = 'initial';
});
// step 2a: get all the child elements heights
var itemHeights = Array.from(children)
.map(function (x) { return x.getBoundingClientRect().height; });
// step 2b: find out the tallest
var maxHeight = itemHeights.reduce(function (prev, curr) {
return curr > prev ? curr : prev;
}, 0);
// step 3: update all the child elements to the tallest height
Array.from(children)
.forEach(function (x) { return x.style.height = maxHeight + "px"; });
};
NeoMatchHeightDirective.ctorParameters = function () { return [
{ type: ElementRef }
]; };
__decorate([
Input('neoMatchHeight'),
__metadata("design:type", String)
], NeoMatchHeightDirective.prototype, "matchHeightClassName", void 0);
__decorate([
HostListener('window:resize'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], NeoMatchHeightDirective.prototype, "onResize", null);
NeoMatchHeightDirective = __decorate([
Directive({
// tslint:disable-next-line:directive-selector
selector: '[neoMatchHeight]'
}),
__metadata("design:paramtypes", [ElementRef])
], NeoMatchHeightDirective);
return NeoMatchHeightDirective;
}());
/**
* @author slarrieu
*/
var NgbTabSetDirective = /** @class */ (function () {
function NgbTabSetDirective(_el) {
this._el = _el;
this.el = this._el;
this.onTabChanging = false;
}
NgbTabSetDirective.prototype.ngOnInit = function () {
// this.el._handleClick = this.interceptTabChange.bind(this);
var _this = this;
if (this.tabSelectedId) {
this.tabSelectedIdSubscribe = this.tabSelectedId.subscribe(function (tabSelectedId) {
if (tabSelectedId > -1) {
// const previousValue = this.tabSelectedId.value;
if (_this.el.selectedIndex !== tabSelectedId) {
_this.el.selectedIndex = tabSelectedId;
}
}
});
}
};
/* interceptTabChange(tab: MatTab, tabHeader: MatTabHeader, idx: number) {
if (this.onTabChanging) {
return true;
}
this.onTabChanging = true;
let canChange = true;
if (this.tabChangeController) {
canChange = await this.tabChangeController.canChangeTab();
}
this.onTabChanging = false;
return canChange && MatTabGroup.prototype._handleClick.apply(this.el, arguments);
} */
NgbTabSetDirective.prototype.ngOnDestroy = function () {
if (this.tabSelectedIdSubscribe) {
this.tabSelectedIdSubscribe.unsubscribe();
}
};
NgbTabSetDirective.prototype.cambiarTab = function ($event, force) {
if (force === void 0) { force = false; }
var tabSelecting = $event.nextId;
if (force || this.tabSelectedId.value !== tabSelecting) {
this.tabSelectedId.next(tabSelecting);
}
};
NgbTabSetDirective.ctorParameters = function () { return [
{ type: MatTabGroup }
]; };
__decorate([
Input(),
__metadata("design:type", BehaviorSubject)
], NgbTabSetDirective.prototype, "tabSelectedId", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], NgbTabSetDirective.prototype, "tabChangeController", void 0);
NgbTabSetDirective = __decorate([
Directive({
// tslint:disable-next-line:directive-selector
selector: '[tabSelectedId], [tabChangeController]',
}),
__metadata("design:paramtypes", [MatTabGroup])
], NgbTabSetDirective);
return NgbTabSetDirective;
}());
var NgxNeoDirectivesModule = /** @class */ (function () {
function NgxNeoDirectivesModule() {
}
NgxNeoDirectivesModule_1 = NgxNeoDirectivesModule;
NgxNeoDirectivesModule.forRoot = function (options) {
if (options === void 0) { options = { executingCssClass: 'executing' }; }
return {
ngModule: NgxNeoDirectivesModule_1,
providers: [
{ provide: COMMAND_CONFIG, useValue: options },
]
};
};
var NgxNeoDirectivesModule_1;
NgxNeoDirectivesModule = NgxNeoDirectivesModule_1 = __decorate([
NgModule({
imports: [],
declarations: [
CommandDirective,
OnReturnDirective,
StringsDirective,
NeoNumbersDirective,
NeoAutofocusDirective,
NeoChangeCommandDirective,
NeoDecimalNumbersDirective,
NeoCompositeInputDirective,
NeoMatchHeightDirective,
NgbTabSetDirective
],
exports: [
CommandDirective,
OnReturnDirective,
StringsDirective,
NeoNumbersDirective,
NeoAutofocusDirective,
NeoChangeCommandDirective,
NeoDecimalNumbersDirective,
NeoCompositeInputDirective,
NeoMatchHeightDirective,
NgbTabSetDirective
]
})
], NgxNeoDirectivesModule);
return NgxNeoDirectivesModule;
}());
/*
* Public API Surface of ngx-neo-directives
*/
/**
* Generated bundle index. Do not edit.
*/
export { COMMAND_CONFIG, COMMAND_DEFAULT_CONFIG, Command, CommandDirective, NeoAutofocusDirective, NeoChangeCommandDirective, NeoCompositeInputDirective, NeoDecimalNumbersDirective, NeoMatchHeightDirective, NeoNumbersDirective, NgxNeoDirectivesModule, OnReturnDirective, StringsDirective, isCommandKey, NeoCompositeInputDirective as ɵa, NgbTabSetDirective as ɵb };
//# sourceMappingURL=neocomplexx-ngx-neo-directives-mat.js.map