| Index: third_party/WebKit/Source/devtools/front_end/sources/WorkspaceMappingTip.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/sources/WorkspaceMappingTip.js b/third_party/WebKit/Source/devtools/front_end/sources/WorkspaceMappingTip.js
|
| index 69e93cfb48248dfc14ea044fe403f2738457ebd9..220b181334e855d0433b6e6290072bfd4cdb7a1d 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/sources/WorkspaceMappingTip.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/sources/WorkspaceMappingTip.js
|
| @@ -1,180 +1,185 @@
|
| -
|
| // 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
|
| - * @param {!WebInspector.SourcesPanel} sourcesPanel
|
| - * @param {!WebInspector.Workspace} workspace
|
| + * @unrestricted
|
| */
|
| -WebInspector.WorkspaceMappingTip = function(sourcesPanel, workspace)
|
| -{
|
| +WebInspector.WorkspaceMappingTip = class {
|
| + /**
|
| + * @param {!WebInspector.SourcesPanel} sourcesPanel
|
| + * @param {!WebInspector.Workspace} workspace
|
| + */
|
| + constructor(sourcesPanel, workspace) {
|
| this._sourcesPanel = sourcesPanel;
|
| this._workspace = workspace;
|
|
|
| this._sourcesView = this._sourcesPanel.sourcesView();
|
| - this._workspaceInfobarDisabledSetting = WebInspector.settings.createSetting("workspaceInfobarDisabled", false);
|
| - this._workspaceMappingInfobarDisabledSetting = WebInspector.settings.createSetting("workspaceMappingInfobarDisabled", false);
|
| + this._workspaceInfobarDisabledSetting = WebInspector.settings.createSetting('workspaceInfobarDisabled', false);
|
| + this._workspaceMappingInfobarDisabledSetting =
|
| + WebInspector.settings.createSetting('workspaceMappingInfobarDisabled', false);
|
|
|
| if (this._workspaceInfobarDisabledSetting.get() && this._workspaceMappingInfobarDisabledSetting.get())
|
| - return;
|
| + return;
|
| this._sourcesView.addEventListener(WebInspector.SourcesView.Events.EditorSelected, this._editorSelected.bind(this));
|
| - WebInspector.persistence.addEventListener(WebInspector.Persistence.Events.BindingCreated, this._bindingCreated, this);
|
| -};
|
| + WebInspector.persistence.addEventListener(
|
| + WebInspector.Persistence.Events.BindingCreated, this._bindingCreated, this);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _bindingCreated(event) {
|
| + var binding = /** @type {!WebInspector.PersistenceBinding} */ (event.data);
|
| + if (binding.network[WebInspector.WorkspaceMappingTip._infobarSymbol])
|
| + binding.network[WebInspector.WorkspaceMappingTip._infobarSymbol].dispose();
|
| + if (binding.fileSystem[WebInspector.WorkspaceMappingTip._infobarSymbol])
|
| + binding.fileSystem[WebInspector.WorkspaceMappingTip._infobarSymbol].dispose();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _editorSelected(event) {
|
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| + if (this._editorSelectedTimer)
|
| + clearTimeout(this._editorSelectedTimer);
|
| + this._editorSelectedTimer = setTimeout(this._updateSuggestedMappingInfobar.bind(this, uiSourceCode), 3000);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _updateSuggestedMappingInfobar(uiSourceCode) {
|
| + var uiSourceCodeFrame = this._sourcesView.viewForFile(uiSourceCode);
|
| +
|
| + if (!uiSourceCodeFrame.isShowing())
|
| + return;
|
| + if (uiSourceCode[WebInspector.WorkspaceMappingTip._infobarSymbol])
|
| + return;
|
| +
|
| + // First try mapping filesystem -> network.
|
| + if (!this._workspaceMappingInfobarDisabledSetting.get() &&
|
| + uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem) {
|
| + if (WebInspector.persistence.binding(uiSourceCode))
|
| + return;
|
|
|
| -WebInspector.WorkspaceMappingTip._infobarSymbol = Symbol("infobar");
|
| -
|
| -WebInspector.WorkspaceMappingTip.prototype = {
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _bindingCreated: function(event)
|
| - {
|
| - var binding = /** @type {!WebInspector.PersistenceBinding} */(event.data);
|
| - if (binding.network[WebInspector.WorkspaceMappingTip._infobarSymbol])
|
| - binding.network[WebInspector.WorkspaceMappingTip._infobarSymbol].dispose();
|
| - if (binding.fileSystem[WebInspector.WorkspaceMappingTip._infobarSymbol])
|
| - binding.fileSystem[WebInspector.WorkspaceMappingTip._infobarSymbol].dispose();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _editorSelected: function(event)
|
| - {
|
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| - if (this._editorSelectedTimer)
|
| - clearTimeout(this._editorSelectedTimer);
|
| - this._editorSelectedTimer = setTimeout(this._updateSuggestedMappingInfobar.bind(this, uiSourceCode), 3000);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _updateSuggestedMappingInfobar: function(uiSourceCode)
|
| - {
|
| - var uiSourceCodeFrame = this._sourcesView.viewForFile(uiSourceCode);
|
| -
|
| - if (!uiSourceCodeFrame.isShowing())
|
| - return;
|
| - if (uiSourceCode[WebInspector.WorkspaceMappingTip._infobarSymbol])
|
| + var networkProjects = this._workspace.projectsForType(WebInspector.projectTypes.Network);
|
| + networkProjects =
|
| + networkProjects.concat(this._workspace.projectsForType(WebInspector.projectTypes.ContentScripts));
|
| + for (var i = 0; i < networkProjects.length; ++i) {
|
| + var name = uiSourceCode.name();
|
| + var networkUiSourceCodes = networkProjects[i].uiSourceCodes();
|
| + for (var j = 0; j < networkUiSourceCodes.length; ++j) {
|
| + if (networkUiSourceCodes[j].name() === name && this._isLocalHost(networkUiSourceCodes[j].url())) {
|
| + this._showMappingInfobar(uiSourceCode, false);
|
| return;
|
| -
|
| - // First try mapping filesystem -> network.
|
| - if (!this._workspaceMappingInfobarDisabledSetting.get() && uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem) {
|
| - if (WebInspector.persistence.binding(uiSourceCode))
|
| - return;
|
| -
|
| - var networkProjects = this._workspace.projectsForType(WebInspector.projectTypes.Network);
|
| - networkProjects = networkProjects.concat(this._workspace.projectsForType(WebInspector.projectTypes.ContentScripts));
|
| - for (var i = 0; i < networkProjects.length; ++i) {
|
| - var name = uiSourceCode.name();
|
| - var networkUiSourceCodes = networkProjects[i].uiSourceCodes();
|
| - for (var j = 0; j < networkUiSourceCodes.length; ++j) {
|
| - if (networkUiSourceCodes[j].name() === name && this._isLocalHost(networkUiSourceCodes[j].url())) {
|
| - this._showMappingInfobar(uiSourceCode, false);
|
| - return;
|
| - }
|
| - }
|
| - }
|
| + }
|
| }
|
| + }
|
| + }
|
|
|
| - // Then map network -> filesystem.
|
| - if (uiSourceCode.project().type() === WebInspector.projectTypes.Network || uiSourceCode.project().type() === WebInspector.projectTypes.ContentScripts) {
|
| - // Suggest for localhost only.
|
| - if (!this._isLocalHost(uiSourceCode.url()) || WebInspector.persistence.binding(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) {
|
| - this._showMappingInfobar(uiSourceCode, true);
|
| - return;
|
| - }
|
| - }
|
| - }
|
| -
|
| - this._showWorkspaceInfobar(uiSourceCode);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {string} url
|
| - * @return {boolean}
|
| - */
|
| - _isLocalHost: function(url)
|
| - {
|
| - var parsedURL = url.asParsedURL();
|
| - return !!parsedURL && parsedURL.host === "localhost";
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _showWorkspaceInfobar: function(uiSourceCode)
|
| - {
|
| - var infobar = WebInspector.Infobar.create(WebInspector.Infobar.Type.Info, WebInspector.UIString("Serving from the file system? Add your files into the workspace."), this._workspaceInfobarDisabledSetting);
|
| - if (!infobar)
|
| - return;
|
| - 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."));
|
| - this._appendInfobar(uiSourceCode, infobar);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {boolean} isNetwork
|
| - */
|
| - _showMappingInfobar: function(uiSourceCode, isNetwork)
|
| - {
|
| - var title;
|
| - if (isNetwork)
|
| - title = WebInspector.UIString("Map network resource '%s' to workspace?", uiSourceCode.url());
|
| - else
|
| - title = WebInspector.UIString("Map workspace resource '%s' to network?", uiSourceCode.url());
|
| -
|
| - var infobar = WebInspector.Infobar.create(WebInspector.Infobar.Type.Info, title, this._workspaceMappingInfobarDisabledSetting);
|
| - if (!infobar)
|
| + // Then map network -> filesystem.
|
| + if (uiSourceCode.project().type() === WebInspector.projectTypes.Network ||
|
| + uiSourceCode.project().type() === WebInspector.projectTypes.ContentScripts) {
|
| + // Suggest for localhost only.
|
| + if (!this._isLocalHost(uiSourceCode.url()) || WebInspector.persistence.binding(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) {
|
| + this._showMappingInfobar(uiSourceCode, true);
|
| return;
|
| - 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 anchor = createElementWithClass("a", "link");
|
| - anchor.textContent = WebInspector.UIString("Establish the mapping now...");
|
| - anchor.addEventListener("click", this._establishTheMapping.bind(this, uiSourceCode), false);
|
| - infobar.createDetailsRowMessage("").appendChild(anchor);
|
| - this._appendInfobar(uiSourceCode, infobar);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {?Event} event
|
| - */
|
| - _establishTheMapping: function(uiSourceCode, event)
|
| - {
|
| - event.consume(true);
|
| - if (uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem)
|
| - this._sourcesPanel.mapFileSystemToNetwork(uiSourceCode);
|
| - else
|
| - this._sourcesPanel.mapNetworkToFileSystem(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {!WebInspector.Infobar} infobar
|
| - */
|
| - _appendInfobar: function(uiSourceCode, infobar)
|
| - {
|
| - var uiSourceCodeFrame = this._sourcesView.viewForFile(uiSourceCode);
|
| -
|
| - var rowElement = infobar.createDetailsRowMessage(WebInspector.UIString("For more information on workspaces, refer to the "));
|
| - rowElement.appendChild(WebInspector.linkifyDocumentationURLAsNode("../setup/setup-workflow", WebInspector.UIString("workspaces documentation")));
|
| - rowElement.createTextChild(".");
|
| - uiSourceCode[WebInspector.WorkspaceMappingTip._infobarSymbol] = infobar;
|
| - uiSourceCodeFrame.attachInfobars([infobar]);
|
| - WebInspector.runCSSAnimationOnce(infobar.element, "source-frame-infobar-animation");
|
| + }
|
| + }
|
| + }
|
| +
|
| + this._showWorkspaceInfobar(uiSourceCode);
|
| }
|
| + }
|
| +
|
| + /**
|
| + * @param {string} url
|
| + * @return {boolean}
|
| + */
|
| + _isLocalHost(url) {
|
| + var parsedURL = url.asParsedURL();
|
| + return !!parsedURL && parsedURL.host === 'localhost';
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _showWorkspaceInfobar(uiSourceCode) {
|
| + var infobar = WebInspector.Infobar.create(
|
| + WebInspector.Infobar.Type.Info,
|
| + WebInspector.UIString('Serving from the file system? Add your files into the workspace.'),
|
| + this._workspaceInfobarDisabledSetting);
|
| + if (!infobar)
|
| + return;
|
| + 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.'));
|
| + this._appendInfobar(uiSourceCode, infobar);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {boolean} isNetwork
|
| + */
|
| + _showMappingInfobar(uiSourceCode, isNetwork) {
|
| + var title;
|
| + if (isNetwork)
|
| + title = WebInspector.UIString('Map network resource \'%s\' to workspace?', uiSourceCode.url());
|
| + else
|
| + title = WebInspector.UIString('Map workspace resource \'%s\' to network?', uiSourceCode.url());
|
| +
|
| + var infobar = WebInspector.Infobar.create(
|
| + WebInspector.Infobar.Type.Info, title, this._workspaceMappingInfobarDisabledSetting);
|
| + if (!infobar)
|
| + return;
|
| + 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 anchor = createElementWithClass('a', 'link');
|
| + anchor.textContent = WebInspector.UIString('Establish the mapping now...');
|
| + anchor.addEventListener('click', this._establishTheMapping.bind(this, uiSourceCode), false);
|
| + infobar.createDetailsRowMessage('').appendChild(anchor);
|
| + this._appendInfobar(uiSourceCode, infobar);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {?Event} event
|
| + */
|
| + _establishTheMapping(uiSourceCode, event) {
|
| + event.consume(true);
|
| + if (uiSourceCode.project().type() === WebInspector.projectTypes.FileSystem)
|
| + this._sourcesPanel.mapFileSystemToNetwork(uiSourceCode);
|
| + else
|
| + this._sourcesPanel.mapNetworkToFileSystem(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {!WebInspector.Infobar} infobar
|
| + */
|
| + _appendInfobar(uiSourceCode, infobar) {
|
| + var uiSourceCodeFrame = this._sourcesView.viewForFile(uiSourceCode);
|
| +
|
| + var rowElement =
|
| + infobar.createDetailsRowMessage(WebInspector.UIString('For more information on workspaces, refer to the '));
|
| + rowElement.appendChild(WebInspector.linkifyDocumentationURLAsNode(
|
| + '../setup/setup-workflow', WebInspector.UIString('workspaces documentation')));
|
| + rowElement.createTextChild('.');
|
| + uiSourceCode[WebInspector.WorkspaceMappingTip._infobarSymbol] = infobar;
|
| + uiSourceCodeFrame.attachInfobars([infobar]);
|
| + WebInspector.runCSSAnimationOnce(infobar.element, 'source-frame-infobar-animation');
|
| + }
|
| };
|
| +
|
| +WebInspector.WorkspaceMappingTip._infobarSymbol = Symbol('infobar');
|
|
|