UNPKG

debug-server-next

Version:

Dev server for hippy-core.

57 lines (56 loc) 1.98 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. /* eslint-disable rulesdir/no_underscored_properties */ import * as UI from '../../legacy.js'; import { getRegisteredProviders, Provider, registerProvider } from './FilteredListWidget.js'; import { QuickOpenImpl } from './QuickOpen.js'; let helpQuickOpenInstance; export class HelpQuickOpen extends Provider { _providers; constructor() { super(); this._providers = []; getRegisteredProviders().forEach(this._addProvider.bind(this)); } static instance(opts = { forceNew: null }) { const { forceNew } = opts; if (!helpQuickOpenInstance || forceNew) { helpQuickOpenInstance = new HelpQuickOpen(); } return helpQuickOpenInstance; } _addProvider(extension) { if (extension.title) { this._providers.push({ prefix: extension.prefix || '', title: extension.title() }); } } itemCount() { return this._providers.length; } itemKeyAt(itemIndex) { return this._providers[itemIndex].prefix; } itemScoreAt(itemIndex, _query) { return -this._providers[itemIndex].prefix.length; } renderItem(itemIndex, _query, titleElement, _subtitleElement) { const provider = this._providers[itemIndex]; const prefixElement = titleElement.createChild('span', 'monospace'); prefixElement.textContent = (provider.prefix || '…') + ' '; UI.UIUtils.createTextChild(titleElement, provider.title); } selectItem(itemIndex, _promptValue) { if (itemIndex !== null) { QuickOpenImpl.show(this._providers[itemIndex].prefix); } } renderAsTwoRows() { return false; } } registerProvider({ prefix: '?', title: undefined, provider: () => Promise.resolve(HelpQuickOpen.instance()), });