scroller.component.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import { Component, Input, ElementRef, Output, EventEmitter, Renderer2, NgZone, HostBinding, ChangeDetectionStrategy } from '@angular/core';
  6. var ScrollerComponent = /** @class */ (function () {
  7. function ScrollerComponent(ngZone, element, renderer) {
  8. this.ngZone = ngZone;
  9. this.renderer = renderer;
  10. this.scrollbarV = false;
  11. this.scrollbarH = false;
  12. this.scroll = new EventEmitter();
  13. this.scrollYPos = 0;
  14. this.scrollXPos = 0;
  15. this.prevScrollYPos = 0;
  16. this.prevScrollXPos = 0;
  17. this._scrollEventListener = null;
  18. this.element = element.nativeElement;
  19. }
  20. /**
  21. * @return {?}
  22. */
  23. ScrollerComponent.prototype.ngOnInit = /**
  24. * @return {?}
  25. */
  26. function () {
  27. // manual bind so we don't always listen
  28. if (this.scrollbarV || this.scrollbarH) {
  29. /** @type {?} */
  30. var renderer = this.renderer;
  31. this.parentElement = renderer.parentNode(renderer.parentNode(this.element));
  32. this._scrollEventListener = this.onScrolled.bind(this);
  33. this.parentElement.addEventListener('scroll', this._scrollEventListener);
  34. }
  35. };
  36. /**
  37. * @return {?}
  38. */
  39. ScrollerComponent.prototype.ngOnDestroy = /**
  40. * @return {?}
  41. */
  42. function () {
  43. if (this._scrollEventListener) {
  44. this.parentElement.removeEventListener('scroll', this._scrollEventListener);
  45. this._scrollEventListener = null;
  46. }
  47. };
  48. /**
  49. * @param {?} offsetY
  50. * @return {?}
  51. */
  52. ScrollerComponent.prototype.setOffset = /**
  53. * @param {?} offsetY
  54. * @return {?}
  55. */
  56. function (offsetY) {
  57. if (this.parentElement) {
  58. this.parentElement.scrollTop = offsetY;
  59. }
  60. };
  61. /**
  62. * @param {?} event
  63. * @return {?}
  64. */
  65. ScrollerComponent.prototype.onScrolled = /**
  66. * @param {?} event
  67. * @return {?}
  68. */
  69. function (event) {
  70. var _this = this;
  71. /** @type {?} */
  72. var dom = (/** @type {?} */ (event.currentTarget));
  73. requestAnimationFrame((/**
  74. * @return {?}
  75. */
  76. function () {
  77. _this.scrollYPos = dom.scrollTop;
  78. _this.scrollXPos = dom.scrollLeft;
  79. _this.updateOffset();
  80. }));
  81. };
  82. /**
  83. * @return {?}
  84. */
  85. ScrollerComponent.prototype.updateOffset = /**
  86. * @return {?}
  87. */
  88. function () {
  89. /** @type {?} */
  90. var direction;
  91. if (this.scrollYPos < this.prevScrollYPos) {
  92. direction = 'down';
  93. }
  94. else if (this.scrollYPos > this.prevScrollYPos) {
  95. direction = 'up';
  96. }
  97. this.scroll.emit({
  98. direction: direction,
  99. scrollYPos: this.scrollYPos,
  100. scrollXPos: this.scrollXPos
  101. });
  102. this.prevScrollYPos = this.scrollYPos;
  103. this.prevScrollXPos = this.scrollXPos;
  104. };
  105. ScrollerComponent.decorators = [
  106. { type: Component, args: [{
  107. selector: 'datatable-scroller',
  108. template: "\n <ng-content></ng-content>\n ",
  109. host: {
  110. class: 'datatable-scroll'
  111. },
  112. changeDetection: ChangeDetectionStrategy.OnPush
  113. }] }
  114. ];
  115. /** @nocollapse */
  116. ScrollerComponent.ctorParameters = function () { return [
  117. { type: NgZone },
  118. { type: ElementRef },
  119. { type: Renderer2 }
  120. ]; };
  121. ScrollerComponent.propDecorators = {
  122. scrollbarV: [{ type: Input }],
  123. scrollbarH: [{ type: Input }],
  124. scrollHeight: [{ type: HostBinding, args: ['style.height.px',] }, { type: Input }],
  125. scrollWidth: [{ type: HostBinding, args: ['style.width.px',] }, { type: Input }],
  126. scroll: [{ type: Output }]
  127. };
  128. return ScrollerComponent;
  129. }());
  130. export { ScrollerComponent };
  131. if (false) {
  132. /** @type {?} */
  133. ScrollerComponent.prototype.scrollbarV;
  134. /** @type {?} */
  135. ScrollerComponent.prototype.scrollbarH;
  136. /** @type {?} */
  137. ScrollerComponent.prototype.scrollHeight;
  138. /** @type {?} */
  139. ScrollerComponent.prototype.scrollWidth;
  140. /** @type {?} */
  141. ScrollerComponent.prototype.scroll;
  142. /** @type {?} */
  143. ScrollerComponent.prototype.scrollYPos;
  144. /** @type {?} */
  145. ScrollerComponent.prototype.scrollXPos;
  146. /** @type {?} */
  147. ScrollerComponent.prototype.prevScrollYPos;
  148. /** @type {?} */
  149. ScrollerComponent.prototype.prevScrollXPos;
  150. /** @type {?} */
  151. ScrollerComponent.prototype.element;
  152. /** @type {?} */
  153. ScrollerComponent.prototype.parentElement;
  154. /** @type {?} */
  155. ScrollerComponent.prototype.onScrollListener;
  156. /**
  157. * @type {?}
  158. * @private
  159. */
  160. ScrollerComponent.prototype._scrollEventListener;
  161. /**
  162. * @type {?}
  163. * @private
  164. */
  165. ScrollerComponent.prototype.ngZone;
  166. /**
  167. * @type {?}
  168. * @private
  169. */
  170. ScrollerComponent.prototype.renderer;
  171. }
  172. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN3aW1sYW5lL25neC1kYXRhdGFibGUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9ib2R5L3Njcm9sbGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULE1BQU0sRUFHTixXQUFXLEVBQ1gsdUJBQXVCLEVBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBSXZCO0lBa0NFLDJCQUFvQixNQUFjLEVBQUUsT0FBbUIsRUFBVSxRQUFtQjtRQUFoRSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQStCLGFBQVEsR0FBUixRQUFRLENBQVc7UUF2QjNFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQVUzQixXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBS25CLHlCQUFvQixHQUFRLElBQUksQ0FBQztRQUd2QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQzs7OztJQUVELG9DQUFROzs7SUFBUjtRQUNFLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTs7Z0JBQ2hDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTtZQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDOzs7O0lBRUQsdUNBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztTQUNsQztJQUNILENBQUM7Ozs7O0lBRUQscUNBQVM7Ozs7SUFBVCxVQUFVLE9BQWU7UUFDdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztTQUN4QztJQUNILENBQUM7Ozs7O0lBRUQsc0NBQVU7Ozs7SUFBVixVQUFXLEtBQWlCO1FBQTVCLGlCQU9DOztZQU5PLEdBQUcsR0FBWSxtQkFBUyxLQUFLLENBQUMsYUFBYSxFQUFBO1FBQ2pELHFCQUFxQjs7O1FBQUM7WUFDcEIsS0FBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQ2hDLEtBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNqQyxLQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsd0NBQVk7OztJQUFaOztZQUNNLFNBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3pDLFNBQVMsR0FBRyxNQUFNLENBQUM7U0FDcEI7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNoRCxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixTQUFTLFdBQUE7WUFDVCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDeEMsQ0FBQzs7Z0JBdEZGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUscUNBRVQ7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxrQkFBa0I7cUJBQzFCO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7OztnQkFsQkMsTUFBTTtnQkFKTixVQUFVO2dCQUdWLFNBQVM7Ozs2QkFxQlIsS0FBSzs2QkFDTCxLQUFLOytCQUVMLFdBQVcsU0FBQyxpQkFBaUIsY0FDN0IsS0FBSzs4QkFHTCxXQUFXLFNBQUMsZ0JBQWdCLGNBQzVCLEtBQUs7eUJBR0wsTUFBTTs7SUFpRVQsd0JBQUM7Q0FBQSxBQXZGRCxJQXVGQztTQTdFWSxpQkFBaUI7OztJQUM1Qix1Q0FBcUM7O0lBQ3JDLHVDQUFxQzs7SUFFckMseUNBRXFCOztJQUVyQix3Q0FFb0I7O0lBRXBCLG1DQUF5RDs7SUFFekQsdUNBQXVCOztJQUN2Qix1Q0FBdUI7O0lBQ3ZCLDJDQUEyQjs7SUFDM0IsMkNBQTJCOztJQUMzQixvQ0FBYTs7SUFDYiwwQ0FBbUI7O0lBQ25CLDZDQUFzQjs7Ozs7SUFFdEIsaURBQXlDOzs7OztJQUU3QixtQ0FBc0I7Ozs7O0lBQXVCLHFDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIEVsZW1lbnRSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBSZW5kZXJlcjIsXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIEhvc3RCaW5kaW5nLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTW91c2VFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGF0YWJsZS1zY3JvbGxlcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdkYXRhdGFibGUtc2Nyb2xsJ1xuICB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2Nyb2xsYmFyVjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzY3JvbGxiYXJIOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQucHgnKVxuICBASW5wdXQoKVxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcjtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoLnB4JylcbiAgQElucHV0KClcbiAgc2Nyb2xsV2lkdGg6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBzY3JvbGxZUG9zOiBudW1iZXIgPSAwO1xuICBzY3JvbGxYUG9zOiBudW1iZXIgPSAwO1xuICBwcmV2U2Nyb2xsWVBvczogbnVtYmVyID0gMDtcbiAgcHJldlNjcm9sbFhQb3M6IG51bWJlciA9IDA7XG4gIGVsZW1lbnQ6IGFueTtcbiAgcGFyZW50RWxlbWVudDogYW55O1xuICBvblNjcm9sbExpc3RlbmVyOiBhbnk7XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsRXZlbnRMaXN0ZW5lcjogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBlbGVtZW50OiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBtYW51YWwgYmluZCBzbyB3ZSBkb24ndCBhbHdheXMgbGlzdGVuXG4gICAgaWYgKHRoaXMuc2Nyb2xsYmFyViB8fCB0aGlzLnNjcm9sbGJhckgpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICAgIHRoaXMucGFyZW50RWxlbWVudCA9IHJlbmRlcmVyLnBhcmVudE5vZGUocmVuZGVyZXIucGFyZW50Tm9kZSh0aGlzLmVsZW1lbnQpKTtcbiAgICAgIHRoaXMuX3Njcm9sbEV2ZW50TGlzdGVuZXIgPSB0aGlzLm9uU2Nyb2xsZWQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMucGFyZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLl9zY3JvbGxFdmVudExpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc2Nyb2xsRXZlbnRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX3Njcm9sbEV2ZW50TGlzdGVuZXIpO1xuICAgICAgdGhpcy5fc2Nyb2xsRXZlbnRMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0T2Zmc2V0KG9mZnNldFk6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucGFyZW50RWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXRZO1xuICAgIH1cbiAgfVxuXG4gIG9uU2Nyb2xsZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkb206IEVsZW1lbnQgPSA8RWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFlQb3MgPSBkb20uc2Nyb2xsVG9wO1xuICAgICAgdGhpcy5zY3JvbGxYUG9zID0gZG9tLnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlT2Zmc2V0KCk6IHZvaWQge1xuICAgIGxldCBkaXJlY3Rpb246IHN0cmluZztcbiAgICBpZiAodGhpcy5zY3JvbGxZUG9zIDwgdGhpcy5wcmV2U2Nyb2xsWVBvcykge1xuICAgICAgZGlyZWN0aW9uID0gJ2Rvd24nO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zY3JvbGxZUG9zID4gdGhpcy5wcmV2U2Nyb2xsWVBvcykge1xuICAgICAgZGlyZWN0aW9uID0gJ3VwJztcbiAgICB9XG5cbiAgICB0aGlzLnNjcm9sbC5lbWl0KHtcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHNjcm9sbFlQb3M6IHRoaXMuc2Nyb2xsWVBvcyxcbiAgICAgIHNjcm9sbFhQb3M6IHRoaXMuc2Nyb2xsWFBvc1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcmV2U2Nyb2xsWVBvcyA9IHRoaXMuc2Nyb2xsWVBvcztcbiAgICB0aGlzLnByZXZTY3JvbGxYUG9zID0gdGhpcy5zY3JvbGxYUG9zO1xuICB9XG59XG4iXX0=