Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 QuickOpen.QuickOpen = class { | |
| 6 constructor() { | |
| 7 this._prefix = null; | |
| 8 this._query = ''; | |
| 9 /** @type {!Map<string, function():!Promise<!QuickOpen.FilteredListWidget.Pr ovider>>} */ | |
| 10 this._providers = new Map(); | |
| 11 /** @type {!Array<string>} */ | |
| 12 this._prefixes = []; | |
| 13 this._filteredListWidget = null; | |
| 14 self.runtime.extensions(QuickOpen.FilteredListWidget.Provider).forEach(this. _addProvider.bind(this)); | |
| 15 } | |
| 16 | |
| 17 /** | |
| 18 * @param {string} query | |
| 19 */ | |
| 20 static show(query) { | |
| 21 var quickOpen = new this(); | |
| 22 var filteredListWidget = | |
| 23 new QuickOpen.FilteredListWidget(null, this._history, quickOpen._queryCh anged.bind(quickOpen)); | |
| 24 quickOpen._filteredListWidget = filteredListWidget; | |
| 25 filteredListWidget.showAsDialog(); | |
| 26 filteredListWidget.setQuery(query); | |
| 27 } | |
| 28 | |
| 29 /** | |
| 30 * @param {!Runtime.Extension} extension | |
| 31 */ | |
| 32 _addProvider(extension) { | |
| 33 var prefix = extension.descriptor()['prefix']; | |
| 34 this._prefixes.splice(this._prefixes.lowerBound(prefix, (a, b) => b.length - a.length), 0, prefix); | |
|
pfeldman
2017/03/22 01:29:51
Sorting it afterwards the fact is actually cheaper
einbinder
2017/03/23 06:28:12
Done.
| |
| 35 this._providers.set( | |
| 36 prefix, /** @type {function():!Promise<!QuickOpen.FilteredListWidget.Pro vider>} */ | |
| 37 (extension.instance.bind(extension))); | |
| 38 } | |
| 39 | |
| 40 /** | |
| 41 * @param {string} query | |
| 42 */ | |
| 43 _queryChanged(query) { | |
| 44 var prefix = this._prefixes.find(prefix => query.startsWith(prefix)); | |
| 45 if (typeof prefix !== 'string' || this._prefix === prefix) | |
| 46 return; | |
| 47 | |
| 48 this._prefix = prefix; | |
| 49 this._filteredListWidget.setPrefix(prefix); | |
| 50 this._filteredListWidget.setProvider(null); | |
| 51 this._providers.get(prefix)().then(provider => { | |
| 52 if (this._prefix !== prefix) | |
| 53 return; | |
| 54 this._filteredListWidget.setProvider(provider); | |
| 55 this._providerLoadedForTest(provider); | |
| 56 }); | |
| 57 } | |
| 58 | |
| 59 /** | |
| 60 * @param {!QuickOpen.FilteredListWidget.Provider} provider | |
| 61 */ | |
| 62 _providerLoadedForTest(provider) { | |
| 63 } | |
| 64 }; | |
| 65 | |
| 66 QuickOpen.QuickOpen._history = []; | |
| 67 | |
| 68 /** | |
| 69 * @implements {UI.ActionDelegate} | |
| 70 */ | |
| 71 QuickOpen.QuickOpen.ShowActionDelegate = class { | |
| 72 /** | |
| 73 * @override | |
| 74 * @param {!UI.Context} context | |
| 75 * @param {string} actionId | |
| 76 * @return {boolean} | |
| 77 */ | |
| 78 handleAction(context, actionId) { | |
| 79 switch (actionId) { | |
| 80 case 'quickOpen.show': | |
| 81 QuickOpen.QuickOpen.show(''); | |
| 82 return true; | |
| 83 } | |
| 84 return false; | |
| 85 } | |
| 86 }; | |
| OLD | NEW |