Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/quick_open/QuickOpen.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/quick_open/QuickOpen.js b/third_party/WebKit/Source/devtools/front_end/quick_open/QuickOpen.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6bb4a91783ffce513e293b04ae7c3ce120ecee0b |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/devtools/front_end/quick_open/QuickOpen.js |
| @@ -0,0 +1,87 @@ |
| +// Copyright 2016 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. |
| + |
| +QuickOpen.QuickOpen = class { |
| + /** |
| + * @param {!QuickOpen.FilteredListWidget} filtedListWidget |
| + */ |
| + constructor(filtedListWidget) { |
| + this._prefix = null; |
|
einbinder
2017/03/08 22:39:57
I could expose _prefix on the filteredListWidget,
|
| + this._query = ''; |
| + /** @type {!Map<string, function():!Promise<!QuickOpen.FilteredListWidget.Provider>>} */ |
| + this._providers = new Map(); |
| + /** @type {!Array<string>} */ |
| + this._prefixes = []; |
| + this._filteredListWidget = filtedListWidget; |
| + self.runtime.extensions(QuickOpen.FilteredListWidget.Provider).forEach(this._addProvider.bind(this)); |
| + } |
| + |
| + /** |
| + * @param {string} query |
| + */ |
| + static show(query) { |
| + var filteredListWidget = new QuickOpen.FilteredListWidget(null, this._history); |
| + new this(filteredListWidget); |
| + filteredListWidget.showAsDialog(); |
| + filteredListWidget.setQuery(query); |
| + } |
| + |
| + /** |
| + * @param {!Runtime.Extension} extension |
| + */ |
| + _addProvider(extension) { |
| + var prefix = extension.descriptor()['prefix']; |
| + this._prefixes.splice(this._prefixes.lowerBound((a, b) => b.length - a.length), 0, prefix); |
| + this._providers.set( |
| + prefix, /** @type {function():!Promise<!QuickOpen.FilteredListWidget.Provider>} */ |
| + (extension.instance.bind(extension))); |
| + } |
| + |
| + /** |
| + * @param {string} query |
| + */ |
| + _queryChanged(query) { |
| + var prefix = this._prefixes.find(prefix => query.startsWith(prefix)); |
| + if (typeof prefix !== 'string' || this._prefix === prefix) |
| + return; |
| + |
| + this._prefix = prefix; |
| + this._filteredListWidget.setPrefix(prefix); |
| + this._filteredListWidget.setProvider(null); |
| + this._providers.get(prefix)().then(provider => { |
| + if (this._prefix !== prefix) |
| + return; |
| + this._filteredListWidget.setProvider(provider); |
| + this._providerLoadedForTest(provider); |
| + }); |
| + } |
| + |
| + /** |
| + * @param {!QuickOpen.FilteredListWidget.Provider} provider |
| + */ |
| + _providerLoadedForTest(provider) { |
| + } |
| +}; |
| + |
| +QuickOpen.QuickOpen._history = []; |
| + |
| +/** |
| + * @implements {UI.ActionDelegate} |
| + */ |
| +QuickOpen.QuickOpen.ShowActionDelegate = class { |
| + /** |
| + * @override |
| + * @param {!UI.Context} context |
| + * @param {string} actionId |
| + * @return {boolean} |
| + */ |
| + handleAction(context, actionId) { |
| + switch (actionId) { |
| + case 'quickOpen.show': |
| + QuickOpen.QuickOpen.show(''); |
| + return true; |
| + } |
| + return false; |
| + } |
| +}; |