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 |