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

Unified Diff: third_party/WebKit/Source/devtools/front_end/changes/ChangesSidebar.js

Issue 2772643002: DevTools: Changes View (Closed)
Patch Set: fix test Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/changes/ChangesSidebar.js
diff --git a/third_party/WebKit/Source/devtools/front_end/changes/ChangesSidebar.js b/third_party/WebKit/Source/devtools/front_end/changes/ChangesSidebar.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a604a0dc75c10feba5e859bbebe800c0581f237
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/changes/ChangesSidebar.js
@@ -0,0 +1,124 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+Changes.ChangesSidebar = class extends UI.Widget {
+ /**
+ * @param {!WorkspaceDiff.WorkspaceDiff} workspaceDiff
+ */
+ constructor(workspaceDiff) {
+ super();
+ this._treeoutline = new UI.TreeOutlineInShadow();
+ this._treeoutline.registerRequiredCSS('changes/changesSidebar.css');
+ this._treeoutline.setComparator((a, b) => a.titleAsText().compareTo(b.titleAsText()));
+ this._treeoutline.addEventListener(UI.TreeOutline.Events.ElementSelected, this._selectionChanged, this);
+
+ this.element.appendChild(this._treeoutline.element);
+
+ /** @type {!Map<!Workspace.UISourceCode, !Changes.ChangesSidebar.UISourceCodeTreeElement>} */
+ this._treeElements = new Map();
+ this._workspaceDiff = workspaceDiff;
+ this._workspaceDiff.modifiedUISourceCodes().forEach(this._addUISourceCode.bind(this));
+ this._workspaceDiff.addEventListener(
+ WorkspaceDiff.Events.ModifiedStatusChanged, this._uiSourceCodeMofiedStatusChanged, this);
+ }
+
+ /**
+ * @return {?Workspace.UISourceCode}
+ */
+ selectedUISourceCode() {
+ return this._treeoutline.selectedTreeElement ? this._treeoutline.selectedTreeElement.uiSourceCode : null;
+ }
+
+ _selectionChanged() {
+ this.dispatchEventToListeners(Changes.ChangesSidebar.Events.SelectedUISourceCodeChanged);
+ }
+
+ /**
+ * @param {!Common.Event} event
+ */
+ _uiSourceCodeMofiedStatusChanged(event) {
+ if (event.data.isModified)
+ this._addUISourceCode(event.data.uiSourceCode);
+ else
+ this._removeUISourceCode(event.data.uiSourceCode);
+ }
+
+ /**
+ * @param {!Workspace.UISourceCode} uiSourceCode
+ */
+ _removeUISourceCode(uiSourceCode) {
+ var treeElement = this._treeElements.get(uiSourceCode);
+ this._treeElements.delete(uiSourceCode);
+ if (this._treeoutline.selectedTreeElement === treeElement) {
+ var nextElementToSelect = treeElement.previousSibling || treeElement.nextSibling;
+ if (nextElementToSelect) {
+ nextElementToSelect.select(true);
+ } else {
+ treeElement.deselect();
+ this._selectionChanged();
+ }
+ }
+ this._treeoutline.removeChild(treeElement);
+ treeElement.dispose();
+ }
+
+ /**
+ * @param {!Workspace.UISourceCode} uiSourceCode
+ */
+ _addUISourceCode(uiSourceCode) {
+ var treeElement = new Changes.ChangesSidebar.UISourceCodeTreeElement(uiSourceCode);
+ this._treeElements.set(uiSourceCode, treeElement);
+ this._treeoutline.appendChild(treeElement);
+ if (!this._treeoutline.selectedTreeElement)
+ treeElement.select(true);
+ }
+};
+
+/**
+ * @enum {symbol}
+ */
+Changes.ChangesSidebar.Events = {
+ SelectedUISourceCodeChanged: Symbol('SelectedUISourceCodeChanged')
+};
+
+Changes.ChangesSidebar.UISourceCodeTreeElement = class extends UI.TreeElement {
+ /**
+ * @param {!Workspace.UISourceCode} uiSourceCode
+ */
+ constructor(uiSourceCode) {
+ super();
+ this.uiSourceCode = uiSourceCode;
+ this.listItemElement.classList.add('navigator-' + uiSourceCode.contentType().name() + '-tree-item');
+
+ var iconType = 'largeicon-navigator-file';
+ if (this.uiSourceCode.contentType() === Common.resourceTypes.Snippet)
+ iconType = 'largeicon-navigator-snippet';
+ var defaultIcon = UI.Icon.create(iconType, 'icon');
+ this.setLeadingIcons([defaultIcon]);
+
+ this._eventListeners = [
+ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged, this._updateTitle, this),
+ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged, this._updateTitle, this),
+ uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted, this._updateTitle, this)
+ ];
+
+ this._updateTitle();
+ }
+
+ _updateTitle() {
+ var titleText = this.uiSourceCode.displayName();
+ if (this.uiSourceCode.isDirty() || Persistence.persistence.hasUnsavedCommittedChanges(this.uiSourceCode))
+ titleText = '*' + titleText;
+ this.title = titleText;
+
+ var tooltip = this.uiSourceCode.url();
+ if (this.uiSourceCode.contentType().isFromSourceMap())
+ tooltip = Common.UIString('%s (from source map)', this.uiSourceCode.displayName());
+ this.tooltip = tooltip;
+ }
+
+ dispose() {
+ Common.EventTarget.removeEventListeners(this._eventListeners);
+ }
+};

Powered by Google App Engine
This is Rietveld 408576698