| Index: third_party/WebKit/Source/devtools/front_end/sources/OutlineQuickOpen.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sources/OutlineQuickOpen.js b/third_party/WebKit/Source/devtools/front_end/sources/OutlineQuickOpen.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..90688271798789eced4b42ff05379bb64e28a258
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sources/OutlineQuickOpen.js
|
| @@ -0,0 +1,123 @@
|
| +// 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.
|
| +
|
| +/**
|
| + * @unrestricted
|
| + */
|
| +Sources.OutlineQuickOpen = class extends QuickOpen.FilteredListWidget.Provider {
|
| + constructor() {
|
| + super();
|
| + this._items = [];
|
| + this._active = false;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + attach() {
|
| + this._items = [];
|
| + this._active = false;
|
| +
|
| + var uiSourceCode = this._currentUISourceCode();
|
| + if (uiSourceCode) {
|
| + this._active = Common.formatterWorkerPool.outlineForMimetype(
|
| + uiSourceCode.workingCopy(), uiSourceCode.contentType().canonicalMimeType(),
|
| + this._didBuildOutlineChunk.bind(this));
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {boolean} isLastChunk
|
| + * @param {!Array<!Common.FormatterWorkerPool.OutlineItem>} items
|
| + */
|
| + _didBuildOutlineChunk(isLastChunk, items) {
|
| + this._items.push(...items);
|
| + this.refresh();
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {number}
|
| + */
|
| + itemCount() {
|
| + return this._items.length;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {number} itemIndex
|
| + * @return {string}
|
| + */
|
| + itemKeyAt(itemIndex) {
|
| + var item = this._items[itemIndex];
|
| + return item.title + (item.subtitle ? item.subtitle : '');
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {number} itemIndex
|
| + * @param {string} query
|
| + * @return {number}
|
| + */
|
| + itemScoreAt(itemIndex, query) {
|
| + var item = this._items[itemIndex];
|
| + var methodName = query.split('(')[0];
|
| + if (methodName.toLowerCase() === item.title.toLowerCase())
|
| + return 1 / (1 + item.line);
|
| + return -item.line - 1;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {number} itemIndex
|
| + * @param {string} query
|
| + * @param {!Element} titleElement
|
| + * @param {!Element} subtitleElement
|
| + */
|
| + renderItem(itemIndex, query, titleElement, subtitleElement) {
|
| + var item = this._items[itemIndex];
|
| + titleElement.textContent = item.title + (item.subtitle ? item.subtitle : '');
|
| + QuickOpen.FilteredListWidget.highlightRanges(titleElement, query);
|
| + subtitleElement.textContent = ':' + (item.line + 1);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {?number} itemIndex
|
| + * @param {string} promptValue
|
| + */
|
| + selectItem(itemIndex, promptValue) {
|
| + if (itemIndex === null)
|
| + return;
|
| + var uiSourceCode = this._currentUISourceCode();
|
| + if (!uiSourceCode)
|
| + return;
|
| + var lineNumber = this._items[itemIndex].line;
|
| + if (!isNaN(lineNumber) && lineNumber >= 0)
|
| + Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber, this._items[itemIndex].column));
|
| + }
|
| +
|
| +
|
| + /**
|
| + * @return {?Workspace.UISourceCode}
|
| + */
|
| + _currentUISourceCode() {
|
| + var sourcesView = UI.context.flavor(Sources.SourcesView);
|
| + if (!sourcesView)
|
| + return null;
|
| + return sourcesView.currentUISourceCode();
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {string}
|
| + */
|
| + notFoundText() {
|
| + if (!this._currentUISourceCode())
|
| + return Common.UIString('No file selected.');
|
| + if (!this._active)
|
| + return Common.UIString('Open a JavaScript or CSS file to see symbols');
|
| + return Common.UIString('No results found');
|
| + }
|
| +};
|
|
|