Files
react-native-devtools-frontend/front_end/css_overview/CSSOverviewSidebarPanel.js
T
Jan Scheffler e348fe9424 Migrate front_end/css_overview to devtools_entrypoint
R=aerotwist@chromium.org, jacktfranklin@chromium.org

Bug: 1101738
Change-Id: I406acc5e456237fda0d5c6b468f66d6c0b66fbc8
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2323621
Commit-Queue: Jan Scheffler <janscheffler@chromium.org>
Auto-Submit: Jan Scheffler <janscheffler@chromium.org>
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
Reviewed-by: Paul Lewis <aerotwist@chromium.org>
2020-07-28 19:16:12 +00:00

83 lines
2.3 KiB
JavaScript

// 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.
// @ts-nocheck
// TODO(crbug.com/1011811): Enable TypeScript compiler checks
import * as UI from '../ui/ui.js';
export class CSSOverviewSidebarPanel extends UI.Widget.VBox {
static get ITEM_CLASS_NAME() {
return 'overview-sidebar-panel-item';
}
static get SELECTED() {
return 'selected';
}
constructor() {
super(true);
this.registerRequiredCSS('css_overview/cssOverviewSidebarPanel.css');
this.contentElement.classList.add('overview-sidebar-panel');
this.contentElement.addEventListener('click', this._onItemClick.bind(this));
// Clear overview.
const clearResultsButton = new UI.Toolbar.ToolbarButton(ls`Clear overview`, 'largeicon-clear');
clearResultsButton.addEventListener(UI.Toolbar.ToolbarButton.Events.Click, this._reset, this);
// Toolbar.
const toolbarElement = this.contentElement.createChild('div', 'overview-toolbar');
const toolbar = new UI.Toolbar.Toolbar('', toolbarElement);
toolbar.appendToolbarItem(clearResultsButton);
}
addItem(name, id) {
const item = this.contentElement.createChild('div', CSSOverviewSidebarPanel.ITEM_CLASS_NAME);
item.textContent = name;
item.dataset.id = id;
}
_reset() {
this.dispatchEventToListeners(SidebarEvents.Reset);
}
_deselectAllItems() {
const items = this.contentElement.querySelectorAll(`.${CSSOverviewSidebarPanel.ITEM_CLASS_NAME}`);
for (const item of items) {
item.classList.remove(CSSOverviewSidebarPanel.SELECTED);
}
}
_onItemClick(event) {
const target = event.path[0];
if (!target.classList.contains(CSSOverviewSidebarPanel.ITEM_CLASS_NAME)) {
return;
}
const {id} = target.dataset;
this.select(id);
this.dispatchEventToListeners(SidebarEvents.ItemSelected, id);
}
select(id) {
const target = this.contentElement.querySelector(`[data-id=${CSS.escape(id)}]`);
if (!target) {
return;
}
if (target.classList.contains(CSSOverviewSidebarPanel.SELECTED)) {
return;
}
this._deselectAllItems();
target.classList.add(CSSOverviewSidebarPanel.SELECTED);
}
}
export const SidebarEvents = {
ItemSelected: Symbol('ItemSelected'),
Reset: Symbol('Reset')
};