chrome-devtools-frontend
Version:
Chrome DevTools UI
77 lines (63 loc) • 2.15 kB
text/typescript
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../../../kit/kit.js';
import {html, type TemplateResult} from '../../../lit/lit.js';
import {getRegisteredProviders, Provider, type ProviderRegistration, registerProvider} from './FilteredListWidget.js';
import {QuickOpenImpl} from './QuickOpen.js';
export class HelpQuickOpen extends Provider {
private providers: Array<{
prefix: string,
iconName: string,
title: string,
jslogContext: string,
}>;
constructor(jslogContext: string) {
super(jslogContext);
this.providers = [];
getRegisteredProviders().forEach(this.addProvider.bind(this));
}
private async addProvider(extension: ProviderRegistration): Promise<void> {
this.providers.push({
prefix: extension.prefix || '',
iconName: extension.iconName,
title: extension.helpTitle(),
jslogContext: (await extension.provider()).jslogContext,
});
}
override itemCount(): number {
return this.providers.length;
}
override itemKeyAt(itemIndex: number): string {
return this.providers[itemIndex].prefix;
}
override itemScoreAt(itemIndex: number, _query: string): number {
return -this.providers[itemIndex].prefix.length;
}
override renderItem(itemIndex: number, _query: string): TemplateResult {
const provider = this.providers[itemIndex];
// clang-format off
return html`
<devtools-icon class="large" name=${provider.iconName}></devtools-icon>
<div>
<div>${provider.title}</div>
</div>`;
// clang-format on
}
override jslogContextAt(itemIndex: number): string {
return this.providers[itemIndex].jslogContext;
}
override selectItem(itemIndex: number|null, _promptValue: string): void {
if (itemIndex !== null) {
QuickOpenImpl.show(this.providers[itemIndex].prefix);
}
}
}
registerProvider({
prefix: '?',
iconName: 'help',
provider: () => Promise.resolve(new HelpQuickOpen('help')),
helpTitle: () => 'Help',
titlePrefix: () => 'Help',
titleSuggestion: undefined,
});