Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(577)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/persistence/WorkspaceSettingsTab.js

Issue 2868543002: DevTools: move FileSystemMapping under persistence/ module (Closed)
Patch Set: fix copyright Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698