Commit e4c4ef93 authored by dgozman's avatar dgozman Committed by Commit bot

[DevTools] Prepare navigator to multiple nodes per UISourceCode.

BUG=670180

Review-Url: https://codereview.chromium.org/2570503003
Cr-Commit-Position: refs/heads/master@{#438060}
parent 714899d3
...@@ -40,7 +40,7 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -40,7 +40,7 @@ Sources.NavigatorView = class extends UI.VBox {
this.element.appendChild(this._scriptsTree.element); this.element.appendChild(this._scriptsTree.element);
this.setDefaultFocusedElement(this._scriptsTree.element); this.setDefaultFocusedElement(this._scriptsTree.element);
/** @type {!Map.<!Workspace.UISourceCode, !Sources.NavigatorUISourceCodeTreeNode>} */ /** @type {!Map.<!Workspace.UISourceCode, !Array<!Sources.NavigatorUISourceCodeTreeNode>>} */
this._uiSourceCodeNodes = new Map(); this._uiSourceCodeNodes = new Map();
/** @type {!Map.<string, !Sources.NavigatorFolderTreeNode>} */ /** @type {!Map.<string, !Sources.NavigatorFolderTreeNode>} */
this._subfolderNodes = new Map(); this._subfolderNodes = new Map();
...@@ -188,11 +188,11 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -188,11 +188,11 @@ Sources.NavigatorView = class extends UI.VBox {
var binding = /** @type {!Persistence.PersistenceBinding} */ (event.data); var binding = /** @type {!Persistence.PersistenceBinding} */ (event.data);
// Update UISourceCode titles. // Update UISourceCode titles.
var networkNode = this._uiSourceCodeNodes.get(binding.network); var networkNodes = this._uiSourceCodeNodes.get(binding.network) || [];
if (networkNode) for (var networkNode of networkNodes)
networkNode.updateTitle(); networkNode.updateTitle();
var fileSystemNode = this._uiSourceCodeNodes.get(binding.fileSystem); var fileSystemNodes = this._uiSourceCodeNodes.get(binding.fileSystem) || [];
if (fileSystemNode) for (var fileSystemNode of fileSystemNodes)
fileSystemNode.updateTitle(); fileSystemNode.updateTitle();
// Update folder titles. // Update folder titles.
...@@ -231,6 +231,14 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -231,6 +231,14 @@ Sources.NavigatorView = class extends UI.VBox {
this._workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved, this._projectRemoved.bind(this), this); this._workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved, this._projectRemoved.bind(this), this);
} }
/**
* @return {!Workspace.Workspace}
* @protected
*/
workspace() {
return this._workspace;
}
/** /**
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Workspace.UISourceCode} uiSourceCode
* @return {boolean} * @return {boolean}
...@@ -278,7 +286,7 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -278,7 +286,7 @@ Sources.NavigatorView = class extends UI.VBox {
var folderNode = var folderNode =
this._folderNode(uiSourceCode, project, target, frame, uiSourceCode.origin(), path, isFromSourceMap); this._folderNode(uiSourceCode, project, target, frame, uiSourceCode.origin(), path, isFromSourceMap);
var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiSourceCode); var uiSourceCodeNode = new Sources.NavigatorUISourceCodeTreeNode(this, uiSourceCode);
this._uiSourceCodeNodes.set(uiSourceCode, uiSourceCodeNode); this._uiSourceCodeNodes.set(uiSourceCode, [uiSourceCodeNode]);
folderNode.appendChild(uiSourceCodeNode); folderNode.appendChild(uiSourceCodeNode);
this.uiSourceCodeAdded(uiSourceCode); this.uiSourceCodeAdded(uiSourceCode);
} }
...@@ -289,13 +297,6 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -289,13 +297,6 @@ Sources.NavigatorView = class extends UI.VBox {
uiSourceCodeAdded(uiSourceCode) { uiSourceCodeAdded(uiSourceCode) {
} }
/**
* @return {!Array<!Sources.NavigatorUISourceCodeTreeNode>}
*/
uiSourceCodeNodes() {
return this._uiSourceCodeNodes.valuesArray();
}
/** /**
* @param {!Common.Event} event * @param {!Common.Event} event
*/ */
...@@ -496,15 +497,18 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -496,15 +497,18 @@ Sources.NavigatorView = class extends UI.VBox {
/** /**
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Workspace.UISourceCode} uiSourceCode
* @param {boolean=} select * @param {boolean=} select
* @return {?Sources.NavigatorUISourceCodeTreeNode}
*/ */
revealUISourceCode(uiSourceCode, select) { revealUISourceCode(uiSourceCode, select) {
var node = this._uiSourceCodeNodes.get(uiSourceCode); var nodes = this._uiSourceCodeNodes.get(uiSourceCode);
if (!node) if (!nodes)
return; return null;
if (this._scriptsTree.selectedTreeElement) if (this._scriptsTree.selectedTreeElement)
this._scriptsTree.selectedTreeElement.deselect(); this._scriptsTree.selectedTreeElement.deselect();
this._lastSelectedUISourceCode = uiSourceCode; this._lastSelectedUISourceCode = uiSourceCode;
node.reveal(select); // TODO(dgozman): figure out revealing multiple.
nodes[0].reveal(select);
return nodes[0];
} }
/** /**
...@@ -526,39 +530,42 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -526,39 +530,42 @@ Sources.NavigatorView = class extends UI.VBox {
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Workspace.UISourceCode} uiSourceCode
*/ */
_removeUISourceCode(uiSourceCode) { _removeUISourceCode(uiSourceCode) {
var node = this._uiSourceCodeNodes.get(uiSourceCode); var nodes = this._uiSourceCodeNodes.get(uiSourceCode) || [];
if (!node) for (var i = 0; i < nodes.length; i++) {
return; var node = nodes[i];
var project = uiSourceCode.project(); var project = uiSourceCode.project();
var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode); var target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
var frame = this._uiSourceCodeFrame(uiSourceCode); var frame = this._uiSourceCodeFrame(uiSourceCode);
var parentNode = node.parent; var parentNode = node.parent;
this._uiSourceCodeNodes.delete(uiSourceCode);
parentNode.removeChild(node);
node = parentNode;
while (node) {
parentNode = node.parent;
if (!parentNode || !node.isEmpty())
break;
if (!(node instanceof Sources.NavigatorGroupTreeNode || node instanceof Sources.NavigatorFolderTreeNode))
break;
if (node._type === Sources.NavigatorView.Types.Frame)
break;
var folderId = this._folderNodeId(project, target, frame, uiSourceCode.origin(), node._folderPath);
this._subfolderNodes.delete(folderId);
parentNode.removeChild(node); parentNode.removeChild(node);
node = parentNode; node = parentNode;
while (node) {
parentNode = node.parent;
if (!parentNode || !node.isEmpty())
break;
if (!(node instanceof Sources.NavigatorGroupTreeNode || node instanceof Sources.NavigatorFolderTreeNode))
break;
if (node._type === Sources.NavigatorView.Types.Frame)
break;
var folderId = this._folderNodeId(project, target, frame, uiSourceCode.origin(), node._folderPath);
this._subfolderNodes.delete(folderId);
parentNode.removeChild(node);
node = parentNode;
}
} }
this._uiSourceCodeNodes.delete(uiSourceCode);
} }
reset() { reset() {
var nodes = this._uiSourceCodeNodes.valuesArray(); for (var entry of this._uiSourceCodeNodes) {
for (var i = 0; i < nodes.length; ++i) var nodes = /** @type {!Array<!Sources.NavigatorUISourceCodeTreeNode>} */ (entry[1]);
nodes[i].dispose(); for (var i = 0; i < nodes.length; i++)
nodes[i].dispose();
}
this._scriptsTree.removeChildren(); this._scriptsTree.removeChildren();
this._uiSourceCodeNodes.clear(); this._uiSourceCodeNodes.clear();
...@@ -583,10 +590,10 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -583,10 +590,10 @@ Sources.NavigatorView = class extends UI.VBox {
} }
/** /**
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Sources.NavigatorUISourceCodeTreeNode} node
*/ */
_handleContextMenuRename(uiSourceCode) { _handleContextMenuRename(node) {
this.rename(uiSourceCode, false); this.rename(node, false);
} }
/** /**
...@@ -613,9 +620,10 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -613,9 +620,10 @@ Sources.NavigatorView = class extends UI.VBox {
/** /**
* @param {!Event} event * @param {!Event} event
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Sources.NavigatorUISourceCodeTreeNode} node
*/ */
handleFileContextMenu(event, uiSourceCode) { handleFileContextMenu(event, node) {
var uiSourceCode = node.uiSourceCode();
var contextMenu = new UI.ContextMenu(event); var contextMenu = new UI.ContextMenu(event);
contextMenu.appendApplicableItems(uiSourceCode); contextMenu.appendApplicableItems(uiSourceCode);
contextMenu.appendSeparator(); contextMenu.appendSeparator();
...@@ -623,7 +631,7 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -623,7 +631,7 @@ Sources.NavigatorView = class extends UI.VBox {
var project = uiSourceCode.project(); var project = uiSourceCode.project();
if (project.type() === Workspace.projectTypes.FileSystem) { if (project.type() === Workspace.projectTypes.FileSystem) {
var parentURL = uiSourceCode.parentURL(); var parentURL = uiSourceCode.parentURL();
contextMenu.appendItem(Common.UIString('Rename\u2026'), this._handleContextMenuRename.bind(this, uiSourceCode)); contextMenu.appendItem(Common.UIString('Rename\u2026'), this._handleContextMenuRename.bind(this, node));
contextMenu.appendItem( contextMenu.appendItem(
Common.UIString('Make a copy\u2026'), Common.UIString('Make a copy\u2026'),
this._handleContextMenuCreate.bind(this, project, parentURL, uiSourceCode)); this._handleContextMenuCreate.bind(this, project, parentURL, uiSourceCode));
...@@ -668,12 +676,12 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -668,12 +676,12 @@ Sources.NavigatorView = class extends UI.VBox {
} }
/** /**
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Sources.NavigatorUISourceCodeTreeNode} node
* @param {boolean} deleteIfCanceled * @param {boolean} deleteIfCanceled
* @protected
*/ */
rename(uiSourceCode, deleteIfCanceled) { rename(node, deleteIfCanceled) {
var node = this._uiSourceCodeNodes.get(uiSourceCode); var uiSourceCode = node.uiSourceCode();
console.assert(node);
node.rename(callback.bind(this)); node.rename(callback.bind(this));
/** /**
...@@ -729,8 +737,9 @@ Sources.NavigatorView = class extends UI.VBox { ...@@ -729,8 +737,9 @@ Sources.NavigatorView = class extends UI.VBox {
if (!uiSourceCode) if (!uiSourceCode)
return; return;
this._sourceSelected(uiSourceCode, false); this._sourceSelected(uiSourceCode, false);
this.revealUISourceCode(uiSourceCode, true); var node = this.revealUISourceCode(uiSourceCode, true);
this.rename(uiSourceCode, true); if (node)
this.rename(node, true);
} }
} }
...@@ -922,10 +931,12 @@ Sources.NavigatorSourceTreeElement = class extends TreeElement { ...@@ -922,10 +931,12 @@ Sources.NavigatorSourceTreeElement = class extends TreeElement {
* @param {!Sources.NavigatorView} navigatorView * @param {!Sources.NavigatorView} navigatorView
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Workspace.UISourceCode} uiSourceCode
* @param {string} title * @param {string} title
* @param {!Sources.NavigatorUISourceCodeTreeNode} node
*/ */
constructor(navigatorView, uiSourceCode, title) { constructor(navigatorView, uiSourceCode, title, node) {
super('', false); super('', false);
this._nodeType = Sources.NavigatorView.Types.File; this._nodeType = Sources.NavigatorView.Types.File;
this._node = node;
this.title = title; this.title = title;
this.listItemElement.classList.add( this.listItemElement.classList.add(
'navigator-' + uiSourceCode.contentType().name() + '-tree-item', 'navigator-file-tree-item'); 'navigator-' + uiSourceCode.contentType().name() + '-tree-item', 'navigator-file-tree-item');
...@@ -975,7 +986,7 @@ Sources.NavigatorSourceTreeElement = class extends TreeElement { ...@@ -975,7 +986,7 @@ Sources.NavigatorSourceTreeElement = class extends TreeElement {
*/ */
function rename() { function rename() {
if (this._shouldRenameOnMouseDown()) if (this._shouldRenameOnMouseDown())
this._navigatorView.rename(this.uiSourceCode, false); this._navigatorView.rename(this._node, false);
} }
} }
...@@ -1036,7 +1047,7 @@ Sources.NavigatorSourceTreeElement = class extends TreeElement { ...@@ -1036,7 +1047,7 @@ Sources.NavigatorSourceTreeElement = class extends TreeElement {
*/ */
_handleContextMenuEvent(event) { _handleContextMenuEvent(event) {
this.select(); this.select();
this._navigatorView.handleFileContextMenu(event, this._uiSourceCode); this._navigatorView.handleFileContextMenu(event, this._node);
} }
}; };
...@@ -1233,7 +1244,7 @@ Sources.NavigatorUISourceCodeTreeNode = class extends Sources.NavigatorTreeNode ...@@ -1233,7 +1244,7 @@ Sources.NavigatorUISourceCodeTreeNode = class extends Sources.NavigatorTreeNode
if (this._treeElement) if (this._treeElement)
return this._treeElement; return this._treeElement;
this._treeElement = new Sources.NavigatorSourceTreeElement(this._navigatorView, this._uiSourceCode, ''); this._treeElement = new Sources.NavigatorSourceTreeElement(this._navigatorView, this._uiSourceCode, '', this);
this.updateTitle(); this.updateTitle();
var updateTitleBound = this.updateTitle.bind(this, undefined); var updateTitleBound = this.updateTitle.bind(this, undefined);
......
...@@ -57,9 +57,8 @@ Sources.SourcesNavigatorView = class extends Sources.NavigatorView { ...@@ -57,9 +57,8 @@ Sources.SourcesNavigatorView = class extends Sources.NavigatorView {
var inspectedURL = mainTarget && mainTarget.inspectedURL(); var inspectedURL = mainTarget && mainTarget.inspectedURL();
if (!inspectedURL) if (!inspectedURL)
return; return;
for (var node of this.uiSourceCodeNodes()) { for (var uiSourceCode of this.workspace().uiSourceCodes()) {
var uiSourceCode = node.uiSourceCode(); if (this.accept(uiSourceCode) && uiSourceCode.url() === inspectedURL)
if (uiSourceCode.url() === inspectedURL)
this.revealUISourceCode(uiSourceCode, true); this.revealUISourceCode(uiSourceCode, true);
} }
} }
...@@ -116,9 +115,8 @@ Sources.NetworkNavigatorView = class extends Sources.NavigatorView { ...@@ -116,9 +115,8 @@ Sources.NetworkNavigatorView = class extends Sources.NavigatorView {
var inspectedURL = mainTarget && mainTarget.inspectedURL(); var inspectedURL = mainTarget && mainTarget.inspectedURL();
if (!inspectedURL) if (!inspectedURL)
return; return;
for (var node of this.uiSourceCodeNodes()) { for (var uiSourceCode of this.workspace().uiSourceCodes()) {
var uiSourceCode = node.uiSourceCode(); if (this.accept(uiSourceCode) && uiSourceCode.url() === inspectedURL)
if (uiSourceCode.url() === inspectedURL)
this.revealUISourceCode(uiSourceCode, true); this.revealUISourceCode(uiSourceCode, true);
} }
} }
...@@ -225,12 +223,13 @@ Sources.SnippetsNavigatorView = class extends Sources.NavigatorView { ...@@ -225,12 +223,13 @@ Sources.SnippetsNavigatorView = class extends Sources.NavigatorView {
/** /**
* @override * @override
* @param {!Event} event * @param {!Event} event
* @param {!Workspace.UISourceCode} uiSourceCode * @param {!Sources.NavigatorUISourceCodeTreeNode} node
*/ */
handleFileContextMenu(event, uiSourceCode) { handleFileContextMenu(event, node) {
var uiSourceCode = node.uiSourceCode();
var contextMenu = new UI.ContextMenu(event); var contextMenu = new UI.ContextMenu(event);
contextMenu.appendItem(Common.UIString('Run'), this._handleEvaluateSnippet.bind(this, uiSourceCode)); contextMenu.appendItem(Common.UIString('Run'), this._handleEvaluateSnippet.bind(this, uiSourceCode));
contextMenu.appendItem(Common.UIString('Rename'), this.rename.bind(this, uiSourceCode)); contextMenu.appendItem(Common.UIString('Rename'), this.rename.bind(this, node));
contextMenu.appendItem(Common.UIString('Remove'), this._handleRemoveSnippet.bind(this, uiSourceCode)); contextMenu.appendItem(Common.UIString('Remove'), this._handleRemoveSnippet.bind(this, uiSourceCode));
contextMenu.appendSeparator(); contextMenu.appendSeparator();
contextMenu.appendItem(Common.UIString('New'), this._handleCreateSnippet.bind(this)); contextMenu.appendItem(Common.UIString('New'), this._handleCreateSnippet.bind(this));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment