summaryrefslogtreecommitdiffstats
path: root/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts
diff options
context:
space:
mode:
Diffstat (limited to 'sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts')
-rw-r--r--sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts63
1 files changed, 63 insertions, 0 deletions
diff --git a/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts b/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts
new file mode 100644
index 00000000..fe7b041c
--- /dev/null
+++ b/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts
@@ -0,0 +1,63 @@
+/**
+ * @license
+ * Copyright Google Inc. All Rights Reserved.
+ *
+ * Use of this source code is governed by an MIT-style license that can be
+ * found in the LICENSE file at https://angular.io/license
+ */
+/* tslint:disable:array-type member-access variable-name typedef
+ only-arrow-functions directive-class-suffix component-class-suffix
+ component-selector*/
+import {Directive, ElementRef, NgZone, OnDestroy, OnInit, Renderer2} from '@angular/core';
+import {Observable} from 'rxjs/Observable';
+import {Subject} from 'rxjs/Subject';
+
+import {ScrollDispatcher} from './scroll-dispatcher';
+
+
+/**
+ * Sends an event when the directive's element is scrolled. Registers itself
+ * with the ScrollDispatcher service to include itself as part of its collection
+ * of scrolling events that it can be listened to through the service.
+ */
+@Directive({selector: '[cdk-scrollable], [cdkScrollable]'})
+export class Scrollable implements OnInit, OnDestroy {
+ private _elementScrolled: Subject<Event> = new Subject();
+ private _scrollListener: Function|null;
+
+ constructor(
+ private _elementRef: ElementRef, private _scroll: ScrollDispatcher,
+ private _ngZone: NgZone, private _renderer: Renderer2) {}
+
+ ngOnInit() {
+ this._scrollListener = this._ngZone.runOutsideAngular(() => {
+ return this._renderer.listen(
+ this.getElementRef().nativeElement, 'scroll', (event: Event) => {
+ this._elementScrolled.next(event);
+ });
+ });
+
+ this._scroll.register(this);
+ }
+
+ ngOnDestroy() {
+ this._scroll.deregister(this);
+
+ if (this._scrollListener) {
+ this._scrollListener();
+ this._scrollListener = null;
+ }
+ }
+
+ /**
+ * Returns observable that emits when a scroll event is fired on the host
+ * element.
+ */
+ elementScrolled(): Observable<any> {
+ return this._elementScrolled.asObservable();
+ }
+
+ getElementRef(): ElementRef {
+ return this._elementRef;
+ }
+}