| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 /** | 30 /** |
| 31 * @implements {UI.ListWidget.Delegate} | 31 * @implements {UI.ListWidget.Delegate} |
| 32 * @unrestricted | 32 * @unrestricted |
| 33 */ | 33 */ |
| 34 Settings.EditFileSystemView = class extends UI.VBox { | 34 Persistence.EditFileSystemView = class extends UI.VBox { |
| 35 /** | 35 /** |
| 36 * @param {string} fileSystemPath | 36 * @param {string} fileSystemPath |
| 37 */ | 37 */ |
| 38 constructor(fileSystemPath) { | 38 constructor(fileSystemPath) { |
| 39 super(true); | 39 super(true); |
| 40 this.registerRequiredCSS('settings/editFileSystemView.css'); | 40 this.registerRequiredCSS('persistence/editFileSystemView.css'); |
| 41 this._fileSystemPath = fileSystemPath; | 41 this._fileSystemPath = fileSystemPath; |
| 42 | 42 |
| 43 this._eventListeners = [ | 43 this._eventListeners = [ |
| 44 Workspace.fileSystemMapping.addEventListener( | 44 Persistence.fileSystemMapping.addEventListener( |
| 45 Workspace.FileSystemMapping.Events.FileMappingAdded, this._update, thi
s), | 45 Persistence.FileSystemMapping.Events.FileMappingAdded, this._update, t
his), |
| 46 Workspace.fileSystemMapping.addEventListener( | 46 Persistence.fileSystemMapping.addEventListener( |
| 47 Workspace.FileSystemMapping.Events.FileMappingRemoved, this._update, t
his), | 47 Persistence.FileSystemMapping.Events.FileMappingRemoved, this._update,
this), |
| 48 Workspace.isolatedFileSystemManager.addEventListener( | 48 Workspace.isolatedFileSystemManager.addEventListener( |
| 49 Workspace.IsolatedFileSystemManager.Events.ExcludedFolderAdded, this._
update, this), | 49 Workspace.IsolatedFileSystemManager.Events.ExcludedFolderAdded, this._
update, this), |
| 50 Workspace.isolatedFileSystemManager.addEventListener( | 50 Workspace.isolatedFileSystemManager.addEventListener( |
| 51 Workspace.IsolatedFileSystemManager.Events.ExcludedFolderRemoved, this
._update, this) | 51 Workspace.IsolatedFileSystemManager.Events.ExcludedFolderRemoved, this
._update, this) |
| 52 ]; | 52 ]; |
| 53 | 53 |
| 54 | 54 |
| 55 if (!Runtime.experiments.isEnabled('persistence2')) { | 55 if (!Runtime.experiments.isEnabled('persistence2')) { |
| 56 this._mappingsList = new UI.ListWidget(this); | 56 this._mappingsList = new UI.ListWidget(this); |
| 57 this._mappingsList.element.classList.add('file-system-list'); | 57 this._mappingsList.element.classList.add('file-system-list'); |
| 58 this._mappingsList.registerRequiredCSS('settings/editFileSystemView.css'); | 58 this._mappingsList.registerRequiredCSS('persistence/editFileSystemView.css
'); |
| 59 var mappingsPlaceholder = createElementWithClass('div', 'file-system-list-
empty'); | 59 var mappingsPlaceholder = createElementWithClass('div', 'file-system-list-
empty'); |
| 60 var mappingsHeader = this.contentElement.createChild('div', 'file-system-h
eader'); | 60 var mappingsHeader = this.contentElement.createChild('div', 'file-system-h
eader'); |
| 61 mappingsHeader.createChild('div', 'file-system-header-text').textContent =
Common.UIString('Mappings'); | 61 mappingsHeader.createChild('div', 'file-system-header-text').textContent =
Common.UIString('Mappings'); |
| 62 mappingsPlaceholder.textContent = Common.UIString('None'); | 62 mappingsPlaceholder.textContent = Common.UIString('None'); |
| 63 mappingsHeader.appendChild( | 63 mappingsHeader.appendChild( |
| 64 UI.createTextButton(Common.UIString('Add'), this._addMappingButtonClic
ked.bind(this), 'add-button')); | 64 UI.createTextButton(Common.UIString('Add'), this._addMappingButtonClic
ked.bind(this), 'add-button')); |
| 65 this._mappingsList.setEmptyPlaceholder(mappingsPlaceholder); | 65 this._mappingsList.setEmptyPlaceholder(mappingsPlaceholder); |
| 66 this._mappingsList.show(this.contentElement); | 66 this._mappingsList.show(this.contentElement); |
| 67 } | 67 } |
| 68 | 68 |
| 69 var excludedFoldersHeader = this.contentElement.createChild('div', 'file-sys
tem-header'); | 69 var excludedFoldersHeader = this.contentElement.createChild('div', 'file-sys
tem-header'); |
| 70 excludedFoldersHeader.createChild('div', 'file-system-header-text').textCont
ent = | 70 excludedFoldersHeader.createChild('div', 'file-system-header-text').textCont
ent = |
| 71 Common.UIString('Excluded folders'); | 71 Common.UIString('Excluded folders'); |
| 72 excludedFoldersHeader.appendChild( | 72 excludedFoldersHeader.appendChild( |
| 73 UI.createTextButton(Common.UIString('Add'), this._addExcludedFolderButto
nClicked.bind(this), 'add-button')); | 73 UI.createTextButton(Common.UIString('Add'), this._addExcludedFolderButto
nClicked.bind(this), 'add-button')); |
| 74 this._excludedFoldersList = new UI.ListWidget(this); | 74 this._excludedFoldersList = new UI.ListWidget(this); |
| 75 this._excludedFoldersList.element.classList.add('file-system-list'); | 75 this._excludedFoldersList.element.classList.add('file-system-list'); |
| 76 this._excludedFoldersList.registerRequiredCSS('settings/editFileSystemView.c
ss'); | 76 this._excludedFoldersList.registerRequiredCSS('persistence/editFileSystemVie
w.css'); |
| 77 var excludedFoldersPlaceholder = createElementWithClass('div', 'file-system-
list-empty'); | 77 var excludedFoldersPlaceholder = createElementWithClass('div', 'file-system-
list-empty'); |
| 78 excludedFoldersPlaceholder.textContent = Common.UIString('None'); | 78 excludedFoldersPlaceholder.textContent = Common.UIString('None'); |
| 79 this._excludedFoldersList.setEmptyPlaceholder(excludedFoldersPlaceholder); | 79 this._excludedFoldersList.setEmptyPlaceholder(excludedFoldersPlaceholder); |
| 80 this._excludedFoldersList.show(this.contentElement); | 80 this._excludedFoldersList.show(this.contentElement); |
| 81 | 81 |
| 82 this.contentElement.tabIndex = 0; | 82 this.contentElement.tabIndex = 0; |
| 83 this._update(); | 83 this._update(); |
| 84 } | 84 } |
| 85 | 85 |
| 86 dispose() { | 86 dispose() { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 99 .excludedFolders() | 99 .excludedFolders() |
| 100 .values()) { | 100 .values()) { |
| 101 this._excludedFolders.push(folder); | 101 this._excludedFolders.push(folder); |
| 102 this._excludedFoldersList.appendItem(folder, true); | 102 this._excludedFoldersList.appendItem(folder, true); |
| 103 } | 103 } |
| 104 | 104 |
| 105 if (Runtime.experiments.isEnabled('persistence2')) | 105 if (Runtime.experiments.isEnabled('persistence2')) |
| 106 return; | 106 return; |
| 107 | 107 |
| 108 this._mappingsList.clear(); | 108 this._mappingsList.clear(); |
| 109 var mappings = Workspace.fileSystemMapping.mappingEntries(this._fileSystemPa
th); | 109 var mappings = Persistence.fileSystemMapping.mappingEntries(this._fileSystem
Path); |
| 110 for (var entry of mappings) { | 110 for (var entry of mappings) { |
| 111 this._mappingsList.appendItem(entry, true); | 111 this._mappingsList.appendItem(entry, true); |
| 112 this._mappings.push(entry); | 112 this._mappings.push(entry); |
| 113 } | 113 } |
| 114 } | 114 } |
| 115 | 115 |
| 116 _addMappingButtonClicked() { | 116 _addMappingButtonClicked() { |
| 117 var entry = new Workspace.FileSystemMapping.Entry(this._fileSystemPath, '',
''); | 117 var entry = new Persistence.FileSystemMapping.Entry(this._fileSystemPath, ''
, ''); |
| 118 this._mappingsList.addNewItem(0, entry); | 118 this._mappingsList.addNewItem(0, entry); |
| 119 } | 119 } |
| 120 | 120 |
| 121 _addExcludedFolderButtonClicked() { | 121 _addExcludedFolderButtonClicked() { |
| 122 this._excludedFoldersList.addNewItem(0, ''); | 122 this._excludedFoldersList.addNewItem(0, ''); |
| 123 } | 123 } |
| 124 | 124 |
| 125 /** | 125 /** |
| 126 * @override | 126 * @override |
| 127 * @param {*} item | 127 * @param {*} item |
| 128 * @param {boolean} editable | 128 * @param {boolean} editable |
| 129 * @return {!Element} | 129 * @return {!Element} |
| 130 */ | 130 */ |
| 131 renderItem(item, editable) { | 131 renderItem(item, editable) { |
| 132 var element = createElementWithClass('div', 'file-system-list-item'); | 132 var element = createElementWithClass('div', 'file-system-list-item'); |
| 133 if (item instanceof Workspace.FileSystemMapping.Entry) { | 133 if (item instanceof Persistence.FileSystemMapping.Entry) { |
| 134 var entry = /** @type {!Workspace.FileSystemMapping.Entry} */ (item); | 134 var entry = /** @type {!Persistence.FileSystemMapping.Entry} */ (item); |
| 135 var urlPrefixElement = element.createChild('div', 'file-system-value'); | 135 var urlPrefixElement = element.createChild('div', 'file-system-value'); |
| 136 urlPrefixElement.textContent = entry.urlPrefix; | 136 urlPrefixElement.textContent = entry.urlPrefix; |
| 137 urlPrefixElement.title = entry.urlPrefix; | 137 urlPrefixElement.title = entry.urlPrefix; |
| 138 element.createChild('div', 'file-system-separator'); | 138 element.createChild('div', 'file-system-separator'); |
| 139 var pathPrefixElement = element.createChild('div', 'file-system-value'); | 139 var pathPrefixElement = element.createChild('div', 'file-system-value'); |
| 140 pathPrefixElement.textContent = entry.pathPrefix; | 140 pathPrefixElement.textContent = entry.pathPrefix; |
| 141 pathPrefixElement.title = entry.pathPrefix; | 141 pathPrefixElement.title = entry.pathPrefix; |
| 142 } else { | 142 } else { |
| 143 var pathPrefix = /** @type {string} */ (editable ? item : Common.UIString(
'%s (via .devtools)', item)); | 143 var pathPrefix = /** @type {string} */ (editable ? item : Common.UIString(
'%s (via .devtools)', item)); |
| 144 var pathPrefixElement = element.createChild('div', 'file-system-value'); | 144 var pathPrefixElement = element.createChild('div', 'file-system-value'); |
| 145 pathPrefixElement.textContent = pathPrefix; | 145 pathPrefixElement.textContent = pathPrefix; |
| 146 pathPrefixElement.title = pathPrefix; | 146 pathPrefixElement.title = pathPrefix; |
| 147 } | 147 } |
| 148 return element; | 148 return element; |
| 149 } | 149 } |
| 150 | 150 |
| 151 /** | 151 /** |
| 152 * @override | 152 * @override |
| 153 * @param {*} item | 153 * @param {*} item |
| 154 * @param {number} index | 154 * @param {number} index |
| 155 */ | 155 */ |
| 156 removeItemRequested(item, index) { | 156 removeItemRequested(item, index) { |
| 157 if (item instanceof Workspace.FileSystemMapping.Entry) { | 157 if (item instanceof Persistence.FileSystemMapping.Entry) { |
| 158 var entry = this._mappings[index]; | 158 var entry = this._mappings[index]; |
| 159 Workspace.fileSystemMapping.removeFileMapping(entry.fileSystemPath, entry.
urlPrefix, entry.pathPrefix); | 159 Persistence.fileSystemMapping.removeFileMapping(entry.fileSystemPath, entr
y.urlPrefix, entry.pathPrefix); |
| 160 } else { | 160 } else { |
| 161 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath) | 161 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath) |
| 162 .removeExcludedFolder(this._excludedFolders[index]); | 162 .removeExcludedFolder(this._excludedFolders[index]); |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 /** | 166 /** |
| 167 * @override | 167 * @override |
| 168 * @param {*} item | 168 * @param {*} item |
| 169 * @param {!UI.ListWidget.Editor} editor | 169 * @param {!UI.ListWidget.Editor} editor |
| 170 * @param {boolean} isNew | 170 * @param {boolean} isNew |
| 171 */ | 171 */ |
| 172 commitEdit(item, editor, isNew) { | 172 commitEdit(item, editor, isNew) { |
| 173 this._muteUpdate = true; | 173 this._muteUpdate = true; |
| 174 if (item instanceof Workspace.FileSystemMapping.Entry) { | 174 if (item instanceof Persistence.FileSystemMapping.Entry) { |
| 175 var entry = /** @type {!Workspace.FileSystemMapping.Entry} */ (item); | 175 var entry = /** @type {!Persistence.FileSystemMapping.Entry} */ (item); |
| 176 if (!isNew) | 176 if (!isNew) |
| 177 Workspace.fileSystemMapping.removeFileMapping(this._fileSystemPath, entr
y.urlPrefix, entry.pathPrefix); | 177 Persistence.fileSystemMapping.removeFileMapping(this._fileSystemPath, en
try.urlPrefix, entry.pathPrefix); |
| 178 Workspace.fileSystemMapping.addFileMapping( | 178 Persistence.fileSystemMapping.addFileMapping( |
| 179 this._fileSystemPath, this._normalizePrefix(editor.control('urlPrefix'
).value), | 179 this._fileSystemPath, this._normalizePrefix(editor.control('urlPrefix'
).value), |
| 180 this._normalizePrefix(editor.control('pathPrefix').value)); | 180 this._normalizePrefix(editor.control('pathPrefix').value)); |
| 181 } else { | 181 } else { |
| 182 if (!isNew) { | 182 if (!isNew) { |
| 183 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath) | 183 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath) |
| 184 .removeExcludedFolder(/** @type {string} */ (item)); | 184 .removeExcludedFolder(/** @type {string} */ (item)); |
| 185 } | 185 } |
| 186 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath) | 186 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath) |
| 187 .addExcludedFolder(this._normalizePrefix(editor.control('pathPrefix').
value)); | 187 .addExcludedFolder(this._normalizePrefix(editor.control('pathPrefix').
value)); |
| 188 } | 188 } |
| 189 this._muteUpdate = false; | 189 this._muteUpdate = false; |
| 190 this._update(); | 190 this._update(); |
| 191 } | 191 } |
| 192 | 192 |
| 193 /** | 193 /** |
| 194 * @override | 194 * @override |
| 195 * @param {*} item | 195 * @param {*} item |
| 196 * @return {!UI.ListWidget.Editor} | 196 * @return {!UI.ListWidget.Editor} |
| 197 */ | 197 */ |
| 198 beginEdit(item) { | 198 beginEdit(item) { |
| 199 if (item instanceof Workspace.FileSystemMapping.Entry) { | 199 if (item instanceof Persistence.FileSystemMapping.Entry) { |
| 200 var entry = /** @type {!Workspace.FileSystemMapping.Entry} */ (item); | 200 var entry = /** @type {!Persistence.FileSystemMapping.Entry} */ (item); |
| 201 var editor = this._createMappingEditor(); | 201 var editor = this._createMappingEditor(); |
| 202 editor.control('urlPrefix').value = entry.urlPrefix; | 202 editor.control('urlPrefix').value = entry.urlPrefix; |
| 203 editor.control('pathPrefix').value = entry.pathPrefix; | 203 editor.control('pathPrefix').value = entry.pathPrefix; |
| 204 return editor; | 204 return editor; |
| 205 } else { | 205 } else { |
| 206 var editor = this._createExcludedFolderEditor(); | 206 var editor = this._createExcludedFolderEditor(); |
| 207 editor.control('pathPrefix').value = item; | 207 editor.control('pathPrefix').value = item; |
| 208 return editor; | 208 return editor; |
| 209 } | 209 } |
| 210 } | 210 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 233 fields.createChild('div', 'file-system-value') | 233 fields.createChild('div', 'file-system-value') |
| 234 .appendChild(editor.createInput('pathPrefix', 'text', '/path/to/folder/'
, pathPrefixValidator.bind(this))); | 234 .appendChild(editor.createInput('pathPrefix', 'text', '/path/to/folder/'
, pathPrefixValidator.bind(this))); |
| 235 | 235 |
| 236 return editor; | 236 return editor; |
| 237 | 237 |
| 238 /** | 238 /** |
| 239 * @param {*} item | 239 * @param {*} item |
| 240 * @param {number} index | 240 * @param {number} index |
| 241 * @param {!HTMLInputElement|!HTMLSelectElement} input | 241 * @param {!HTMLInputElement|!HTMLSelectElement} input |
| 242 * @return {boolean} | 242 * @return {boolean} |
| 243 * @this {Settings.EditFileSystemView} | 243 * @this {Persistence.EditFileSystemView} |
| 244 */ | 244 */ |
| 245 function urlPrefixValidator(item, index, input) { | 245 function urlPrefixValidator(item, index, input) { |
| 246 var prefix = this._normalizePrefix(input.value); | 246 var prefix = this._normalizePrefix(input.value); |
| 247 for (var i = 0; i < this._mappings.length; ++i) { | 247 for (var i = 0; i < this._mappings.length; ++i) { |
| 248 if (i !== index && this._mappings[i].urlPrefix === prefix) | 248 if (i !== index && this._mappings[i].urlPrefix === prefix) |
| 249 return false; | 249 return false; |
| 250 } | 250 } |
| 251 return !!prefix; | 251 return !!prefix; |
| 252 } | 252 } |
| 253 | 253 |
| 254 /** | 254 /** |
| 255 * @param {*} item | 255 * @param {*} item |
| 256 * @param {number} index | 256 * @param {number} index |
| 257 * @param {!HTMLInputElement|!HTMLSelectElement} input | 257 * @param {!HTMLInputElement|!HTMLSelectElement} input |
| 258 * @return {boolean} | 258 * @return {boolean} |
| 259 * @this {Settings.EditFileSystemView} | 259 * @this {Persistence.EditFileSystemView} |
| 260 */ | 260 */ |
| 261 function pathPrefixValidator(item, index, input) { | 261 function pathPrefixValidator(item, index, input) { |
| 262 var prefix = this._normalizePrefix(input.value); | 262 var prefix = this._normalizePrefix(input.value); |
| 263 for (var i = 0; i < this._mappings.length; ++i) { | 263 for (var i = 0; i < this._mappings.length; ++i) { |
| 264 if (i !== index && this._mappings[i].pathPrefix === prefix) | 264 if (i !== index && this._mappings[i].pathPrefix === prefix) |
| 265 return false; | 265 return false; |
| 266 } | 266 } |
| 267 return !!prefix; | 267 return !!prefix; |
| 268 } | 268 } |
| 269 } | 269 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 286 fields.createChild('div', 'file-system-value') | 286 fields.createChild('div', 'file-system-value') |
| 287 .appendChild(editor.createInput('pathPrefix', 'text', '/path/to/folder/'
, pathPrefixValidator.bind(this))); | 287 .appendChild(editor.createInput('pathPrefix', 'text', '/path/to/folder/'
, pathPrefixValidator.bind(this))); |
| 288 | 288 |
| 289 return editor; | 289 return editor; |
| 290 | 290 |
| 291 /** | 291 /** |
| 292 * @param {*} item | 292 * @param {*} item |
| 293 * @param {number} index | 293 * @param {number} index |
| 294 * @param {!HTMLInputElement|!HTMLSelectElement} input | 294 * @param {!HTMLInputElement|!HTMLSelectElement} input |
| 295 * @return {boolean} | 295 * @return {boolean} |
| 296 * @this {Settings.EditFileSystemView} | 296 * @this {Persistence.EditFileSystemView} |
| 297 */ | 297 */ |
| 298 function pathPrefixValidator(item, index, input) { | 298 function pathPrefixValidator(item, index, input) { |
| 299 var prefix = this._normalizePrefix(input.value); | 299 var prefix = this._normalizePrefix(input.value); |
| 300 var configurableCount = | 300 var configurableCount = |
| 301 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath).e
xcludedFolders().size; | 301 Workspace.isolatedFileSystemManager.fileSystem(this._fileSystemPath).e
xcludedFolders().size; |
| 302 for (var i = 0; i < configurableCount; ++i) { | 302 for (var i = 0; i < configurableCount; ++i) { |
| 303 if (i !== index && this._excludedFolders[i] === prefix) | 303 if (i !== index && this._excludedFolders[i] === prefix) |
| 304 return false; | 304 return false; |
| 305 } | 305 } |
| 306 return !!prefix; | 306 return !!prefix; |
| 307 } | 307 } |
| 308 } | 308 } |
| 309 | 309 |
| 310 /** | 310 /** |
| 311 * @param {string} prefix | 311 * @param {string} prefix |
| 312 * @return {string} | 312 * @return {string} |
| 313 */ | 313 */ |
| 314 _normalizePrefix(prefix) { | 314 _normalizePrefix(prefix) { |
| 315 if (!prefix) | 315 if (!prefix) |
| 316 return ''; | 316 return ''; |
| 317 return prefix + (prefix[prefix.length - 1] === '/' ? '' : '/'); | 317 return prefix + (prefix[prefix.length - 1] === '/' ? '' : '/'); |
| 318 } | 318 } |
| 319 }; | 319 }; |
| OLD | NEW |