| // 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. |
| |
| export default class CSSOverviewSidebarPanel extends UI.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.ToolbarButton(ls`Clear overview`, 'largeicon-clear'); |
| clearResultsButton.addEventListener(UI.ToolbarButton.Events.Click, this._reset, this); |
| |
| // Toolbar. |
| const toolbarElement = this.contentElement.createChild('div', 'overview-toolbar'); |
| const toolbar = new UI.Toolbar('', toolbarElement); |
| toolbar.appendToolbarItem(clearResultsButton); |
| } |
| |
| addItem(name, id) { |
| const item = this.contentElement.createChild('div', CssOverview.CSSOverviewSidebarPanel.ITEM_CLASS_NAME); |
| item.textContent = name; |
| item.dataset.id = id; |
| } |
| |
| _reset() { |
| this.dispatchEventToListeners(SidebarEvents.Reset); |
| } |
| |
| _deselectAllItems() { |
| const items = this.contentElement.querySelectorAll(`.${CssOverview.CSSOverviewSidebarPanel.ITEM_CLASS_NAME}`); |
| for (const item of items) { |
| item.classList.remove(CssOverview.CSSOverviewSidebarPanel.SELECTED); |
| } |
| } |
| |
| _onItemClick(event) { |
| const target = event.path[0]; |
| if (!target.classList.contains(CssOverview.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(CssOverview.CSSOverviewSidebarPanel.SELECTED)) { |
| return; |
| } |
| |
| this._deselectAllItems(); |
| target.classList.add(CssOverview.CSSOverviewSidebarPanel.SELECTED); |
| } |
| } |
| |
| export const SidebarEvents = { |
| ItemSelected: Symbol('ItemSelected'), |
| Reset: Symbol('Reset') |
| }; |
| |
| /* Legacy exported object */ |
| self.CssOverview = self.CssOverview || {}; |
| |
| /* Legacy exported object */ |
| CssOverview = CssOverview || {}; |
| |
| /** |
| * @constructor |
| */ |
| CssOverview.CSSOverviewSidebarPanel = CSSOverviewSidebarPanel; |
| |
| CssOverview.SidebarEvents = SidebarEvents; |