Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 230x 230x 230x 1x 1x 256x 256x 256x 256x 256x 24x 256x 232x 232x 232x 232x 232x 256x 256x 256x 1x 1x 230x 230x 230x 230x 230x 230x 230x 1x 1x 247x 247x 1x | import { AfterContentInit, Directive, ElementRef, NgZone } from '@angular/core';
import { take } from 'rxjs/operators';
import { getKeyboardFocusableElements } from '../utils/internal-utils';
@Directive({
selector: '[data-gc-auto-focus-area]',
standalone: false,
})
export class AutoFocusAreaDirective implements AfterContentInit {
constructor(
private _el: ElementRef<HTMLElement>,
private _ngZone: NgZone,
) {}
public static focusInitialElement(nativeElement: HTMLElement): boolean {
const focusTarget = nativeElement.querySelector<HTMLElement>(
'[data-gc-initial-focus="true"]',
);
if (focusTarget !== null) {
focusTarget.focus();
return true;
} else {
const elements = getKeyboardFocusableElements(nativeElement);
if (elements.length > 0) {
const el = elements[0];
el.focus();
return true;
} else {
return false;
}
}
}
ngAfterContentInit() {
if (this._ngZone.isStable) {
this.focusInitialElement();
} else {
this._ngZone.onStable
.pipe(take(1))
.subscribe(this.focusInitialElement.bind(this));
}
}
focusInitialElement(): boolean {
return AutoFocusAreaDirective.focusInitialElement(this._el.nativeElement);
}
}
|