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 246x 246x 246x 246x 246x 18x 246x 228x 228x 228x 228x 228x 246x 246x 246x 1x 1x 230x 230x 230x 230x 230x 230x 230x 1x 1x 237x 237x 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);
}
}
|