Index: Source/devtools/front_end/sources/SourcesPanel.js |
diff --git a/Source/devtools/front_end/sources/SourcesPanel.js b/Source/devtools/front_end/sources/SourcesPanel.js |
index 57bbcac50c4cdc430e0d46d95c4fff214d4bffa9..b2782fb170e8fa36e14c1db9d6637a0500e232fb 100644 |
--- a/Source/devtools/front_end/sources/SourcesPanel.js |
+++ b/Source/devtools/front_end/sources/SourcesPanel.js |
@@ -111,12 +111,11 @@ WebInspector.SourcesPanel = function(workspaceForTest) |
WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.ConsoleCommandEvaluatedInSelectedCallFrame, this._consoleCommandEvaluatedInSelectedCallFrame, this); |
WebInspector.targetManager.addModelListener(WebInspector.DebuggerModel, WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this); |
WebInspector.targetManager.observeTargets(this); |
+ new WebInspector.WorkspaceMappingSuggester(this, this._workspace); |
} |
WebInspector.SourcesPanel.minToolbarWidth = 215; |
-WebInspector.SourcesPanel._infobarSymbol = Symbol("infobar"); |
- |
WebInspector.SourcesPanel.prototype = { |
/** |
* @param {?WebInspector.Target} target |
@@ -482,129 +481,6 @@ WebInspector.SourcesPanel.prototype = { |
{ |
var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data); |
this._editorChanged(uiSourceCode); |
- if (Runtime.experiments.isEnabled("suggestUsingWorkspace")) { |
- if (this._editorSelectedTimer) |
- clearTimeout(this._editorSelectedTimer); |
- this._editorSelectedTimer = setTimeout(this._updateSuggestedMappingInfobar.bind(this, uiSourceCode), 3000); |
- } |
- }, |
- |
- /** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _updateSuggestedMappingInfobar: function(uiSourceCode) |
- { |
- if (!this.isShowing()) |
- return; |
- if (uiSourceCode[WebInspector.SourcesPanel._infobarSymbol]) |
- return; |
- |
- // First try mapping filesystem -> network. |
- var uiSourceCodeFrame = this._sourcesView.viewForFile(uiSourceCode); |
- if (uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem) { |
- var hasMappings = !!uiSourceCode.url; |
- if (hasMappings) |
- return; |
- |
- var targets = WebInspector.targetManager.targets(); |
- for (var i = 0; i < targets.length; ++i) |
- targets[i].resourceTreeModel.forAllResources(matchResource.bind(this)); |
- } |
- |
- /** |
- * @param {!WebInspector.Resource} resource |
- * @return {boolean} |
- * @this {WebInspector.SourcesPanel} |
- */ |
- function matchResource(resource) |
- { |
- if (resource.contentURL().endsWith(uiSourceCode.name())) { |
- createMappingInfobar.call(this, false); |
- return true; |
- } |
- return false; |
- } |
- |
- // Then map network -> filesystem. |
- if (uiSourceCode.project().type() === WebInspector.projectTypes.Network || uiSourceCode.project().type() === WebInspector.projectTypes.ContentScripts) { |
- if (this._workspace.uiSourceCodeForURL(uiSourceCode.url) !== uiSourceCode) |
- return; |
- |
- var filesystemProjects = this._workspace.projectsForType(WebInspector.projectTypes.FileSystem); |
- for (var i = 0; i < filesystemProjects.length; ++i) { |
- var name = uiSourceCode.name(); |
- var fsUiSourceCodes = filesystemProjects[i].uiSourceCodes(); |
- for (var j = 0; j < fsUiSourceCodes.length; ++j) { |
- if (fsUiSourceCodes[j].name() === name) { |
- createMappingInfobar.call(this, true); |
- return; |
- } |
- } |
- } |
- |
- // There are no matching filesystems. Suggest adding a filesystem in case of localhost. |
- var originURL = uiSourceCode.originURL().asParsedURL(); |
- if (originURL && originURL.host === "localhost") |
- createWorkspaceInfobar(); |
- } |
- |
- /** |
- * @param {boolean} isNetwork |
- * @this {WebInspector.SourcesPanel} |
- */ |
- function createMappingInfobar(isNetwork) |
- { |
- var title; |
- if (isNetwork) |
- title = WebInspector.UIString("Map network resource '%s' to workspace?", uiSourceCode.originURL()); |
- else |
- title = WebInspector.UIString("Map workspace resource '%s' to network?", uiSourceCode.path()); |
- |
- var infobar = new WebInspector.UISourceCodeFrame.Infobar(WebInspector.UISourceCodeFrame.Infobar.Level.Info, title); |
- infobar.createDetailsRowMessage(WebInspector.UIString("You can map files in your workspace to the ones loaded over the network. As a result, changes made in DevTools will be persisted to disk.")); |
- infobar.createDetailsRowMessage(WebInspector.UIString("Use context menu to establish the mapping at any time.")); |
- var actionLink = infobar.createDetailsRowMessage("").createChild("a"); |
- actionLink.href = ""; |
- actionLink.onclick = establishTheMapping.bind(this); |
- actionLink.textContent = WebInspector.UIString("Establish the mapping now..."); |
- appendInfobar(infobar); |
- } |
- |
- /** |
- * @param {?Event} event |
- * @this {WebInspector.SourcesPanel} |
- */ |
- function establishTheMapping(event) |
- { |
- event.consume(true); |
- if (uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem) |
- this._mapFileSystemToNetwork(uiSourceCode); |
- else |
- this._mapNetworkToFileSystem(uiSourceCode); |
- } |
- |
- function createWorkspaceInfobar() |
- { |
- var infobar = new WebInspector.UISourceCodeFrame.Infobar(WebInspector.UISourceCodeFrame.Infobar.Level.Info, WebInspector.UIString("Serving from the file system? Add your files into the workspace.")); |
- infobar.createDetailsRowMessage(WebInspector.UIString("If you add files into your DevTools workspace, your changes will be persisted to disk.")); |
- infobar.createDetailsRowMessage(WebInspector.UIString("To add a folder into the workspace, drag and drop it into the Sources panel.")); |
- appendInfobar(infobar); |
- } |
- |
- /** |
- * @param {!WebInspector.UISourceCodeFrame.Infobar} infobar |
- */ |
- function appendInfobar(infobar) |
- { |
- infobar.createDetailsRowMessage("").createChild("br"); |
- var rowElement = infobar.createDetailsRowMessage(WebInspector.UIString("For more information on workspaces, refer to the ")); |
- var a = rowElement.createChild("a"); |
- a.textContent = "workspaces documentation"; |
- a.href = "https://developer.chrome.com/devtools/docs/workspaces"; |
- rowElement.createTextChild("."); |
- uiSourceCode[WebInspector.SourcesPanel._infobarSymbol] = infobar; |
- uiSourceCodeFrame.attachInfobars([infobar]); |
- } |
}, |
/** |
@@ -916,7 +792,7 @@ WebInspector.SourcesPanel.prototype = { |
/** |
* @param {!WebInspector.UISourceCode} uiSourceCode |
*/ |
- _mapFileSystemToNetwork: function(uiSourceCode) |
+ mapFileSystemToNetwork: function(uiSourceCode) |
{ |
WebInspector.SelectUISourceCodeForProjectTypesDialog.show(uiSourceCode.name(), [WebInspector.projectTypes.Network, WebInspector.projectTypes.ContentScripts], mapFileSystemToNetwork.bind(this), this.editorView.mainElement()) |
@@ -932,20 +808,9 @@ WebInspector.SourcesPanel.prototype = { |
}, |
/** |
- * @param {!WebInspector.UISourceCode} uiSourceCode |
- */ |
- _removeNetworkMapping: function(uiSourceCode) |
- { |
- if (confirm(WebInspector.UIString("Are you sure you want to remove network mapping?"))) { |
- this._workspace.removeMapping(uiSourceCode); |
- this._suggestReload(); |
- } |
- }, |
- |
- /** |
* @param {!WebInspector.UISourceCode} networkUISourceCode |
*/ |
- _mapNetworkToFileSystem: function(networkUISourceCode) |
+ mapNetworkToFileSystem: function(networkUISourceCode) |
{ |
WebInspector.SelectUISourceCodeForProjectTypesDialog.show(networkUISourceCode.name(), [WebInspector.projectTypes.FileSystem], mapNetworkToFileSystem.bind(this), this.editorView.mainElement()) |
@@ -961,6 +826,17 @@ WebInspector.SourcesPanel.prototype = { |
}, |
/** |
+ * @param {!WebInspector.UISourceCode} uiSourceCode |
+ */ |
+ _removeNetworkMapping: function(uiSourceCode) |
+ { |
+ if (confirm(WebInspector.UIString("Are you sure you want to remove network mapping?"))) { |
+ this._workspace.removeMapping(uiSourceCode); |
+ this._suggestReload(); |
+ } |
+ }, |
+ |
+ /** |
* @param {!WebInspector.ContextMenu} contextMenu |
* @param {!WebInspector.UISourceCode} uiSourceCode |
*/ |
@@ -969,7 +845,7 @@ WebInspector.SourcesPanel.prototype = { |
if (uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem) { |
var hasMappings = !!uiSourceCode.url; |
if (!hasMappings) |
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Map to network resource\u2026" : "Map to Network Resource\u2026"), this._mapFileSystemToNetwork.bind(this, uiSourceCode)); |
+ contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Map to network resource\u2026" : "Map to Network Resource\u2026"), this.mapFileSystemToNetwork.bind(this, uiSourceCode)); |
else |
contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Remove network mapping" : "Remove Network Mapping"), this._removeNetworkMapping.bind(this, uiSourceCode)); |
} |
@@ -986,7 +862,7 @@ WebInspector.SourcesPanel.prototype = { |
if (!this._workspace.projects().filter(filterProject).length) |
return; |
if (this._workspace.uiSourceCodeForURL(uiSourceCode.url) === uiSourceCode) |
- contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Map to file system resource\u2026" : "Map to File System Resource\u2026"), this._mapNetworkToFileSystem.bind(this, uiSourceCode)); |
+ contextMenu.appendItem(WebInspector.UIString(WebInspector.useLowerCaseMenuTitles() ? "Map to file system resource\u2026" : "Map to File System Resource\u2026"), this.mapNetworkToFileSystem.bind(this, uiSourceCode)); |
} |
}, |