| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @unrestricted | 6 * @unrestricted |
| 7 */ | 7 */ |
| 8 Persistence.WorkspaceSettingsTab = class extends UI.VBox { | 8 Persistence.WorkspaceSettingsTab = class extends UI.VBox { |
| 9 constructor() { | 9 constructor() { |
| 10 super(); | 10 super(); |
| 11 this.registerRequiredCSS('persistence/workspaceSettingsTab.css'); | 11 this.registerRequiredCSS('persistence/workspaceSettingsTab.css'); |
| 12 | 12 |
| 13 var header = this.element.createChild('header'); | 13 var header = this.element.createChild('header'); |
| 14 header.createChild('h3').createTextChild(Common.UIString('Workspace')); | 14 header.createChild('h3').createTextChild(Common.UIString('Workspace')); |
| 15 | 15 |
| 16 this.containerElement = this.element.createChild('div', 'help-container-wrap
per') | 16 this.containerElement = this.element.createChild('div', 'help-container-wrap
per') |
| 17 .createChild('div', 'settings-tab help-content h
elp-container'); | 17 .createChild('div', 'settings-tab help-content h
elp-container'); |
| 18 | 18 |
| 19 Workspace.isolatedFileSystemManager.addEventListener( | 19 Persistence.isolatedFileSystemManager.addEventListener( |
| 20 Workspace.IsolatedFileSystemManager.Events.FileSystemAdded, this._fileSy
stemAdded, this); | 20 Persistence.IsolatedFileSystemManager.Events.FileSystemAdded, this._file
SystemAdded, this); |
| 21 Workspace.isolatedFileSystemManager.addEventListener( | 21 Persistence.isolatedFileSystemManager.addEventListener( |
| 22 Workspace.IsolatedFileSystemManager.Events.FileSystemRemoved, this._file
SystemRemoved, this); | 22 Persistence.IsolatedFileSystemManager.Events.FileSystemRemoved, this._fi
leSystemRemoved, this); |
| 23 | 23 |
| 24 var folderExcludePatternInput = this._createFolderExcludePatternInput(); | 24 var folderExcludePatternInput = this._createFolderExcludePatternInput(); |
| 25 folderExcludePatternInput.classList.add('folder-exclude-pattern'); | 25 folderExcludePatternInput.classList.add('folder-exclude-pattern'); |
| 26 this.containerElement.appendChild(folderExcludePatternInput); | 26 this.containerElement.appendChild(folderExcludePatternInput); |
| 27 | 27 |
| 28 if (Runtime.experiments.isEnabled('persistence2')) { | 28 if (Runtime.experiments.isEnabled('persistence2')) { |
| 29 var div = this.containerElement.createChild('div', 'settings-info-message'
); | 29 var div = this.containerElement.createChild('div', 'settings-info-message'
); |
| 30 div.createTextChild(Common.UIString('Mappings are inferred automatically.
Please ')); | 30 div.createTextChild(Common.UIString('Mappings are inferred automatically.
Please ')); |
| 31 div.appendChild(UI.createExternalLink( | 31 div.appendChild(UI.createExternalLink( |
| 32 'https://bugs.chromium.org/p/chromium/issues/entry?template=Defect%20r
eport%20from%20user&components=Platform%3EDevTools%3EAuthoring&comment=DevTools%
20failed%20to%20link%20network%20resource%20to%20filesystem.%0A%0APlatform%3A%20
%3CLinux%2FWin%2FMac%3E%0AChrome%20version%3A%20%3Cyour%20chrome%20version%3E%0A
%0AWhat%20are%20the%20details%20of%20your%20project%3F%0A-%20Source%20code%20(if
%20any)%3A%20http%3A%2F%2Fgithub.com%2Fexample%2Fexample%0A-%20Build%20System%3A
%20gulp%2Fgrunt%2Fwebpack%2Frollup%2F...%0A-%20HTTP%20server%3A%20node%20HTTP%2F
nginx%2Fapache...%0A%0AAssets%20failed%20to%20link%20(or%20incorrectly%20linked)
%3A%0A1.%0A2.%0A3.%0A%0AIf%20possible%2C%20please%20attach%20a%20screenshot%20of
%20network%20sources%20navigator%20which%20should%0Ashow%20which%20resources%20f
ailed%20to%20map', | 32 'https://bugs.chromium.org/p/chromium/issues/entry?template=Defect%20r
eport%20from%20user&components=Platform%3EDevTools%3EAuthoring&comment=DevTools%
20failed%20to%20link%20network%20resource%20to%20filesystem.%0A%0APlatform%3A%20
%3CLinux%2FWin%2FMac%3E%0AChrome%20version%3A%20%3Cyour%20chrome%20version%3E%0A
%0AWhat%20are%20the%20details%20of%20your%20project%3F%0A-%20Source%20code%20(if
%20any)%3A%20http%3A%2F%2Fgithub.com%2Fexample%2Fexample%0A-%20Build%20System%3A
%20gulp%2Fgrunt%2Fwebpack%2Frollup%2F...%0A-%20HTTP%20server%3A%20node%20HTTP%2F
nginx%2Fapache...%0A%0AAssets%20failed%20to%20link%20(or%20incorrectly%20linked)
%3A%0A1.%0A2.%0A3.%0A%0AIf%20possible%2C%20please%20attach%20a%20screenshot%20of
%20network%20sources%20navigator%20which%20should%0Ashow%20which%20resources%20f
ailed%20to%20map', |
| 33 Common.UIString('report'))); | 33 Common.UIString('report'))); |
| 34 div.createTextChild(Common.UIString(' any bugs.')); | 34 div.createTextChild(Common.UIString(' any bugs.')); |
| 35 } | 35 } |
| 36 | 36 |
| 37 this._fileSystemsListContainer = this.containerElement.createChild('div', ''
); | 37 this._fileSystemsListContainer = this.containerElement.createChild('div', ''
); |
| 38 | 38 |
| 39 this.containerElement.appendChild( | 39 this.containerElement.appendChild( |
| 40 UI.createTextButton(Common.UIString('Add folder\u2026'), this._addFileSy
stemClicked.bind(this))); | 40 UI.createTextButton(Common.UIString('Add folder\u2026'), this._addFileSy
stemClicked.bind(this))); |
| 41 | 41 |
| 42 /** @type {!Map<string, !Element>} */ | 42 /** @type {!Map<string, !Element>} */ |
| 43 this._elementByPath = new Map(); | 43 this._elementByPath = new Map(); |
| 44 | 44 |
| 45 /** @type {!Map<string, !Persistence.EditFileSystemView>} */ | 45 /** @type {!Map<string, !Persistence.EditFileSystemView>} */ |
| 46 this._mappingViewByPath = new Map(); | 46 this._mappingViewByPath = new Map(); |
| 47 | 47 |
| 48 var fileSystems = Workspace.isolatedFileSystemManager.fileSystems(); | 48 var fileSystems = Persistence.isolatedFileSystemManager.fileSystems(); |
| 49 for (var i = 0; i < fileSystems.length; ++i) | 49 for (var i = 0; i < fileSystems.length; ++i) |
| 50 this._addItem(fileSystems[i]); | 50 this._addItem(fileSystems[i]); |
| 51 } | 51 } |
| 52 | 52 |
| 53 /** | 53 /** |
| 54 * @return {!Element} | 54 * @return {!Element} |
| 55 */ | 55 */ |
| 56 _createFolderExcludePatternInput() { | 56 _createFolderExcludePatternInput() { |
| 57 var p = createElement('p'); | 57 var p = createElement('p'); |
| 58 var labelElement = p.createChild('label'); | 58 var labelElement = p.createChild('label'); |
| 59 labelElement.textContent = Common.UIString('Folder exclude pattern'); | 59 labelElement.textContent = Common.UIString('Folder exclude pattern'); |
| 60 var inputElement = p.createChild('input'); | 60 var inputElement = p.createChild('input'); |
| 61 inputElement.type = 'text'; | 61 inputElement.type = 'text'; |
| 62 inputElement.style.width = '270px'; | 62 inputElement.style.width = '270px'; |
| 63 var folderExcludeSetting = Workspace.isolatedFileSystemManager.workspaceFold
erExcludePatternSetting(); | 63 var folderExcludeSetting = Persistence.isolatedFileSystemManager.workspaceFo
lderExcludePatternSetting(); |
| 64 var setValue = | 64 var setValue = |
| 65 UI.bindInput(inputElement, folderExcludeSetting.set.bind(folderExcludeSe
tting), regexValidator, false); | 65 UI.bindInput(inputElement, folderExcludeSetting.set.bind(folderExcludeSe
tting), regexValidator, false); |
| 66 folderExcludeSetting.addChangeListener(() => setValue.call(null, folderExclu
deSetting.get())); | 66 folderExcludeSetting.addChangeListener(() => setValue.call(null, folderExclu
deSetting.get())); |
| 67 setValue(folderExcludeSetting.get()); | 67 setValue(folderExcludeSetting.get()); |
| 68 return p; | 68 return p; |
| 69 | 69 |
| 70 /** | 70 /** |
| 71 * @param {string} value | 71 * @param {string} value |
| 72 * @return {boolean} | 72 * @return {boolean} |
| 73 */ | 73 */ |
| 74 function regexValidator(value) { | 74 function regexValidator(value) { |
| 75 var regex; | 75 var regex; |
| 76 try { | 76 try { |
| 77 regex = new RegExp(value); | 77 regex = new RegExp(value); |
| 78 } catch (e) { | 78 } catch (e) { |
| 79 } | 79 } |
| 80 return !!regex; | 80 return !!regex; |
| 81 } | 81 } |
| 82 } | 82 } |
| 83 | 83 |
| 84 /** | 84 /** |
| 85 * @param {!Workspace.IsolatedFileSystem} fileSystem | 85 * @param {!Persistence.IsolatedFileSystem} fileSystem |
| 86 */ | 86 */ |
| 87 _addItem(fileSystem) { | 87 _addItem(fileSystem) { |
| 88 var element = this._renderFileSystem(fileSystem); | 88 var element = this._renderFileSystem(fileSystem); |
| 89 this._elementByPath.set(fileSystem.path(), element); | 89 this._elementByPath.set(fileSystem.path(), element); |
| 90 | 90 |
| 91 this._fileSystemsListContainer.appendChild(element); | 91 this._fileSystemsListContainer.appendChild(element); |
| 92 | 92 |
| 93 var mappingView = new Persistence.EditFileSystemView(fileSystem.path()); | 93 var mappingView = new Persistence.EditFileSystemView(fileSystem.path()); |
| 94 this._mappingViewByPath.set(fileSystem.path(), mappingView); | 94 this._mappingViewByPath.set(fileSystem.path(), mappingView); |
| 95 mappingView.element.classList.add('file-system-mapping-view'); | 95 mappingView.element.classList.add('file-system-mapping-view'); |
| 96 mappingView.show(element); | 96 mappingView.show(element); |
| 97 } | 97 } |
| 98 | 98 |
| 99 /** | 99 /** |
| 100 * @param {!Workspace.IsolatedFileSystem} fileSystem | 100 * @param {!Persistence.IsolatedFileSystem} fileSystem |
| 101 * @return {!Element} | 101 * @return {!Element} |
| 102 */ | 102 */ |
| 103 _renderFileSystem(fileSystem) { | 103 _renderFileSystem(fileSystem) { |
| 104 var fileSystemPath = fileSystem.path(); | 104 var fileSystemPath = fileSystem.path(); |
| 105 var lastIndexOfSlash = fileSystemPath.lastIndexOf(Host.isWin() ? '\\' : '/')
; | 105 var lastIndexOfSlash = fileSystemPath.lastIndexOf(Host.isWin() ? '\\' : '/')
; |
| 106 var folderName = fileSystemPath.substr(lastIndexOfSlash + 1); | 106 var folderName = fileSystemPath.substr(lastIndexOfSlash + 1); |
| 107 | 107 |
| 108 var element = createElementWithClass('div', 'file-system-container'); | 108 var element = createElementWithClass('div', 'file-system-container'); |
| 109 var header = element.createChild('div', 'file-system-header'); | 109 var header = element.createChild('div', 'file-system-header'); |
| 110 | 110 |
| 111 header.createChild('div', 'file-system-name').textContent = folderName; | 111 header.createChild('div', 'file-system-name').textContent = folderName; |
| 112 var path = header.createChild('div', 'file-system-path'); | 112 var path = header.createChild('div', 'file-system-path'); |
| 113 path.textContent = fileSystemPath; | 113 path.textContent = fileSystemPath; |
| 114 path.title = fileSystemPath; | 114 path.title = fileSystemPath; |
| 115 | 115 |
| 116 var toolbar = new UI.Toolbar(''); | 116 var toolbar = new UI.Toolbar(''); |
| 117 var button = new UI.ToolbarButton(Common.UIString('Remove'), 'largeicon-dele
te'); | 117 var button = new UI.ToolbarButton(Common.UIString('Remove'), 'largeicon-dele
te'); |
| 118 button.addEventListener(UI.ToolbarButton.Events.Click, this._removeFileSyste
mClicked.bind(this, fileSystem)); | 118 button.addEventListener(UI.ToolbarButton.Events.Click, this._removeFileSyste
mClicked.bind(this, fileSystem)); |
| 119 toolbar.appendToolbarItem(button); | 119 toolbar.appendToolbarItem(button); |
| 120 header.appendChild(toolbar.element); | 120 header.appendChild(toolbar.element); |
| 121 | 121 |
| 122 return element; | 122 return element; |
| 123 } | 123 } |
| 124 | 124 |
| 125 /** | 125 /** |
| 126 * @param {!Workspace.IsolatedFileSystem} fileSystem | 126 * @param {!Persistence.IsolatedFileSystem} fileSystem |
| 127 */ | 127 */ |
| 128 _removeFileSystemClicked(fileSystem) { | 128 _removeFileSystemClicked(fileSystem) { |
| 129 Workspace.isolatedFileSystemManager.removeFileSystem(fileSystem); | 129 Persistence.isolatedFileSystemManager.removeFileSystem(fileSystem); |
| 130 } | 130 } |
| 131 | 131 |
| 132 _addFileSystemClicked() { | 132 _addFileSystemClicked() { |
| 133 Workspace.isolatedFileSystemManager.addFileSystem(); | 133 Persistence.isolatedFileSystemManager.addFileSystem(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 _fileSystemAdded(event) { | 136 _fileSystemAdded(event) { |
| 137 var fileSystem = /** @type {!Workspace.IsolatedFileSystem} */ (event.data); | 137 var fileSystem = /** @type {!Persistence.IsolatedFileSystem} */ (event.data)
; |
| 138 this._addItem(fileSystem); | 138 this._addItem(fileSystem); |
| 139 } | 139 } |
| 140 | 140 |
| 141 _fileSystemRemoved(event) { | 141 _fileSystemRemoved(event) { |
| 142 var fileSystem = /** @type {!Workspace.IsolatedFileSystem} */ (event.data); | 142 var fileSystem = /** @type {!Persistence.IsolatedFileSystem} */ (event.data)
; |
| 143 | 143 |
| 144 var mappingView = this._mappingViewByPath.get(fileSystem.path()); | 144 var mappingView = this._mappingViewByPath.get(fileSystem.path()); |
| 145 if (mappingView) { | 145 if (mappingView) { |
| 146 mappingView.dispose(); | 146 mappingView.dispose(); |
| 147 this._mappingViewByPath.delete(fileSystem.path()); | 147 this._mappingViewByPath.delete(fileSystem.path()); |
| 148 } | 148 } |
| 149 | 149 |
| 150 var element = this._elementByPath.get(fileSystem.path()); | 150 var element = this._elementByPath.get(fileSystem.path()); |
| 151 if (element) { | 151 if (element) { |
| 152 this._elementByPath.delete(fileSystem.path()); | 152 this._elementByPath.delete(fileSystem.path()); |
| 153 element.remove(); | 153 element.remove(); |
| 154 } | 154 } |
| 155 } | 155 } |
| 156 }; | 156 }; |
| OLD | NEW |