chrome-devtools-frontend
Version:
Chrome DevTools UI
76 lines (65 loc) • 2.33 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 Common from '../../core/common/common.js';
import * as SDK from '../../core/sdk/sdk.js';
import type * as Protocol from '../../generated/protocol.js';
import {type ContrastIssue} from './CSSOverviewCompletedView.js';
import {type UnusedDeclaration} from './CSSOverviewUnusedDeclarations.js';
export class OverviewController extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
currentUrl: string;
constructor() {
super();
this.currentUrl = SDK.TargetManager.TargetManager.instance().inspectedURL();
SDK.TargetManager.TargetManager.instance().addEventListener(
SDK.TargetManager.Events.InspectedURLChanged, this.#checkUrlAndResetIfChanged, this);
}
#checkUrlAndResetIfChanged(): void {
if (this.currentUrl === SDK.TargetManager.TargetManager.instance().inspectedURL()) {
return;
}
this.currentUrl = SDK.TargetManager.TargetManager.instance().inspectedURL();
this.dispatchEventToListeners(Events.Reset);
}
}
export type PopulateNodesEvent = {
type: 'contrast',
key: string,
section: string|undefined,
nodes: ContrastIssue[],
}|{
type: 'color',
color: string,
section: string | undefined,
nodes: {nodeId: Protocol.DOM.BackendNodeId}[],
}|{
type: 'unused-declarations',
declaration: string,
nodes: UnusedDeclaration[],
}|{
type: 'media-queries',
text: string,
nodes: Protocol.CSS.CSSMedia[],
}|{
type: 'font-info',
name: string,
nodes: {nodeId: Protocol.DOM.BackendNodeId}[],
};
export type PopulateNodesEventNodes = PopulateNodesEvent['nodes'];
export type PopulateNodesEventNodeTypes = PopulateNodesEventNodes[0];
export const enum Events {
RequestOverviewStart = 'RequestOverviewStart',
RequestNodeHighlight = 'RequestNodeHighlight',
PopulateNodes = 'PopulateNodes',
RequestOverviewCancel = 'RequestOverviewCancel',
OverviewCompleted = 'OverviewCompleted',
Reset = 'Reset',
}
export type EventTypes = {
[Events.RequestOverviewStart]: void,
[Events.RequestNodeHighlight]: number,
[Events.PopulateNodes]: {payload: PopulateNodesEvent},
[Events.RequestOverviewCancel]: void,
[Events.OverviewCompleted]: void,
[Events.Reset]: void,
};