Skip to content

Commit b52097f

Browse files
committed
return observable from registerElementForFocusClasses
1 parent 4b830d3 commit b52097f

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/lib/core/style/focus-classes.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import {Directive, Injectable, Optional, SkipSelf, Renderer, ElementRef} from '@angular/core';
2+
import {Observable} from 'rxjs/Observable';
3+
import {Subject} from 'rxjs/Subject';
24

35

46
export type FocusOrigin = 'mouse' | 'keyboard' | 'program';
@@ -21,9 +23,11 @@ export class FocusOriginMonitor {
2123
}
2224

2325
/** Register an element to receive focus classes. */
24-
registerElementForFocusClasses(element: Element, renderer: Renderer) {
25-
renderer.listen(element, 'focus', () => this._onFocus(element, renderer));
26-
renderer.listen(element, 'blur', () => this._onBlur(element, renderer));
26+
registerElementForFocusClasses(element: Element, renderer: Renderer): Observable<FocusOrigin> {
27+
let subject = new Subject<FocusOrigin>();
28+
renderer.listen(element, 'focus', () => this._onFocus(element, renderer, subject));
29+
renderer.listen(element, 'blur', () => this._onBlur(element, renderer, subject));
30+
return subject.asObservable();
2731
}
2832

2933
/** Focuses the element via the specified focus origin. */
@@ -39,21 +43,23 @@ export class FocusOriginMonitor {
3943
}
4044

4145
/** Handles focus events on a registered element. */
42-
private _onFocus(element: Element, renderer: Renderer) {
46+
private _onFocus(element: Element, renderer: Renderer, subject: Subject<FocusOrigin>) {
47+
this._origin = this._origin || 'program';
4348
renderer.setElementClass(element, 'cdk-focused', true);
4449
renderer.setElementClass(element, 'cdk-keyboard-focused', this._origin == 'keyboard');
4550
renderer.setElementClass(element, 'cdk-mouse-focused', this._origin == 'mouse');
46-
renderer.setElementClass(element, 'cdk-program-focused',
47-
!this._origin || this._origin == 'program');
51+
renderer.setElementClass(element, 'cdk-program-focused', this._origin == 'program');
52+
subject.next(this._origin);
4853
this._origin = null;
4954
}
5055

5156
/** Handles blur events on a registered element. */
52-
private _onBlur(element: Element, renderer: Renderer) {
57+
private _onBlur(element: Element, renderer: Renderer, subject: Subject<FocusOrigin>) {
5358
renderer.setElementClass(element, 'cdk-focused', false);
5459
renderer.setElementClass(element, 'cdk-keyboard-focused', false);
5560
renderer.setElementClass(element, 'cdk-mouse-focused', false);
5661
renderer.setElementClass(element, 'cdk-program-focused', false);
62+
subject.next(null);
5763
}
5864
}
5965

0 commit comments

Comments
 (0)