@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
112 lines • 16.6 kB
JavaScript
import * as tslib_1 from "tslib";
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* alx@truedirective.com
* @link https://truedirective.com/
* @license MIT
*/
import { Injectable } from '@angular/core';
var BaseComponent = /** @class */ (function () {
function BaseComponent() {
this.uiAction = null;
this.windowResizeBound = null;
this.touchMoveListenFunc = null;
this.touchEndListenFunc = null;
this.touchCancelListenFunc = null;
this._touchListener = null;
}
BaseComponent.prototype.addWindowResizeListener = function () {
if (!this.windowResizeBound) {
this.windowResizeBound = this.windowResize.bind(this);
}
window.addEventListener('resize', this.windowResizeBound, false);
};
BaseComponent.prototype.addDocumentMouseListeners = function () {
if (!this.documentMouseMoveBound) {
this.documentMouseMoveBound = this.documentMouseMove.bind(this);
}
if (!this.documentMouseUpBound) {
this.documentMouseUpBound = this.documentMouseUp.bind(this);
}
document.addEventListener('mousemove', this.documentMouseMoveBound, false);
document.addEventListener('mouseup', this.documentMouseUpBound, false);
};
BaseComponent.prototype.removeDocumentMouseListeners = function () {
if (this.documentMouseMoveBound) {
document.removeEventListener('mousemove', this.documentMouseMoveBound, false);
}
if (this.documentMouseUpBound) {
document.removeEventListener('mouseup', this.documentMouseUpBound, false);
}
this.documentMouseMoveBound = null;
this.documentMouseUpBound = null;
};
BaseComponent.prototype.addTouchListeners = function (element) {
this.removeTouchListeners();
this.touchStartBound = this.touchStart.bind(this);
this.touchEndBound = this.touchEnd.bind(this);
this.touchCancelBound = this.touchCancel.bind(this);
element.addEventListener('touchstart', this.touchStartBound, { capture: false, passive: true, once: false });
element.addEventListener('touchend', this.touchEndBound, { capture: false, passive: true, once: false });
element.addEventListener('touchcancel', this.touchCancelBound, { capture: false, passive: true, once: false });
this._touchListener = element;
};
BaseComponent.prototype.removeTouchListeners = function () {
if (this.touchEndBound) {
this._touchListener.removeEventListener('touchend', this.touchEndBound, false);
}
if (this.touchStartBound) {
this._touchListener.removeEventListener('touchstart', this.touchStartBound, false);
}
if (this.touchCancelBound) {
this._touchListener.removeEventListener('touchcancel', this.touchCancelBound, false);
}
this.touchStartBound = null;
this.touchEndBound = null;
this.touchCancelBound = null;
this._touchListener = null;
};
BaseComponent.prototype.removeTouchMoveListeners = function () {
// remove previous listeners
if (this.touchMoveListenFunc) {
this.touchMoveListenFunc();
}
if (this.touchEndListenFunc) {
this.touchEndListenFunc();
}
if (this.touchCancelListenFunc) {
this.touchCancelListenFunc();
}
this.touchMoveListenFunc = null;
this.touchEndListenFunc = null;
this.touchCancelListenFunc = null;
};
BaseComponent.prototype.windowResize = function (e) { };
BaseComponent.prototype.touchStart = function (e) { };
BaseComponent.prototype.touchEnd = function (e) { };
BaseComponent.prototype.touchCancel = function (e) { };
BaseComponent.prototype.documentMouseMove = function (e) { };
BaseComponent.prototype.documentMouseUp = function (e) {
this.removeDocumentMouseListeners();
};
BaseComponent.prototype.canDrop = function (mouseAction, show) { };
BaseComponent.prototype.dragInProcess = function (value) { };
BaseComponent.prototype.resizeInProcess = function (value) { };
BaseComponent.prototype.showHeaderBtn = function (fieldName) { };
BaseComponent.prototype.hideHeaderBtns = function () { };
BaseComponent.prototype.ngOnDestroy = function () {
if (this.windowResizeBound) {
window.removeEventListener('resize', this.windowResizeBound, false);
}
this.windowResizeBound = null;
this.removeDocumentMouseListeners();
this.removeTouchMoveListeners();
this.removeTouchListeners();
};
BaseComponent = tslib_1.__decorate([
Injectable()
], BaseComponent);
return BaseComponent;
}());
export { BaseComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0VBS0U7QUFDRixPQUFPLEVBQUUsVUFBVSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUtsRjtJQURBO1FBR1ksYUFBUSxHQUFhLElBQUksQ0FBQztRQVUxQixzQkFBaUIsR0FBUSxJQUFJLENBQUM7UUFFOUIsd0JBQW1CLEdBQVEsSUFBSSxDQUFDO1FBQ2hDLHVCQUFrQixHQUFRLElBQUksQ0FBQztRQUMvQiwwQkFBcUIsR0FBUyxJQUFJLENBQUM7UUFFckMsbUJBQWMsR0FBZ0IsSUFBSSxDQUFDO0lBdUg3QyxDQUFDO0lBckhXLCtDQUF1QixHQUFqQztRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVTLGlEQUF5QixHQUFuQztRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakU7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3RDtRQUVELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxD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QUFDO1FBRTlCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUF4SW1CLGFBQWE7UUFEbEMsVUFBVSxFQUFFO09BQ1MsYUFBYSxDQXlJbEM7SUFBRCxvQkFBQztDQUFBLEFBeklELElBeUlDO1NBeklxQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIGFseEB0cnVlZGlyZWN0aXZlLmNvbVxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVJQWN0aW9uIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByb3RlY3RlZCB1aUFjdGlvbjogVUlBY3Rpb24gPSBudWxsO1xyXG5cclxuICAvLyDQodC70YPRiNCw0YLQtdC70Lgg0YHQvtCx0YvRgtC40Lkg0LTQvtC60YPQvNC10L3RgtCwLiDQndGD0LbQvdGLINGC0L7Qu9GM0LrQviDQv9GA0Lgg0L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjQuCDQutC+0LvQvtC90L7QuiDQuCDQstGL0LTQtdC70LXQvdC40Lgg0L7QsdC70LDRgdGC0LhcclxuICBwcml2YXRlIGRvY3VtZW50TW91c2VNb3ZlQm91bmQ6IGFueTtcclxuICBwcml2YXRlIGRvY3VtZW50TW91c2VVcEJvdW5kOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgdG91Y2hTdGFydEJvdW5kOiBhbnk7XHJcbiAgcHJpdmF0ZSB0b3VjaEVuZEJvdW5kOiBhbnk7XHJcbiAgcHJpdmF0ZSB0b3VjaENhbmNlbEJvdW5kOiBhbnk7XHJcblxyXG4gIHByb3RlY3RlZCB3aW5kb3dSZXNpemVCb3VuZDogYW55ID0gbnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIHRvdWNoTW92ZUxpc3RlbkZ1bmM6IGFueSA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHRvdWNoRW5kTGlzdGVuRnVuYzogYW55ID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgdG91Y2hDYW5jZWxMaXN0ZW5GdW5jOiBhbnkgID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfdG91Y2hMaXN0ZW5lcjogSFRNTEVsZW1lbnQgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgYWRkV2luZG93UmVzaXplTGlzdGVuZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMud2luZG93UmVzaXplQm91bmQpIHtcclxuICAgICAgdGhpcy53aW5kb3dSZXNpemVCb3VuZCA9IHRoaXMud2luZG93UmVzaXplLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMud2luZG93UmVzaXplQm91bmQsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhZGREb2N1bWVudE1vdXNlTGlzdGVuZXJzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRvY3VtZW50TW91c2VNb3ZlQm91bmQpIHtcclxuICAgICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZUJvdW5kID0gdGhpcy5kb2N1bWVudE1vdXNlTW92ZS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kb2N1bWVudE1vdXNlVXBCb3VuZCkge1xyXG4gICAgICB0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kID0gdGhpcy5kb2N1bWVudE1vdXNlVXAuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmRvY3VtZW50TW91c2VNb3ZlQm91bmQsIGZhbHNlKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVtb3ZlRG9jdW1lbnRNb3VzZUxpc3RlbmVycygpIHtcclxuXHJcbiAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlTW92ZUJvdW5kKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuZG9jdW1lbnRNb3VzZU1vdmVCb3VuZCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kKSB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmRvY3VtZW50TW91c2VVcEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kb2N1bWVudE1vdXNlTW92ZUJvdW5kID0gbnVsbDtcclxuICAgIHRoaXMuZG9jdW1lbnRNb3VzZVVwQm91bmQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFkZFRvdWNoTGlzdGVuZXJzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICB0aGlzLnJlbW92ZVRvdWNoTGlzdGVuZXJzKCk7XHJcbiAgICB0aGlzLnRvdWNoU3RhcnRCb3VuZCA9IHRoaXMudG91Y2hTdGFydC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy50b3VjaEVuZEJvdW5kID0gdGhpcy50b3VjaEVuZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy50b3VjaENhbmNlbEJvdW5kID0gdGhpcy50b3VjaENhbmNlbC5iaW5kKHRoaXMpO1xyXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy50b3VjaFN0YXJ0Qm91bmQsIHtjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSwgb25jZTogZmFsc2V9KTtcclxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLnRvdWNoRW5kQm91bmQsIHtjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSwgb25jZTogZmFsc2V9KTtcclxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0aGlzLnRvdWNoQ2FuY2VsQm91bmQsIHtjYXB0dXJlOiBmYWxzZSwgcGFzc2l2ZTogdHJ1ZSwgb25jZTogZmFsc2V9KTtcclxuICAgIHRoaXMuX3RvdWNoTGlzdGVuZXIgPSBlbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlbW92ZVRvdWNoTGlzdGVuZXJzKCkge1xyXG4gICAgaWYgKHRoaXMudG91Y2hFbmRCb3VuZCkge1xyXG4gICAgICB0aGlzLl90b3VjaExpc3RlbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy50b3VjaEVuZEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG91Y2hTdGFydEJvdW5kKSB7XHJcbiAgICAgIHRoaXMuX3RvdWNoTGlzdGVuZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMudG91Y2hTdGFydEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG91Y2hDYW5jZWxCb3VuZCkge1xyXG4gICAgICB0aGlzLl90b3VjaExpc3RlbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy50b3VjaENhbmNlbEJvdW5kLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50b3VjaFN0YXJ0Qm91bmQgPSBudWxsO1xyXG4gICAgdGhpcy50b3VjaEVuZEJvdW5kID0gbnVsbDtcclxuICAgIHRoaXMudG91Y2hDYW5jZWxCb3VuZCA9IG51bGw7XHJcbiAgICB0aGlzLl90b3VjaExpc3RlbmVyID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZW1vdmVUb3VjaE1vdmVMaXN0ZW5lcnMoKSB7XHJcbiAgICAvLyByZW1vdmUgcHJldmlvdXMgbGlzdGVuZXJzXHJcbiAgICBpZiAodGhpcy50b3VjaE1vdmVMaXN0ZW5GdW5jKSB7XHJcbiAgICAgIHRoaXMudG91Y2hNb3ZlTGlzdGVuRnVuYygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudG91Y2hFbmRMaXN0ZW5GdW5jKSB7XHJcbiAgICAgIHRoaXMudG91Y2hFbmRMaXN0ZW5GdW5jKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50b3VjaENhbmNlbExpc3RlbkZ1bmMpIHtcclxuICAgICAgdGhpcy50b3VjaENhbmNlbExpc3RlbkZ1bmMoKTtcclxuICAgIH1cclxuICAgIHRoaXMudG91Y2hNb3ZlTGlzdGVuRnVuYyA9IG51bGw7XHJcbiAgICB0aGlzLnRvdWNoRW5kTGlzdGVuRnVuYyA9IG51bGw7XHJcbiAgICB0aGlzLnRvdWNoQ2FuY2VsTGlzdGVuRnVuYyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgd2luZG93UmVzaXplKGU6IGFueSkgeyB9XHJcblxyXG4gIHB1YmxpYyB0b3VjaFN0YXJ0KGU6IGFueSkgeyB9XHJcblxyXG4gIHB1YmxpYyB0b3VjaEVuZChlOiBhbnkpIHsgfVxyXG5cclxuICBwdWJsaWMgdG91Y2hDYW5jZWwoZTogYW55KSB7IH1cclxuXHJcbiAgcHJvdGVjdGVkIGRvY3VtZW50TW91c2VNb3ZlKGU6IE1vdXNlRXZlbnQpIHsgfVxyXG5cclxuICBwcm90ZWN0ZWQgZG9jdW1lbnRNb3VzZVVwKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRNb3VzZUxpc3RlbmVycygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbkRyb3AobW91c2VBY3Rpb246IFVJQWN0aW9uLCBzaG93OiBib29sZWFuKTogYW55IHsgfVxyXG5cclxuICBwdWJsaWMgZHJhZ0luUHJvY2Vzcyh2YWx1ZTogYm9vbGVhbikgeyB9XHJcblxyXG4gIHB1YmxpYyByZXNpemVJblByb2Nlc3ModmFsdWU6IGJvb2xlYW4pIHsgfVxyXG5cclxuICBwdWJsaWMgc2hvd0hlYWRlckJ0bihmaWVsZE5hbWU6IHN0cmluZykgeyB9XHJcblxyXG4gIHB1YmxpYyBoaWRlSGVhZGVyQnRucygpIHsgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuXHJcbiAgICBpZiAodGhpcy53aW5kb3dSZXNpemVCb3VuZCkge1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy53aW5kb3dSZXNpemVCb3VuZCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud2luZG93UmVzaXplQm91bmQgPSBudWxsO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRNb3VzZUxpc3RlbmVycygpO1xyXG4gICAgdGhpcy5yZW1vdmVUb3VjaE1vdmVMaXN0ZW5lcnMoKTtcclxuICAgIHRoaXMucmVtb3ZlVG91Y2hMaXN0ZW5lcnMoKTtcclxuICB9XHJcbn1cclxuIl19