UNPKG

chrome-devtools-frontend

Version:
96 lines (79 loc) 2.62 kB
// Copyright 2017 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 IconButton from '../../../components/icon_button/icon_button.js'; import * as UI from '../../legacy.js'; import {getRegisteredProviders, Provider, registerProvider} from './FilteredListWidget.js'; import {QuickOpenImpl} from './QuickOpen.js'; let helpQuickOpenInstance: HelpQuickOpen; export class HelpQuickOpen extends Provider { private providers: { prefix: string, iconName: string, title: string, }[]; private constructor() { super(); this.providers = []; getRegisteredProviders().forEach(this.addProvider.bind(this)); } static instance(opts: { forceNew: boolean|null, } = {forceNew: null}): HelpQuickOpen { const {forceNew} = opts; if (!helpQuickOpenInstance || forceNew) { helpQuickOpenInstance = new HelpQuickOpen(); } return helpQuickOpenInstance; } private addProvider(extension: { prefix: string, iconName: string, titlePrefix: () => string, titleSuggestion?: () => string, }): void { if (extension.titleSuggestion) { this.providers.push({ prefix: extension.prefix || '', iconName: extension.iconName, title: extension.titlePrefix() + ' ' + extension.titleSuggestion(), }); } } itemCount(): number { return this.providers.length; } itemKeyAt(itemIndex: number): string { return this.providers[itemIndex].prefix; } itemScoreAt(itemIndex: number, _query: string): number { return -this.providers[itemIndex].prefix.length; } renderItem(itemIndex: number, _query: string, titleElement: Element, _subtitleElement: Element): void { const provider = this.providers[itemIndex]; const iconElement = new IconButton.Icon.Icon(); iconElement.data = { iconName: provider.iconName, color: 'var(--color-text-primary)', width: '18px', height: '18px', }; titleElement.parentElement?.parentElement?.insertBefore(iconElement, titleElement.parentElement); UI.UIUtils.createTextChild(titleElement, provider.title); } selectItem(itemIndex: number|null, _promptValue: string): void { if (itemIndex !== null) { QuickOpenImpl.show(this.providers[itemIndex].prefix); } } renderAsTwoRows(): boolean { return false; } } registerProvider({ prefix: '?', iconName: 'ic_command_help', provider: () => Promise.resolve(HelpQuickOpen.instance()), titlePrefix: () => 'Help', titleSuggestion: undefined, });