| Index: third_party/WebKit/Source/devtools/front_end/sources/SourcesView.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sources/SourcesView.js b/third_party/WebKit/Source/devtools/front_end/sources/SourcesView.js
|
| index 103ac813d1e3e4f8ca25c71798071207d733c380..4fbf6f8e51b5cb3f918a4144332b29c7743a232c 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/sources/SourcesView.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sources/SourcesView.js
|
| @@ -1,55 +1,58 @@
|
| // Copyright 2014 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.
|
| -
|
| /**
|
| - * @constructor
|
| * @implements {WebInspector.TabbedEditorContainerDelegate}
|
| * @implements {WebInspector.Searchable}
|
| * @implements {WebInspector.Replaceable}
|
| - * @extends {WebInspector.VBox}
|
| - * @suppressGlobalPropertiesCheck
|
| + * @unrestricted
|
| */
|
| -WebInspector.SourcesView = function()
|
| -{
|
| - WebInspector.VBox.call(this);
|
| - this.registerRequiredCSS("sources/sourcesView.css");
|
| - this.element.id = "sources-panel-sources-view";
|
| +WebInspector.SourcesView = class extends WebInspector.VBox {
|
| + /**
|
| + * @suppressGlobalPropertiesCheck
|
| + */
|
| + constructor() {
|
| + super();
|
| + this.registerRequiredCSS('sources/sourcesView.css');
|
| + this.element.id = 'sources-panel-sources-view';
|
| this.setMinimumAndPreferredSizes(50, 52, 150, 100);
|
|
|
| var workspace = WebInspector.workspace;
|
|
|
| - this._searchableView = new WebInspector.SearchableView(this, "sourcesViewSearchConfig");
|
| + this._searchableView = new WebInspector.SearchableView(this, 'sourcesViewSearchConfig');
|
| this._searchableView.setMinimalSearchQuerySize(0);
|
| this._searchableView.show(this.element);
|
|
|
| /** @type {!Map.<!WebInspector.UISourceCode, !WebInspector.Widget>} */
|
| this._sourceViewByUISourceCode = new Map();
|
|
|
| - var tabbedEditorPlaceholderText = WebInspector.isMac() ? WebInspector.UIString("Hit Cmd+P to open a file") : WebInspector.UIString("Hit Ctrl+P to open a file");
|
| - this._editorContainer = new WebInspector.TabbedEditorContainer(this, WebInspector.settings.createLocalSetting("previouslyViewedFiles", []), tabbedEditorPlaceholderText);
|
| + var tabbedEditorPlaceholderText = WebInspector.isMac() ? WebInspector.UIString('Hit Cmd+P to open a file') :
|
| + WebInspector.UIString('Hit Ctrl+P to open a file');
|
| + this._editorContainer = new WebInspector.TabbedEditorContainer(
|
| + this, WebInspector.settings.createLocalSetting('previouslyViewedFiles', []), tabbedEditorPlaceholderText);
|
| this._editorContainer.show(this._searchableView.element);
|
| - this._editorContainer.addEventListener(WebInspector.TabbedEditorContainer.Events.EditorSelected, this._editorSelected, this);
|
| - this._editorContainer.addEventListener(WebInspector.TabbedEditorContainer.Events.EditorClosed, this._editorClosed, this);
|
| + this._editorContainer.addEventListener(
|
| + WebInspector.TabbedEditorContainer.Events.EditorSelected, this._editorSelected, this);
|
| + this._editorContainer.addEventListener(
|
| + WebInspector.TabbedEditorContainer.Events.EditorClosed, this._editorClosed, this);
|
|
|
| this._historyManager = new WebInspector.EditingLocationHistoryManager(this, this.currentSourceFrame.bind(this));
|
|
|
| - this._toolbarContainerElement = this.element.createChild("div", "sources-toolbar");
|
| - this._toolbarEditorActions = new WebInspector.Toolbar("", this._toolbarContainerElement);
|
| + this._toolbarContainerElement = this.element.createChild('div', 'sources-toolbar');
|
| + this._toolbarEditorActions = new WebInspector.Toolbar('', this._toolbarContainerElement);
|
|
|
| self.runtime.allInstances(WebInspector.SourcesView.EditorAction).then(appendButtonsForExtensions.bind(this));
|
| /**
|
| * @param {!Array.<!WebInspector.SourcesView.EditorAction>} actions
|
| * @this {WebInspector.SourcesView}
|
| */
|
| - function appendButtonsForExtensions(actions)
|
| - {
|
| - for (var i = 0; i < actions.length; ++i)
|
| - this._toolbarEditorActions.appendToolbarItem(actions[i].button(this));
|
| + function appendButtonsForExtensions(actions) {
|
| + for (var i = 0; i < actions.length; ++i)
|
| + this._toolbarEditorActions.appendToolbarItem(actions[i].button(this));
|
| }
|
| - this._scriptViewToolbar = new WebInspector.Toolbar("", this._toolbarContainerElement);
|
| - this._toolbarContainerElement.createChild("div", "sources-toolbar-spacer");
|
| - this._bottomToolbar = new WebInspector.Toolbar("", this._toolbarContainerElement);
|
| + this._scriptViewToolbar = new WebInspector.Toolbar('', this._toolbarContainerElement);
|
| + this._toolbarContainerElement.createChild('div', 'sources-toolbar-spacer');
|
| + this._bottomToolbar = new WebInspector.Toolbar('', this._toolbarContainerElement);
|
|
|
| WebInspector.startBatchUpdate();
|
| workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));
|
| @@ -62,697 +65,653 @@ WebInspector.SourcesView = function()
|
| /**
|
| * @param {!Event} event
|
| */
|
| - function handleBeforeUnload(event)
|
| - {
|
| - if (event.returnValue)
|
| - return;
|
| -
|
| - var unsavedSourceCodes = [];
|
| - var projects = WebInspector.workspace.projectsForType(WebInspector.projectTypes.FileSystem);
|
| - for (var i = 0; i < projects.length; ++i)
|
| - unsavedSourceCodes = unsavedSourceCodes.concat(projects[i].uiSourceCodes().filter(isUnsaved));
|
| -
|
| - if (!unsavedSourceCodes.length)
|
| - return;
|
| -
|
| - event.returnValue = WebInspector.UIString("DevTools have unsaved changes that will be permanently lost.");
|
| - WebInspector.viewManager.showView("sources");
|
| - for (var i = 0; i < unsavedSourceCodes.length; ++i)
|
| - WebInspector.Revealer.reveal(unsavedSourceCodes[i]);
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} sourceCode
|
| - * @return {boolean}
|
| - */
|
| - function isUnsaved(sourceCode)
|
| - {
|
| - var binding = WebInspector.persistence.binding(sourceCode);
|
| - if (binding)
|
| - return binding.network.isDirty();
|
| - return sourceCode.isDirty();
|
| - }
|
| + function handleBeforeUnload(event) {
|
| + if (event.returnValue)
|
| + return;
|
| +
|
| + var unsavedSourceCodes = [];
|
| + var projects = WebInspector.workspace.projectsForType(WebInspector.projectTypes.FileSystem);
|
| + for (var i = 0; i < projects.length; ++i)
|
| + unsavedSourceCodes = unsavedSourceCodes.concat(projects[i].uiSourceCodes().filter(isUnsaved));
|
| +
|
| + if (!unsavedSourceCodes.length)
|
| + return;
|
| +
|
| + event.returnValue = WebInspector.UIString('DevTools have unsaved changes that will be permanently lost.');
|
| + WebInspector.viewManager.showView('sources');
|
| + for (var i = 0; i < unsavedSourceCodes.length; ++i)
|
| + WebInspector.Revealer.reveal(unsavedSourceCodes[i]);
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} sourceCode
|
| + * @return {boolean}
|
| + */
|
| + function isUnsaved(sourceCode) {
|
| + var binding = WebInspector.persistence.binding(sourceCode);
|
| + if (binding)
|
| + return binding.network.isDirty();
|
| + return sourceCode.isDirty();
|
| + }
|
| }
|
|
|
| if (!window.opener)
|
| - window.addEventListener("beforeunload", handleBeforeUnload, true);
|
| + window.addEventListener('beforeunload', handleBeforeUnload, true);
|
|
|
| this._shortcuts = {};
|
| - this.element.addEventListener("keydown", this._handleKeyDown.bind(this), false);
|
| -};
|
| -
|
| -/** @enum {symbol} */
|
| -WebInspector.SourcesView.Events = {
|
| - EditorClosed: Symbol("EditorClosed"),
|
| - EditorSelected: Symbol("EditorSelected"),
|
| -};
|
| -
|
| -WebInspector.SourcesView.prototype = {
|
| - /**
|
| - * @param {function(!Array.<!WebInspector.KeyboardShortcut.Descriptor>, function(!Event=):boolean)} registerShortcutDelegate
|
| - */
|
| - registerShortcuts: function(registerShortcutDelegate)
|
| - {
|
| - /**
|
| - * @this {WebInspector.SourcesView}
|
| - * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} shortcuts
|
| - * @param {function(!Event=):boolean} handler
|
| - */
|
| - function registerShortcut(shortcuts, handler)
|
| - {
|
| - registerShortcutDelegate(shortcuts, handler);
|
| - this._registerShortcuts(shortcuts, handler);
|
| - }
|
| -
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToPreviousLocation, this._onJumpToPreviousLocation.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToNextLocation, this._onJumpToNextLocation.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.CloseEditorTab, this._onCloseEditorTab.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToLine, this._showGoToLineDialog.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToMember, this._showOutlineDialog.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleBreakpoint, this._toggleBreakpoint.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.Save, this._save.bind(this));
|
| - registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.SaveAll, this._saveAll.bind(this));
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.Toolbar}
|
| - */
|
| - leftToolbar: function()
|
| - {
|
| - return this._editorContainer.leftToolbar();
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.Toolbar}
|
| - */
|
| - rightToolbar: function()
|
| - {
|
| - return this._editorContainer.rightToolbar();
|
| - },
|
| + this.element.addEventListener('keydown', this._handleKeyDown.bind(this), false);
|
| + }
|
|
|
| + /**
|
| + * @param {function(!Array.<!WebInspector.KeyboardShortcut.Descriptor>, function(!Event=):boolean)} registerShortcutDelegate
|
| + */
|
| + registerShortcuts(registerShortcutDelegate) {
|
| /**
|
| - * @return {!WebInspector.Toolbar}
|
| - */
|
| - bottomToolbar: function()
|
| - {
|
| - return this._bottomToolbar;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} keys
|
| + * @this {WebInspector.SourcesView}
|
| + * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} shortcuts
|
| * @param {function(!Event=):boolean} handler
|
| */
|
| - _registerShortcuts: function(keys, handler)
|
| - {
|
| - for (var i = 0; i < keys.length; ++i)
|
| - this._shortcuts[keys[i].key] = handler;
|
| - },
|
| -
|
| - _handleKeyDown: function(event)
|
| - {
|
| - var shortcutKey = WebInspector.KeyboardShortcut.makeKeyFromEvent(event);
|
| - var handler = this._shortcuts[shortcutKey];
|
| - if (handler && handler())
|
| - event.consume(true);
|
| - },
|
| -
|
| - wasShown: function()
|
| - {
|
| - WebInspector.VBox.prototype.wasShown.call(this);
|
| - WebInspector.context.setFlavor(WebInspector.SourcesView, this);
|
| - },
|
| -
|
| - willHide: function()
|
| - {
|
| - WebInspector.context.setFlavor(WebInspector.SourcesView, null);
|
| - WebInspector.VBox.prototype.willHide.call(this);
|
| - },
|
| -
|
| - /**
|
| - * @return {!Element}
|
| - */
|
| - toolbarContainerElement: function()
|
| - {
|
| - return this._toolbarContainerElement;
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.SearchableView}
|
| - */
|
| - searchableView: function()
|
| - {
|
| - return this._searchableView;
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.Widget}
|
| - */
|
| - visibleView: function()
|
| - {
|
| - return this._editorContainer.visibleView;
|
| - },
|
| -
|
| - /**
|
| - * @return {?WebInspector.UISourceCodeFrame}
|
| - */
|
| - currentSourceFrame: function()
|
| - {
|
| - var view = this.visibleView();
|
| - if (!(view instanceof WebInspector.UISourceCodeFrame))
|
| - return null;
|
| - return /** @type {!WebInspector.UISourceCodeFrame} */ (view);
|
| - },
|
| -
|
| - /**
|
| - * @return {?WebInspector.UISourceCode}
|
| - */
|
| - currentUISourceCode: function()
|
| - {
|
| - return this._editorContainer.currentFile();
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event=} event
|
| - */
|
| - _onCloseEditorTab: function(event)
|
| - {
|
| - var uiSourceCode = this._editorContainer.currentFile();
|
| - if (!uiSourceCode)
|
| - return false;
|
| - this._editorContainer.closeFile(uiSourceCode);
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event=} event
|
| - */
|
| - _onJumpToPreviousLocation: function(event)
|
| - {
|
| - this._historyManager.rollback();
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event=} event
|
| - */
|
| - _onJumpToNextLocation: function(event)
|
| - {
|
| - this._historyManager.rollover();
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _uiSourceCodeAdded: function(event)
|
| - {
|
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| - this._addUISourceCode(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _addUISourceCode: function(uiSourceCode)
|
| - {
|
| - if (uiSourceCode.isFromServiceProject())
|
| - return;
|
| - this._editorContainer.addUISourceCode(uiSourceCode);
|
| - },
|
| -
|
| - _uiSourceCodeRemoved: function(event)
|
| - {
|
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| - this._removeUISourceCodes([uiSourceCode]);
|
| - },
|
| -
|
| - /**
|
| - * @param {!Array.<!WebInspector.UISourceCode>} uiSourceCodes
|
| - */
|
| - _removeUISourceCodes: function(uiSourceCodes)
|
| - {
|
| - this._editorContainer.removeUISourceCodes(uiSourceCodes);
|
| - for (var i = 0; i < uiSourceCodes.length; ++i) {
|
| - this._removeSourceFrame(uiSourceCodes[i]);
|
| - this._historyManager.removeHistoryForSourceCode(uiSourceCodes[i]);
|
| - }
|
| - },
|
| -
|
| - _projectRemoved: function(event)
|
| - {
|
| - var project = event.data;
|
| - var uiSourceCodes = project.uiSourceCodes();
|
| - this._removeUISourceCodes(uiSourceCodes);
|
| - },
|
| -
|
| - _updateScriptViewToolbarItems: function()
|
| - {
|
| - this._scriptViewToolbar.removeToolbarItems();
|
| - var view = this.visibleView();
|
| - if (view instanceof WebInspector.SimpleView) {
|
| - for (var item of (/** @type {?WebInspector.SimpleView} */(view)).syncToolbarItems())
|
| - this._scriptViewToolbar.appendToolbarItem(item);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {number=} lineNumber 0-based
|
| - * @param {number=} columnNumber
|
| - * @param {boolean=} omitFocus
|
| - * @param {boolean=} omitHighlight
|
| - */
|
| - showSourceLocation: function(uiSourceCode, lineNumber, columnNumber, omitFocus, omitHighlight)
|
| - {
|
| - this._historyManager.updateCurrentState();
|
| - this._editorContainer.showFile(uiSourceCode);
|
| - var currentSourceFrame = this.currentSourceFrame();
|
| - if (currentSourceFrame && typeof lineNumber === "number")
|
| - currentSourceFrame.revealPosition(lineNumber, columnNumber, !omitHighlight);
|
| - this._historyManager.pushNewState();
|
| - if (!omitFocus)
|
| - this.visibleView().focus();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @return {!WebInspector.Widget}
|
| - */
|
| - _createSourceView: function(uiSourceCode)
|
| - {
|
| - var sourceFrame;
|
| - var sourceView;
|
| - var contentType = uiSourceCode.contentType();
|
| -
|
| - if (contentType.hasScripts())
|
| - sourceFrame = new WebInspector.JavaScriptSourceFrame(uiSourceCode);
|
| - else if (contentType.isStyleSheet())
|
| - sourceFrame = new WebInspector.CSSSourceFrame(uiSourceCode);
|
| - else if (contentType === WebInspector.resourceTypes.Image)
|
| - sourceView = new WebInspector.ImageView(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode), uiSourceCode);
|
| - else if (contentType === WebInspector.resourceTypes.Font)
|
| - sourceView = new WebInspector.FontView(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode), uiSourceCode);
|
| - else
|
| - sourceFrame = new WebInspector.UISourceCodeFrame(uiSourceCode);
|
| -
|
| - if (sourceFrame) {
|
| - sourceFrame.setHighlighterType(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode));
|
| - this._historyManager.trackSourceFrameCursorJumps(sourceFrame);
|
| - }
|
| - var widget = /** @type {!WebInspector.Widget} */(sourceFrame || sourceView);
|
| - this._sourceViewByUISourceCode.set(uiSourceCode, widget);
|
| - uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this);
|
| - return widget;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @return {!WebInspector.Widget}
|
| - */
|
| - _getOrCreateSourceView: function(uiSourceCode)
|
| - {
|
| - return this._sourceViewByUISourceCode.get(uiSourceCode) || this._createSourceView(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCodeFrame} sourceFrame
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @return {boolean}
|
| - */
|
| - _sourceFrameMatchesUISourceCode: function(sourceFrame, uiSourceCode)
|
| - {
|
| - if (uiSourceCode.contentType().hasScripts())
|
| - return sourceFrame instanceof WebInspector.JavaScriptSourceFrame;
|
| - if (uiSourceCode.contentType().isStyleSheet())
|
| - return sourceFrame instanceof WebInspector.CSSSourceFrame;
|
| - return !(sourceFrame instanceof WebInspector.JavaScriptSourceFrame);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _recreateSourceFrameIfNeeded: function(uiSourceCode)
|
| - {
|
| - var oldSourceView = this._sourceViewByUISourceCode.get(uiSourceCode);
|
| - if (!oldSourceView || !(oldSourceView instanceof WebInspector.UISourceCodeFrame))
|
| - return;
|
| - var oldSourceFrame = /** @type {!WebInspector.UISourceCodeFrame} */(oldSourceView);
|
| - if (this._sourceFrameMatchesUISourceCode(oldSourceFrame, uiSourceCode)) {
|
| - oldSourceFrame.setHighlighterType(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode));
|
| - } else {
|
| - this._editorContainer.removeUISourceCode(uiSourceCode);
|
| - this._removeSourceFrame(uiSourceCode);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @return {!WebInspector.Widget}
|
| - */
|
| - viewForFile: function(uiSourceCode)
|
| - {
|
| - return this._getOrCreateSourceView(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _removeSourceFrame: function(uiSourceCode)
|
| - {
|
| - var sourceView = this._sourceViewByUISourceCode.get(uiSourceCode);
|
| - this._sourceViewByUISourceCode.remove(uiSourceCode);
|
| - uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this);
|
| - if (sourceView && sourceView instanceof WebInspector.UISourceCodeFrame)
|
| - /** @type {!WebInspector.UISourceCodeFrame} */ (sourceView).dispose();
|
| - },
|
| -
|
| - clearCurrentExecutionLine: function()
|
| - {
|
| - if (this._executionSourceFrame)
|
| - this._executionSourceFrame.clearExecutionLine();
|
| - delete this._executionSourceFrame;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UILocation} uiLocation
|
| - */
|
| - setExecutionLocation: function(uiLocation)
|
| - {
|
| - var sourceView = this._getOrCreateSourceView(uiLocation.uiSourceCode);
|
| - if (sourceView instanceof WebInspector.UISourceCodeFrame) {
|
| - var sourceFrame = /** @type {!WebInspector.UISourceCodeFrame} */(sourceView);
|
| - sourceFrame.setExecutionLocation(uiLocation);
|
| - this._executionSourceFrame = sourceFrame;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _editorClosed: function(event)
|
| - {
|
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| - this._historyManager.removeHistoryForSourceCode(uiSourceCode);
|
| -
|
| - var wasSelected = false;
|
| - if (!this._editorContainer.currentFile())
|
| - wasSelected = true;
|
| -
|
| - // SourcesNavigator does not need to update on EditorClosed.
|
| - this._updateScriptViewToolbarItems();
|
| - this._searchableView.resetSearch();
|
| -
|
| - var data = {};
|
| - data.uiSourceCode = uiSourceCode;
|
| - data.wasSelected = wasSelected;
|
| - this.dispatchEventToListeners(WebInspector.SourcesView.Events.EditorClosed, data);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _editorSelected: function(event)
|
| - {
|
| - var previousSourceFrame = event.data.previousView instanceof WebInspector.UISourceCodeFrame ? event.data.previousView : null;
|
| - if (previousSourceFrame)
|
| - previousSourceFrame.setSearchableView(null);
|
| - var currentSourceFrame = event.data.currentView instanceof WebInspector.UISourceCodeFrame ? event.data.currentView : null;
|
| - if (currentSourceFrame)
|
| - currentSourceFrame.setSearchableView(this._searchableView);
|
| -
|
| - this._searchableView.setReplaceable(!!currentSourceFrame && currentSourceFrame.canEditSource());
|
| - this._searchableView.refreshSearch();
|
| - this._updateScriptViewToolbarItems();
|
| -
|
| - this.dispatchEventToListeners(WebInspector.SourcesView.Events.EditorSelected, this._editorContainer.currentFile());
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _uiSourceCodeTitleChanged: function(event)
|
| - {
|
| - this._recreateSourceFrameIfNeeded(/** @type {!WebInspector.UISourceCode} */ (event.target));
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - */
|
| - searchCanceled: function()
|
| - {
|
| - if (this._searchView)
|
| - this._searchView.searchCanceled();
|
| -
|
| - delete this._searchView;
|
| - delete this._searchConfig;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
|
| - * @param {boolean} shouldJump
|
| - * @param {boolean=} jumpBackwards
|
| - */
|
| - performSearch: function(searchConfig, shouldJump, jumpBackwards)
|
| - {
|
| - var sourceFrame = this.currentSourceFrame();
|
| - if (!sourceFrame)
|
| - return;
|
| -
|
| - this._searchView = sourceFrame;
|
| - this._searchConfig = searchConfig;
|
| -
|
| - this._searchView.performSearch(this._searchConfig, shouldJump, jumpBackwards);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - */
|
| - jumpToNextSearchResult: function()
|
| - {
|
| - if (!this._searchView)
|
| - return;
|
| -
|
| - if (this._searchView !== this.currentSourceFrame()) {
|
| - this.performSearch(this._searchConfig, true);
|
| - return;
|
| - }
|
| -
|
| - this._searchView.jumpToNextSearchResult();
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - */
|
| - jumpToPreviousSearchResult: function()
|
| - {
|
| - if (!this._searchView)
|
| - return;
|
| -
|
| - if (this._searchView !== this.currentSourceFrame()) {
|
| - this.performSearch(this._searchConfig, true);
|
| - if (this._searchView)
|
| - this._searchView.jumpToLastSearchResult();
|
| - return;
|
| - }
|
| -
|
| - this._searchView.jumpToPreviousSearchResult();
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {boolean}
|
| - */
|
| - supportsCaseSensitiveSearch: function()
|
| - {
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {boolean}
|
| - */
|
| - supportsRegexSearch: function()
|
| - {
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
|
| - * @param {string} replacement
|
| - */
|
| - replaceSelectionWith: function(searchConfig, replacement)
|
| - {
|
| - var sourceFrame = this.currentSourceFrame();
|
| - if (!sourceFrame) {
|
| - console.assert(sourceFrame);
|
| - return;
|
| - }
|
| - sourceFrame.replaceSelectionWith(searchConfig, replacement);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
|
| - * @param {string} replacement
|
| - */
|
| - replaceAllWith: function(searchConfig, replacement)
|
| - {
|
| - var sourceFrame = this.currentSourceFrame();
|
| - if (!sourceFrame) {
|
| - console.assert(sourceFrame);
|
| - return;
|
| - }
|
| - sourceFrame.replaceAllWith(searchConfig, replacement);
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event=} event
|
| - * @return {boolean}
|
| - */
|
| - _showOutlineDialog: function(event)
|
| - {
|
| - var uiSourceCode = this._editorContainer.currentFile();
|
| - if (!uiSourceCode)
|
| - return false;
|
| -
|
| - if (uiSourceCode.contentType().hasScripts()) {
|
| - WebInspector.JavaScriptOutlineDialog.show(uiSourceCode, this.showSourceLocation.bind(this, uiSourceCode));
|
| - return true;
|
| - }
|
| -
|
| - if (uiSourceCode.contentType().isStyleSheet()) {
|
| - WebInspector.StyleSheetOutlineDialog.show(uiSourceCode, this.showSourceLocation.bind(this, uiSourceCode));
|
| - return true;
|
| - }
|
| -
|
| - // We don't want default browser shortcut to be executed, so pretend to handle this event.
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {string=} query
|
| - */
|
| - showOpenResourceDialog: function(query)
|
| - {
|
| - var uiSourceCodes = this._editorContainer.historyUISourceCodes();
|
| - /** @type {!Map.<!WebInspector.UISourceCode, number>} */
|
| - var defaultScores = new Map();
|
| - for (var i = 1; i < uiSourceCodes.length; ++i) // Skip current element
|
| - defaultScores.set(uiSourceCodes[i], uiSourceCodes.length - i);
|
| - if (!this._openResourceDialogHistory)
|
| - this._openResourceDialogHistory = [];
|
| - WebInspector.OpenResourceDialog.show(this, query || "", defaultScores, this._openResourceDialogHistory);
|
| - },
|
| -
|
| - /**
|
| - * @param {!Event=} event
|
| - * @return {boolean}
|
| - */
|
| - _showGoToLineDialog: function(event)
|
| - {
|
| - if (this._editorContainer.currentFile())
|
| - this.showOpenResourceDialog(":");
|
| - return true;
|
| - },
|
| + function registerShortcut(shortcuts, handler) {
|
| + registerShortcutDelegate(shortcuts, handler);
|
| + this._registerShortcuts(shortcuts, handler);
|
| + }
|
|
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _save: function()
|
| - {
|
| - this._saveSourceFrame(this.currentSourceFrame());
|
| - return true;
|
| - },
|
| + registerShortcut.call(
|
| + this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToPreviousLocation,
|
| + this._onJumpToPreviousLocation.bind(this));
|
| + registerShortcut.call(
|
| + this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.JumpToNextLocation,
|
| + this._onJumpToNextLocation.bind(this));
|
| + registerShortcut.call(
|
| + this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.CloseEditorTab, this._onCloseEditorTab.bind(this));
|
| + registerShortcut.call(
|
| + this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToLine, this._showGoToLineDialog.bind(this));
|
| + registerShortcut.call(
|
| + this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.GoToMember, this._showOutlineDialog.bind(this));
|
| + registerShortcut.call(
|
| + this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.ToggleBreakpoint, this._toggleBreakpoint.bind(this));
|
| + registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.Save, this._save.bind(this));
|
| + registerShortcut.call(this, WebInspector.ShortcutsScreen.SourcesPanelShortcuts.SaveAll, this._saveAll.bind(this));
|
| + }
|
| +
|
| + /**
|
| + * @return {!WebInspector.Toolbar}
|
| + */
|
| + leftToolbar() {
|
| + return this._editorContainer.leftToolbar();
|
| + }
|
| +
|
| + /**
|
| + * @return {!WebInspector.Toolbar}
|
| + */
|
| + rightToolbar() {
|
| + return this._editorContainer.rightToolbar();
|
| + }
|
| +
|
| + /**
|
| + * @return {!WebInspector.Toolbar}
|
| + */
|
| + bottomToolbar() {
|
| + return this._bottomToolbar;
|
| + }
|
| +
|
| + /**
|
| + * @param {!Array.<!WebInspector.KeyboardShortcut.Descriptor>} keys
|
| + * @param {function(!Event=):boolean} handler
|
| + */
|
| + _registerShortcuts(keys, handler) {
|
| + for (var i = 0; i < keys.length; ++i)
|
| + this._shortcuts[keys[i].key] = handler;
|
| + }
|
| +
|
| + _handleKeyDown(event) {
|
| + var shortcutKey = WebInspector.KeyboardShortcut.makeKeyFromEvent(event);
|
| + var handler = this._shortcuts[shortcutKey];
|
| + if (handler && handler())
|
| + event.consume(true);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + wasShown() {
|
| + super.wasShown();
|
| + WebInspector.context.setFlavor(WebInspector.SourcesView, this);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + willHide() {
|
| + WebInspector.context.setFlavor(WebInspector.SourcesView, null);
|
| + super.willHide();
|
| + }
|
| +
|
| + /**
|
| + * @return {!Element}
|
| + */
|
| + toolbarContainerElement() {
|
| + return this._toolbarContainerElement;
|
| + }
|
| +
|
| + /**
|
| + * @return {!WebInspector.SearchableView}
|
| + */
|
| + searchableView() {
|
| + return this._searchableView;
|
| + }
|
| +
|
| + /**
|
| + * @return {?WebInspector.Widget}
|
| + */
|
| + visibleView() {
|
| + return this._editorContainer.visibleView;
|
| + }
|
| +
|
| + /**
|
| + * @return {?WebInspector.UISourceCodeFrame}
|
| + */
|
| + currentSourceFrame() {
|
| + var view = this.visibleView();
|
| + if (!(view instanceof WebInspector.UISourceCodeFrame))
|
| + return null;
|
| + return /** @type {!WebInspector.UISourceCodeFrame} */ (view);
|
| + }
|
| +
|
| + /**
|
| + * @return {?WebInspector.UISourceCode}
|
| + */
|
| + currentUISourceCode() {
|
| + return this._editorContainer.currentFile();
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event=} event
|
| + */
|
| + _onCloseEditorTab(event) {
|
| + var uiSourceCode = this._editorContainer.currentFile();
|
| + if (!uiSourceCode)
|
| + return false;
|
| + this._editorContainer.closeFile(uiSourceCode);
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event=} event
|
| + */
|
| + _onJumpToPreviousLocation(event) {
|
| + this._historyManager.rollback();
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event=} event
|
| + */
|
| + _onJumpToNextLocation(event) {
|
| + this._historyManager.rollover();
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _uiSourceCodeAdded(event) {
|
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| + this._addUISourceCode(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _addUISourceCode(uiSourceCode) {
|
| + if (uiSourceCode.isFromServiceProject())
|
| + return;
|
| + this._editorContainer.addUISourceCode(uiSourceCode);
|
| + }
|
| +
|
| + _uiSourceCodeRemoved(event) {
|
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| + this._removeUISourceCodes([uiSourceCode]);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Array.<!WebInspector.UISourceCode>} uiSourceCodes
|
| + */
|
| + _removeUISourceCodes(uiSourceCodes) {
|
| + this._editorContainer.removeUISourceCodes(uiSourceCodes);
|
| + for (var i = 0; i < uiSourceCodes.length; ++i) {
|
| + this._removeSourceFrame(uiSourceCodes[i]);
|
| + this._historyManager.removeHistoryForSourceCode(uiSourceCodes[i]);
|
| + }
|
| + }
|
| +
|
| + _projectRemoved(event) {
|
| + var project = event.data;
|
| + var uiSourceCodes = project.uiSourceCodes();
|
| + this._removeUISourceCodes(uiSourceCodes);
|
| + }
|
| +
|
| + _updateScriptViewToolbarItems() {
|
| + this._scriptViewToolbar.removeToolbarItems();
|
| + var view = this.visibleView();
|
| + if (view instanceof WebInspector.SimpleView) {
|
| + for (var item of (/** @type {?WebInspector.SimpleView} */ (view)).syncToolbarItems())
|
| + this._scriptViewToolbar.appendToolbarItem(item);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {number=} lineNumber 0-based
|
| + * @param {number=} columnNumber
|
| + * @param {boolean=} omitFocus
|
| + * @param {boolean=} omitHighlight
|
| + */
|
| + showSourceLocation(uiSourceCode, lineNumber, columnNumber, omitFocus, omitHighlight) {
|
| + this._historyManager.updateCurrentState();
|
| + this._editorContainer.showFile(uiSourceCode);
|
| + var currentSourceFrame = this.currentSourceFrame();
|
| + if (currentSourceFrame && typeof lineNumber === 'number')
|
| + currentSourceFrame.revealPosition(lineNumber, columnNumber, !omitHighlight);
|
| + this._historyManager.pushNewState();
|
| + if (!omitFocus)
|
| + this.visibleView().focus();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @return {!WebInspector.Widget}
|
| + */
|
| + _createSourceView(uiSourceCode) {
|
| + var sourceFrame;
|
| + var sourceView;
|
| + var contentType = uiSourceCode.contentType();
|
| +
|
| + if (contentType.hasScripts())
|
| + sourceFrame = new WebInspector.JavaScriptSourceFrame(uiSourceCode);
|
| + else if (contentType.isStyleSheet())
|
| + sourceFrame = new WebInspector.CSSSourceFrame(uiSourceCode);
|
| + else if (contentType === WebInspector.resourceTypes.Image)
|
| + sourceView =
|
| + new WebInspector.ImageView(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode), uiSourceCode);
|
| + else if (contentType === WebInspector.resourceTypes.Font)
|
| + sourceView =
|
| + new WebInspector.FontView(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode), uiSourceCode);
|
| + else
|
| + sourceFrame = new WebInspector.UISourceCodeFrame(uiSourceCode);
|
| +
|
| + if (sourceFrame) {
|
| + sourceFrame.setHighlighterType(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode));
|
| + this._historyManager.trackSourceFrameCursorJumps(sourceFrame);
|
| + }
|
| + var widget = /** @type {!WebInspector.Widget} */ (sourceFrame || sourceView);
|
| + this._sourceViewByUISourceCode.set(uiSourceCode, widget);
|
| + uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this);
|
| + return widget;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @return {!WebInspector.Widget}
|
| + */
|
| + _getOrCreateSourceView(uiSourceCode) {
|
| + return this._sourceViewByUISourceCode.get(uiSourceCode) || this._createSourceView(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCodeFrame} sourceFrame
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @return {boolean}
|
| + */
|
| + _sourceFrameMatchesUISourceCode(sourceFrame, uiSourceCode) {
|
| + if (uiSourceCode.contentType().hasScripts())
|
| + return sourceFrame instanceof WebInspector.JavaScriptSourceFrame;
|
| + if (uiSourceCode.contentType().isStyleSheet())
|
| + return sourceFrame instanceof WebInspector.CSSSourceFrame;
|
| + return !(sourceFrame instanceof WebInspector.JavaScriptSourceFrame);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _recreateSourceFrameIfNeeded(uiSourceCode) {
|
| + var oldSourceView = this._sourceViewByUISourceCode.get(uiSourceCode);
|
| + if (!oldSourceView || !(oldSourceView instanceof WebInspector.UISourceCodeFrame))
|
| + return;
|
| + var oldSourceFrame = /** @type {!WebInspector.UISourceCodeFrame} */ (oldSourceView);
|
| + if (this._sourceFrameMatchesUISourceCode(oldSourceFrame, uiSourceCode)) {
|
| + oldSourceFrame.setHighlighterType(WebInspector.NetworkProject.uiSourceCodeMimeType(uiSourceCode));
|
| + } else {
|
| + this._editorContainer.removeUISourceCode(uiSourceCode);
|
| + this._removeSourceFrame(uiSourceCode);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @return {!WebInspector.Widget}
|
| + */
|
| + viewForFile(uiSourceCode) {
|
| + return this._getOrCreateSourceView(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _removeSourceFrame(uiSourceCode) {
|
| + var sourceView = this._sourceViewByUISourceCode.get(uiSourceCode);
|
| + this._sourceViewByUISourceCode.remove(uiSourceCode);
|
| + uiSourceCode.removeEventListener(
|
| + WebInspector.UISourceCode.Events.TitleChanged, this._uiSourceCodeTitleChanged, this);
|
| + if (sourceView && sourceView instanceof WebInspector.UISourceCodeFrame)
|
| + /** @type {!WebInspector.UISourceCodeFrame} */ (sourceView).dispose();
|
| + }
|
| +
|
| + clearCurrentExecutionLine() {
|
| + if (this._executionSourceFrame)
|
| + this._executionSourceFrame.clearExecutionLine();
|
| + delete this._executionSourceFrame;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UILocation} uiLocation
|
| + */
|
| + setExecutionLocation(uiLocation) {
|
| + var sourceView = this._getOrCreateSourceView(uiLocation.uiSourceCode);
|
| + if (sourceView instanceof WebInspector.UISourceCodeFrame) {
|
| + var sourceFrame = /** @type {!WebInspector.UISourceCodeFrame} */ (sourceView);
|
| + sourceFrame.setExecutionLocation(uiLocation);
|
| + this._executionSourceFrame = sourceFrame;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _editorClosed(event) {
|
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| + this._historyManager.removeHistoryForSourceCode(uiSourceCode);
|
| +
|
| + var wasSelected = false;
|
| + if (!this._editorContainer.currentFile())
|
| + wasSelected = true;
|
| +
|
| + // SourcesNavigator does not need to update on EditorClosed.
|
| + this._updateScriptViewToolbarItems();
|
| + this._searchableView.resetSearch();
|
| +
|
| + var data = {};
|
| + data.uiSourceCode = uiSourceCode;
|
| + data.wasSelected = wasSelected;
|
| + this.dispatchEventToListeners(WebInspector.SourcesView.Events.EditorClosed, data);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _editorSelected(event) {
|
| + var previousSourceFrame =
|
| + event.data.previousView instanceof WebInspector.UISourceCodeFrame ? event.data.previousView : null;
|
| + if (previousSourceFrame)
|
| + previousSourceFrame.setSearchableView(null);
|
| + var currentSourceFrame =
|
| + event.data.currentView instanceof WebInspector.UISourceCodeFrame ? event.data.currentView : null;
|
| + if (currentSourceFrame)
|
| + currentSourceFrame.setSearchableView(this._searchableView);
|
| +
|
| + this._searchableView.setReplaceable(!!currentSourceFrame && currentSourceFrame.canEditSource());
|
| + this._searchableView.refreshSearch();
|
| + this._updateScriptViewToolbarItems();
|
| +
|
| + this.dispatchEventToListeners(WebInspector.SourcesView.Events.EditorSelected, this._editorContainer.currentFile());
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _uiSourceCodeTitleChanged(event) {
|
| + this._recreateSourceFrameIfNeeded(/** @type {!WebInspector.UISourceCode} */ (event.target));
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + searchCanceled() {
|
| + if (this._searchView)
|
| + this._searchView.searchCanceled();
|
| +
|
| + delete this._searchView;
|
| + delete this._searchConfig;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
|
| + * @param {boolean} shouldJump
|
| + * @param {boolean=} jumpBackwards
|
| + */
|
| + performSearch(searchConfig, shouldJump, jumpBackwards) {
|
| + var sourceFrame = this.currentSourceFrame();
|
| + if (!sourceFrame)
|
| + return;
|
| +
|
| + this._searchView = sourceFrame;
|
| + this._searchConfig = searchConfig;
|
| +
|
| + this._searchView.performSearch(this._searchConfig, shouldJump, jumpBackwards);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + jumpToNextSearchResult() {
|
| + if (!this._searchView)
|
| + return;
|
| +
|
| + if (this._searchView !== this.currentSourceFrame()) {
|
| + this.performSearch(this._searchConfig, true);
|
| + return;
|
| + }
|
|
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _saveAll: function()
|
| - {
|
| - var sourceFrames = this._editorContainer.fileViews();
|
| - sourceFrames.forEach(this._saveSourceFrame.bind(this));
|
| - return true;
|
| - },
|
| + this._searchView.jumpToNextSearchResult();
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + jumpToPreviousSearchResult() {
|
| + if (!this._searchView)
|
| + return;
|
| +
|
| + if (this._searchView !== this.currentSourceFrame()) {
|
| + this.performSearch(this._searchConfig, true);
|
| + if (this._searchView)
|
| + this._searchView.jumpToLastSearchResult();
|
| + return;
|
| + }
|
|
|
| - /**
|
| - * @param {?WebInspector.Widget} sourceFrame
|
| - */
|
| - _saveSourceFrame: function(sourceFrame)
|
| - {
|
| - if (!(sourceFrame instanceof WebInspector.UISourceCodeFrame))
|
| - return;
|
| - var uiSourceCodeFrame = /** @type {!WebInspector.UISourceCodeFrame} */ (sourceFrame);
|
| - uiSourceCodeFrame.commitEditing();
|
| - },
|
| + this._searchView.jumpToPreviousSearchResult();
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {boolean}
|
| + */
|
| + supportsCaseSensitiveSearch() {
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {boolean}
|
| + */
|
| + supportsRegexSearch() {
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
|
| + * @param {string} replacement
|
| + */
|
| + replaceSelectionWith(searchConfig, replacement) {
|
| + var sourceFrame = this.currentSourceFrame();
|
| + if (!sourceFrame) {
|
| + console.assert(sourceFrame);
|
| + return;
|
| + }
|
| + sourceFrame.replaceSelectionWith(searchConfig, replacement);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
|
| + * @param {string} replacement
|
| + */
|
| + replaceAllWith(searchConfig, replacement) {
|
| + var sourceFrame = this.currentSourceFrame();
|
| + if (!sourceFrame) {
|
| + console.assert(sourceFrame);
|
| + return;
|
| + }
|
| + sourceFrame.replaceAllWith(searchConfig, replacement);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event=} event
|
| + * @return {boolean}
|
| + */
|
| + _showOutlineDialog(event) {
|
| + var uiSourceCode = this._editorContainer.currentFile();
|
| + if (!uiSourceCode)
|
| + return false;
|
| +
|
| + if (uiSourceCode.contentType().hasScripts()) {
|
| + WebInspector.JavaScriptOutlineDialog.show(uiSourceCode, this.showSourceLocation.bind(this, uiSourceCode));
|
| + return true;
|
| + }
|
|
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _toggleBreakpoint: function()
|
| - {
|
| - var sourceFrame = this.currentSourceFrame();
|
| - if (!sourceFrame)
|
| - return false;
|
| -
|
| - if (sourceFrame instanceof WebInspector.JavaScriptSourceFrame) {
|
| - var javaScriptSourceFrame = /** @type {!WebInspector.JavaScriptSourceFrame} */ (sourceFrame);
|
| - javaScriptSourceFrame.toggleBreakpointOnCurrentLine();
|
| - return true;
|
| - }
|
| - return false;
|
| - },
|
| + if (uiSourceCode.contentType().isStyleSheet()) {
|
| + WebInspector.StyleSheetOutlineDialog.show(uiSourceCode, this.showSourceLocation.bind(this, uiSourceCode));
|
| + return true;
|
| + }
|
|
|
| - /**
|
| - * @param {boolean} active
|
| - */
|
| - toggleBreakpointsActiveState: function(active)
|
| - {
|
| - this._editorContainer.view.element.classList.toggle("breakpoints-deactivated", !active);
|
| - },
|
| + // We don't want default browser shortcut to be executed, so pretend to handle this event.
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {string=} query
|
| + */
|
| + showOpenResourceDialog(query) {
|
| + var uiSourceCodes = this._editorContainer.historyUISourceCodes();
|
| + /** @type {!Map.<!WebInspector.UISourceCode, number>} */
|
| + var defaultScores = new Map();
|
| + for (var i = 1; i < uiSourceCodes.length; ++i) // Skip current element
|
| + defaultScores.set(uiSourceCodes[i], uiSourceCodes.length - i);
|
| + if (!this._openResourceDialogHistory)
|
| + this._openResourceDialogHistory = [];
|
| + WebInspector.OpenResourceDialog.show(this, query || '', defaultScores, this._openResourceDialogHistory);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Event=} event
|
| + * @return {boolean}
|
| + */
|
| + _showGoToLineDialog(event) {
|
| + if (this._editorContainer.currentFile())
|
| + this.showOpenResourceDialog(':');
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + _save() {
|
| + this._saveSourceFrame(this.currentSourceFrame());
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + _saveAll() {
|
| + var sourceFrames = this._editorContainer.fileViews();
|
| + sourceFrames.forEach(this._saveSourceFrame.bind(this));
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.Widget} sourceFrame
|
| + */
|
| + _saveSourceFrame(sourceFrame) {
|
| + if (!(sourceFrame instanceof WebInspector.UISourceCodeFrame))
|
| + return;
|
| + var uiSourceCodeFrame = /** @type {!WebInspector.UISourceCodeFrame} */ (sourceFrame);
|
| + uiSourceCodeFrame.commitEditing();
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + _toggleBreakpoint() {
|
| + var sourceFrame = this.currentSourceFrame();
|
| + if (!sourceFrame)
|
| + return false;
|
| +
|
| + if (sourceFrame instanceof WebInspector.JavaScriptSourceFrame) {
|
| + var javaScriptSourceFrame = /** @type {!WebInspector.JavaScriptSourceFrame} */ (sourceFrame);
|
| + javaScriptSourceFrame.toggleBreakpointOnCurrentLine();
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + /**
|
| + * @param {boolean} active
|
| + */
|
| + toggleBreakpointsActiveState(active) {
|
| + this._editorContainer.view.element.classList.toggle('breakpoints-deactivated', !active);
|
| + }
|
| +};
|
|
|
| - __proto__: WebInspector.VBox.prototype
|
| +/** @enum {symbol} */
|
| +WebInspector.SourcesView.Events = {
|
| + EditorClosed: Symbol('EditorClosed'),
|
| + EditorSelected: Symbol('EditorSelected'),
|
| };
|
|
|
| /**
|
| * @interface
|
| */
|
| -WebInspector.SourcesView.EditorAction = function()
|
| -{
|
| -};
|
| +WebInspector.SourcesView.EditorAction = function() {};
|
|
|
| WebInspector.SourcesView.EditorAction.prototype = {
|
| - /**
|
| - * @param {!WebInspector.SourcesView} sourcesView
|
| - * @return {!WebInspector.ToolbarButton}
|
| - */
|
| - button: function(sourcesView) { }
|
| + /**
|
| + * @param {!WebInspector.SourcesView} sourcesView
|
| + * @return {!WebInspector.ToolbarButton}
|
| + */
|
| + button: function(sourcesView) {}
|
| };
|
|
|
| /**
|
| - * @constructor
|
| * @implements {WebInspector.ActionDelegate}
|
| + * @unrestricted
|
| */
|
| -WebInspector.SourcesView.SwitchFileActionDelegate = function()
|
| -{
|
| -};
|
| -
|
| -/**
|
| - * @param {!WebInspector.UISourceCode} currentUISourceCode
|
| - * @return {?WebInspector.UISourceCode}
|
| - */
|
| -WebInspector.SourcesView.SwitchFileActionDelegate._nextFile = function(currentUISourceCode)
|
| -{
|
| +WebInspector.SourcesView.SwitchFileActionDelegate = class {
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} currentUISourceCode
|
| + * @return {?WebInspector.UISourceCode}
|
| + */
|
| + static _nextFile(currentUISourceCode) {
|
| /**
|
| * @param {string} name
|
| * @return {string}
|
| */
|
| - function fileNamePrefix(name)
|
| - {
|
| - var lastDotIndex = name.lastIndexOf(".");
|
| - var namePrefix = name.substr(0, lastDotIndex !== -1 ? lastDotIndex : name.length);
|
| - return namePrefix.toLowerCase();
|
| + function fileNamePrefix(name) {
|
| + var lastDotIndex = name.lastIndexOf('.');
|
| + var namePrefix = name.substr(0, lastDotIndex !== -1 ? lastDotIndex : name.length);
|
| + return namePrefix.toLowerCase();
|
| }
|
|
|
| var uiSourceCodes = currentUISourceCode.project().uiSourceCodes();
|
| @@ -761,62 +720,55 @@ WebInspector.SourcesView.SwitchFileActionDelegate._nextFile = function(currentUI
|
| var name = currentUISourceCode.name();
|
| var namePrefix = fileNamePrefix(name);
|
| for (var i = 0; i < uiSourceCodes.length; ++i) {
|
| - var uiSourceCode = uiSourceCodes[i];
|
| - if (url !== uiSourceCode.parentURL())
|
| - continue;
|
| - if (fileNamePrefix(uiSourceCode.name()) === namePrefix)
|
| - candidates.push(uiSourceCode.name());
|
| + var uiSourceCode = uiSourceCodes[i];
|
| + if (url !== uiSourceCode.parentURL())
|
| + continue;
|
| + if (fileNamePrefix(uiSourceCode.name()) === namePrefix)
|
| + candidates.push(uiSourceCode.name());
|
| }
|
| candidates.sort(String.naturalOrderComparator);
|
| var index = mod(candidates.indexOf(name) + 1, candidates.length);
|
| - var fullURL = (url ? url + "/" : "") + candidates[index];
|
| + var fullURL = (url ? url + '/' : '') + candidates[index];
|
| var nextUISourceCode = currentUISourceCode.project().uiSourceCodeForURL(fullURL);
|
| return nextUISourceCode !== currentUISourceCode ? nextUISourceCode : null;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Context} context
|
| + * @param {string} actionId
|
| + * @return {boolean}
|
| + */
|
| + handleAction(context, actionId) {
|
| + var sourcesView = WebInspector.context.flavor(WebInspector.SourcesView);
|
| + var currentUISourceCode = sourcesView.currentUISourceCode();
|
| + if (!currentUISourceCode)
|
| + return false;
|
| + var nextUISourceCode = WebInspector.SourcesView.SwitchFileActionDelegate._nextFile(currentUISourceCode);
|
| + if (!nextUISourceCode)
|
| + return false;
|
| + sourcesView.showSourceLocation(nextUISourceCode);
|
| + return true;
|
| + }
|
| };
|
|
|
|
|
| -WebInspector.SourcesView.SwitchFileActionDelegate.prototype = {
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.Context} context
|
| - * @param {string} actionId
|
| - * @return {boolean}
|
| - */
|
| - handleAction: function(context, actionId)
|
| - {
|
| - var sourcesView = WebInspector.context.flavor(WebInspector.SourcesView);
|
| - var currentUISourceCode = sourcesView.currentUISourceCode();
|
| - if (!currentUISourceCode)
|
| - return false;
|
| - var nextUISourceCode = WebInspector.SourcesView.SwitchFileActionDelegate._nextFile(currentUISourceCode);
|
| - if (!nextUISourceCode)
|
| - return false;
|
| - sourcesView.showSourceLocation(nextUISourceCode);
|
| - return true;
|
| - }
|
| -};
|
| -
|
| /**
|
| - * @constructor
|
| * @implements {WebInspector.ActionDelegate}
|
| + * @unrestricted
|
| */
|
| -WebInspector.SourcesView.CloseAllActionDelegate = function()
|
| -{
|
| -};
|
| -
|
| -WebInspector.SourcesView.CloseAllActionDelegate.prototype = {
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.Context} context
|
| - * @param {string} actionId
|
| - * @return {boolean}
|
| - */
|
| - handleAction: function(context, actionId)
|
| - {
|
| - var sourcesView = WebInspector.context.flavor(WebInspector.SourcesView);
|
| - if (!sourcesView)
|
| - return false;
|
| - sourcesView._editorContainer.closeAllFiles();
|
| - return true;
|
| - }
|
| +WebInspector.SourcesView.CloseAllActionDelegate = class {
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Context} context
|
| + * @param {string} actionId
|
| + * @return {boolean}
|
| + */
|
| + handleAction(context, actionId) {
|
| + var sourcesView = WebInspector.context.flavor(WebInspector.SourcesView);
|
| + if (!sourcesView)
|
| + return false;
|
| + sourcesView._editorContainer.closeAllFiles();
|
| + return true;
|
| + }
|
| };
|
|
|