@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
144 lines • 17.2 kB
JavaScript
import * as tslib_1 from "tslib";
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
import { Component, Output, EventEmitter, ViewChild, Renderer2 } from '@angular/core';
import { Keys } from '@true-directive/base';
import { MaskNumberDirective } from '../mask/mask-number.directive';
var EditorNumberComponent = /** @class */ (function () {
function EditorNumberComponent(_renderer) {
this._renderer = _renderer;
this.ie = false;
this.value = null;
this.format = '{1.2}';
this.height = 0;
this.commit = new EventEmitter();
this.cancel = new EventEmitter();
this.change = new EventEmitter();
this._initialized = false;
}
EditorNumberComponent.prototype.init = function (value, valueChanged, height, ie, wasShown) {
if (ie === void 0) { ie = false; }
if (wasShown === void 0) { wasShown = false; }
this.ie = ie;
this.valueChanged = valueChanged;
this.valueTemp = value;
this.height = height;
};
EditorNumberComponent.prototype.ngAfterContentInit = function () {
var _this = this;
if (!this.valueChanged) {
this.value = this.valueTemp;
setTimeout(function () { return _this.input.nativeElement.select(); });
this._initialized = true;
}
else {
var txt_1 = this.valueTemp;
setTimeout(function () {
if (txt_1 !== null && txt_1 !== '') {
for (var i = 0; i < txt_1.length; i++) {
var e = Keys.generateEvent(_this.input.nativeElement, 99, txt_1[i]);
_this.maskNumberDirective.processKey(e);
}
_this._initialized = true;
_this.inputChange(txt_1);
}
_this.input.nativeElement.focus();
});
}
};
EditorNumberComponent.prototype.inputMouseDown = function (e) {
e.stopPropagation();
};
EditorNumberComponent.prototype.inputChange = function (e) {
if (!this._initialized) {
return;
}
//Только если valid number. Иначе нулл
if (isNaN(e) || e === '' || e === null) {
this.change.emit(null);
return;
}
this.change.emit(+e);
};
EditorNumberComponent.prototype.inputKeyDown = function (e) {
if (e.defaultPrevented) {
return;
}
if (e.keyCode === Keys.UP ||
e.keyCode === Keys.DOWN ||
e.keyCode === Keys.PAGE_UP ||
e.keyCode === Keys.PAGE_DOWN ||
e.keyCode === Keys.TAB) {
// По идее просто их должен отработать грид
return;
}
e.stopPropagation();
if (e.keyCode === Keys.ESCAPE) {
this.cancel.emit();
return;
}
if (e.keyCode === Keys.ENTER) {
this.commit.emit(this.value);
return;
}
};
// Если у нас есть информация о высоте строки - берем её и не
// назначаем никакого класса
EditorNumberComponent.prototype.getClass = function () {
if ((this.height !== null && this.height > 0)) {
return '';
}
if (this.ie) {
return 'true-grid-editor-ie';
}
else {
return 'true-grid-editor-100p';
}
};
EditorNumberComponent.prototype.getH = function () {
if (this.height !== null && this.height > 0) {
return this.height + 'px';
}
return '100%';
};
EditorNumberComponent.prototype.getFormat = function () {
if (this.column.format !== '') {
return this.column.format;
}
return '{1}';
};
tslib_1.__decorate([
ViewChild('input', { static: true }),
tslib_1.__metadata("design:type", Object)
], EditorNumberComponent.prototype, "input", void 0);
tslib_1.__decorate([
ViewChild('input', { read: MaskNumberDirective, static: true }),
tslib_1.__metadata("design:type", MaskNumberDirective)
], EditorNumberComponent.prototype, "maskNumberDirective", void 0);
tslib_1.__decorate([
Output('commit'),
tslib_1.__metadata("design:type", EventEmitter)
], EditorNumberComponent.prototype, "commit", void 0);
tslib_1.__decorate([
Output('cancel'),
tslib_1.__metadata("design:type", EventEmitter)
], EditorNumberComponent.prototype, "cancel", void 0);
tslib_1.__decorate([
Output('change'),
tslib_1.__metadata("design:type", EventEmitter)
], EditorNumberComponent.prototype, "change", void 0);
EditorNumberComponent = tslib_1.__decorate([
Component({
selector: 'true-editor-number',
template: "<input #input\n class=\"true-grid-input true-editor-number__input true-grid__input-container\"\n [true-mask-number]=\"getFormat()\"\n [style.height]=\"getH()\"\n [ngClass]=\"getClass()\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"inputChange($event)\"\n (mousedown)=\"inputMouseDown($event)\"\n (keydown)=\"inputKeyDown($event)\" />",
styles: ["\n :host {\n padding: 0;\n }\n .true-editor-number__input {\n text-align: right;\n }\n "]
}),
tslib_1.__metadata("design:paramtypes", [Renderer2])
], EditorNumberComponent);
return EditorNumberComponent;
}());
export { EditorNumberComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9lZGl0b3JzL2VkaXRvci1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztFQUlFO0FBQ0YsT0FBTyxFQUFFLFNBQVMsRUFBUyxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJN0YsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBd0JwRTtJQXFJRSwrQkFBc0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQW5JMUMsT0FBRSxHQUFHLEtBQUssQ0FBQztRQUNYLFVBQUssR0FBa0IsSUFBSSxDQUFDO1FBRzVCLFdBQU0sR0FBRyxPQUFPLENBQUM7UUFDakIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQWNYLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcvQyxXQUFNLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHaEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBd0dpQixDQUFDO0lBdkcvQyxvQ0FBSSxHQUFKLFVBQUssS0FBVSxFQUFFLFlBQXFCLEVBQUUsTUFBYyxFQUFFLEVBQW1CLEVBQUUsUUFBeUI7UUFBOUMsbUJBQUEsRUFBQSxVQUFtQjtRQUFFLHlCQUFBLEVBQUEsZ0JBQXlCO1FBQ3BHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0s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UUFBUSxFQUFFLHViQVFzQztxQkFDdkMsa0hBT047U0FDRixDQUFDO2lEQXNJK0IsU0FBUztPQXJJL0IscUJBQXFCLENBc0lqQztJQUFELDRCQUFDO0NBQUEsQUF0SUQsSUFzSUM7U0F0SVkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIEBsaW5rIGh0dHBzOi8vdHJ1ZWRpcmVjdGl2ZS5jb20vXHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4qL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgR3JpZFN0YXRlU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEtleXMgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcblxyXG5pbXBvcnQgeyBNYXNrTnVtYmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vbWFzay9tYXNrLW51bWJlci5kaXJlY3RpdmUnO1xyXG5cclxuaW1wb3J0IHsgSUVkaXRvciB9IGZyb20gXCIuL2VkaXRvci5pbnRlcmZhY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1lZGl0b3ItbnVtYmVyJyxcclxuICB0ZW1wbGF0ZTogYDxpbnB1dCAjaW5wdXRcclxuICAgICAgICAgICAgICBjbGFzcz1cInRydWUtZ3JpZC1pbnB1dCB0cnVlLWVkaXRvci1udW1iZXJfX2lucHV0IHRydWUtZ3JpZF9faW5wdXQtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICBbdHJ1ZS1tYXNrLW51bWJlcl09XCJnZXRGb3JtYXQoKVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRIKClcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKClcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiaW5wdXRNb3VzZURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiaW5wdXRLZXlEb3duKCRldmVudClcIiAvPmAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgOmhvc3Qge1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgfVxyXG4gICAgLnRydWUtZWRpdG9yLW51bWJlcl9faW5wdXQge1xyXG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIH1cclxuICAgIGBdXHJcbiAgfSlcclxuZXhwb3J0IGNsYXNzIEVkaXRvck51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIElFZGl0b3Ige1xyXG5cclxuICBpZSA9IGZhbHNlO1xyXG4gIHZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB2YWx1ZVRlbXA6IGFueTtcclxuICB2YWx1ZUNoYW5nZWQ6IGJvb2xlYW47XHJcbiAgZm9ybWF0ID0gJ3sxLjJ9JztcclxuICBoZWlnaHQgPSAwO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHtzdGF0aWM6IHRydWV9KVxyXG4gIGlucHV0OiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0Jywge3JlYWQ6IE1hc2tOdW1iZXJEaXJlY3RpdmUsIHN0YXRpYzogdHJ1ZX0pXHJcbiAgbWFza051bWJlckRpcmVjdGl2ZTogTWFza051bWJlckRpcmVjdGl2ZTtcclxuXHJcbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgSUVkaXRvclxyXG4gIHN0YXRlOiBHcmlkU3RhdGVTZXJ2aWNlO1xyXG4gIGNvbHVtbjogQ29sdW1uO1xyXG4gIHJvdzogYW55O1xyXG5cclxuICBAT3V0cHV0KCdjb21taXQnKVxyXG4gIGNvbW1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoJ2NhbmNlbCcpXHJcbiAgY2FuY2VsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoJ2NoYW5nZScpXHJcbiAgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBpbml0KHZhbHVlOiBhbnksIHZhbHVlQ2hhbmdlZDogYm9vbGVhbiwgaGVpZ2h0OiBudW1iZXIsIGllOiBib29sZWFuID0gZmFsc2UsIHdhc1Nob3duOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuaWUgPSBpZTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdmFsdWVDaGFuZ2VkO1xyXG4gICAgdGhpcy52YWx1ZVRlbXAgPSB2YWx1ZTtcclxuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgaWYoIXRoaXMudmFsdWVDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlVGVtcDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCkpO1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0eHQgPSB0aGlzLnZhbHVlVGVtcDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR4dCAhPT0gbnVsbCAmJiB0eHQgIT09ICcnKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlID0gS2V5cy5nZW5lcmF0ZUV2ZW50KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgOTksIHR4dFtpXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWFza051bWJlckRpcmVjdGl2ZS5wcm9jZXNzS2V5KGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pbnB1dENoYW5nZSh0eHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnB1dE1vdXNlRG93bihlOiBhbnkpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dENoYW5nZShlOiBhbnkpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL9Ci0L7Qu9GM0LrQviDQtdGB0LvQuCB2YWxpZCBudW1iZXIuINCY0L3QsNGH0LUg0L3Rg9C70LtcclxuICAgIGlmIChpc05hTihlKSB8fCBlID09PSAnJyB8fCBlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoK2UpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRLZXlEb3duKGU6IGFueSkge1xyXG5cclxuICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuVVAgfHxcclxuICAgICAgICBlLmtleUNvZGUgPT09IEtleXMuRE9XTiB8fFxyXG4gICAgICAgIGUua2V5Q29kZSA9PT0gS2V5cy5QQUdFX1VQIHx8XHJcbiAgICAgICAgZS5rZXlDb2RlID09PSBLZXlzLlBBR0VfRE9XTiB8fFxyXG4gICAgICAgIGUua2V5Q29kZSA9PT0gS2V5cy5UQUIpIHtcclxuICAgICAgLy8g0J/QviDQuNC00LXQtSDQv9GA0L7RgdGC0L4g0LjRhSDQtNC+0LvQttC10L0g0L7RgtGA0LDQsdC+0YLQsNGC0Ywg0LPRgNC40LRcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gS2V5cy5FU0NBUEUpIHtcclxuICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gS2V5cy5FTlRFUikge1xyXG4gICAgICB0aGlzLmNvbW1pdC5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDQldGB0LvQuCDRgyDQvdCw0YEg0LXRgdGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LLRi9GB0L7RgtC1INGB0YLRgNC+0LrQuCAtINCx0LXRgNC10Lwg0LXRkSDQuCDQvdC1XHJcbiAgLy8g0L3QsNC30L3QsNGH0LDQtdC8INC90LjQutCw0LrQvtCz0L4g0LrQu9Cw0YHRgdCwXHJcbiAgZ2V0Q2xhc3MoKSB7XHJcblxyXG4gICAgaWYgKCh0aGlzLmhlaWdodCAhPT0gbnVsbCAmJiB0aGlzLmhlaWdodCA+IDApKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pZSkge1xyXG4gICAgICByZXR1cm4gJ3RydWUtZ3JpZC1lZGl0b3ItaWUnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd0cnVlLWdyaWQtZWRpdG9yLTEwMHAnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SCgpIHtcclxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCAmJiB0aGlzLmhlaWdodCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0ICsgJ3B4JztcclxuICAgIH1cclxuICAgIHJldHVybiAnMTAwJSc7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtYXQoKSB7XHJcbiAgICBpZiAodGhpcy5jb2x1bW4uZm9ybWF0ICE9PSAnJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZm9ybWF0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICd7MX0nO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxufVxyXG4iXX0=