| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 /** |
| 6 * @unrestricted |
| 7 */ |
| 8 Persistence.WorkspaceSettingsTab = class extends UI.VBox { |
| 9 constructor() { |
| 10 super(); |
| 11 this.registerRequiredCSS('persistence/workspaceSettingsTab.css'); |
| 12 |
| 13 var header = this.element.createChild('header'); |
| 14 header.createChild('h3').createTextChild(Common.UIString('Workspace')); |
| 15 |
| 16 this.containerElement = this.element.createChild('div', 'help-container-wrap
per') |
| 17 .createChild('div', 'settings-tab help-content h
elp-container'); |
| 18 |
| 19 Workspace.isolatedFileSystemManager.addEventListener( |
| 20 Workspace.IsolatedFileSystemManager.Events.FileSystemAdded, this._fileSy
stemAdded, this); |
| 21 Workspace.isolatedFileSystemManager.addEventListener( |
| 22 Workspace.IsolatedFileSystemManager.Events.FileSystemRemoved, this._file
SystemRemoved, this); |
| 23 |
| 24 var folderExcludePatternInput = this._createFolderExcludePatternInput(); |
| 25 folderExcludePatternInput.classList.add('folder-exclude-pattern'); |
| 26 this.containerElement.appendChild(folderExcludePatternInput); |
| 27 |
| 28 if (Runtime.experiments.isEnabled('persistence2')) { |
| 29 var div = this.containerElement.createChild('div', 'settings-info-message'
); |
| 30 div.createTextChild(Common.UIString('Mappings are inferred automatically.
Please ')); |
| 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', |
| 33 Common.UIString('report'))); |
| 34 div.createTextChild(Common.UIString(' any bugs.')); |
| 35 } |
| 36 |
| 37 this._fileSystemsListContainer = this.containerElement.createChild('div', ''
); |
| 38 |
| 39 this.containerElement.appendChild( |
| 40 UI.createTextButton(Common.UIString('Add folder\u2026'), this._addFileSy
stemClicked.bind(this))); |
| 41 |
| 42 /** @type {!Map<string, !Element>} */ |
| 43 this._elementByPath = new Map(); |
| 44 |
| 45 /** @type {!Map<string, !Persistence.EditFileSystemView>} */ |
| 46 this._mappingViewByPath = new Map(); |
| 47 |
| 48 var fileSystems = Workspace.isolatedFileSystemManager.fileSystems(); |
| 49 for (var i = 0; i < fileSystems.length; ++i) |
| 50 this._addItem(fileSystems[i]); |
| 51 } |
| 52 |
| 53 /** |
| 54 * @return {!Element} |
| 55 */ |
| 56 _createFolderExcludePatternInput() { |
| 57 var p = createElement('p'); |
| 58 var labelElement = p.createChild('label'); |
| 59 labelElement.textContent = Common.UIString('Folder exclude pattern'); |
| 60 var inputElement = p.createChild('input'); |
| 61 inputElement.type = 'text'; |
| 62 inputElement.style.width = '270px'; |
| 63 var folderExcludeSetting = Workspace.isolatedFileSystemManager.workspaceFold
erExcludePatternSetting(); |
| 64 var setValue = |
| 65 UI.bindInput(inputElement, folderExcludeSetting.set.bind(folderExcludeSe
tting), regexValidator, false); |
| 66 folderExcludeSetting.addChangeListener(() => setValue.call(null, folderExclu
deSetting.get())); |
| 67 setValue(folderExcludeSetting.get()); |
| 68 return p; |
| 69 |
| 70 /** |
| 71 * @param {string} value |
| 72 * @return {boolean} |
| 73 */ |
| 74 function regexValidator(value) { |
| 75 var regex; |
| 76 try { |
| 77 regex = new RegExp(value); |
| 78 } catch (e) { |
| 79 } |
| 80 return !!regex; |
| 81 } |
| 82 } |
| 83 |
| 84 /** |
| 85 * @param {!Workspace.IsolatedFileSystem} fileSystem |
| 86 */ |
| 87 _addItem(fileSystem) { |
| 88 var element = this._renderFileSystem(fileSystem); |
| 89 this._elementByPath.set(fileSystem.path(), element); |
| 90 |
| 91 this._fileSystemsListContainer.appendChild(element); |
| 92 |
| 93 var mappingView = new Persistence.EditFileSystemView(fileSystem.path()); |
| 94 this._mappingViewByPath.set(fileSystem.path(), mappingView); |
| 95 mappingView.element.classList.add('file-system-mapping-view'); |
| 96 mappingView.show(element); |
| 97 } |
| 98 |
| 99 /** |
| 100 * @param {!Workspace.IsolatedFileSystem} fileSystem |
| 101 * @return {!Element} |
| 102 */ |
| 103 _renderFileSystem(fileSystem) { |
| 104 var fileSystemPath = fileSystem.path(); |
| 105 var lastIndexOfSlash = fileSystemPath.lastIndexOf(Host.isWin() ? '\\' : '/')
; |
| 106 var folderName = fileSystemPath.substr(lastIndexOfSlash + 1); |
| 107 |
| 108 var element = createElementWithClass('div', 'file-system-container'); |
| 109 var header = element.createChild('div', 'file-system-header'); |
| 110 |
| 111 header.createChild('div', 'file-system-name').textContent = folderName; |
| 112 var path = header.createChild('div', 'file-system-path'); |
| 113 path.textContent = fileSystemPath; |
| 114 path.title = fileSystemPath; |
| 115 |
| 116 var toolbar = new UI.Toolbar(''); |
| 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)); |
| 119 toolbar.appendToolbarItem(button); |
| 120 header.appendChild(toolbar.element); |
| 121 |
| 122 return element; |
| 123 } |
| 124 |
| 125 /** |
| 126 * @param {!Workspace.IsolatedFileSystem} fileSystem |
| 127 */ |
| 128 _removeFileSystemClicked(fileSystem) { |
| 129 Workspace.isolatedFileSystemManager.removeFileSystem(fileSystem); |
| 130 } |
| 131 |
| 132 _addFileSystemClicked() { |
| 133 Workspace.isolatedFileSystemManager.addFileSystem(); |
| 134 } |
| 135 |
| 136 _fileSystemAdded(event) { |
| 137 var fileSystem = /** @type {!Workspace.IsolatedFileSystem} */ (event.data); |
| 138 this._addItem(fileSystem); |
| 139 } |
| 140 |
| 141 _fileSystemRemoved(event) { |
| 142 var fileSystem = /** @type {!Workspace.IsolatedFileSystem} */ (event.data); |
| 143 |
| 144 var mappingView = this._mappingViewByPath.get(fileSystem.path()); |
| 145 if (mappingView) { |
| 146 mappingView.dispose(); |
| 147 this._mappingViewByPath.delete(fileSystem.path()); |
| 148 } |
| 149 |
| 150 var element = this._elementByPath.get(fileSystem.path()); |
| 151 if (element) { |
| 152 this._elementByPath.delete(fileSystem.path()); |
| 153 element.remove(); |
| 154 } |
| 155 } |
| 156 }; |
| OLD | NEW |