chrome-devtools-frontend
Version:
Chrome DevTools UI
59 lines (51 loc) • 1.82 kB
text/typescript
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as Platform from '../../../core/platform/platform.js';
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
// eslint-disable-next-line @typescript-eslint/naming-convention
function WidgetfocusWidgetForNode(node: Node|null): void {
while (node) {
if (node.__widget) {
break;
}
node = node.parentNodeOrShadowHost();
}
if (!node) {
return;
}
let widget = node.__widget;
while (widget && widget.parentWidget()) {
const parentWidget = widget.parentWidget();
if (!parentWidget) {
break;
}
parentWidget.defaultFocusedChild = widget;
widget = parentWidget;
}
}
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
// eslint-disable-next-line @typescript-eslint/naming-convention
function XWidgetfocusWidgetForNode(node: Node|null): void {
node = node && node.parentNodeOrShadowHost();
const XWidgetCtor = customElements.get('x-widget');
let widget = null;
while (node) {
if (XWidgetCtor && node instanceof XWidgetCtor) {
if (widget) {
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(node as any).defaultFocusedElement = widget;
}
widget = node;
}
node = node.parentNodeOrShadowHost();
}
}
export function focusChanged(event: Event): void {
const target = event.target as HTMLElement;
const document = target ? target.ownerDocument : null;
const element = document ? Platform.DOMUtilities.deepActiveElement(document) : null;
WidgetfocusWidgetForNode(element);
XWidgetfocusWidgetForNode(element);
}