summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js283
1 files changed, 283 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js b/Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js
new file mode 100644
index 000000000..13c585e15
--- /dev/null
+++ b/Source/WebInspectorUI/UserInterface/Views/DashboardContainerView.js
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.DashboardContainerView = class DashboardContainerView extends WebInspector.Object
+{
+ constructor()
+ {
+ super();
+
+ this._toolbarItem = new WebInspector.NavigationItem("dashboard-container", "group", WebInspector.UIString("Activity Viewer"));
+
+ this._advanceForwardArrowElement = this._toolbarItem.element.appendChild(document.createElement("div"));
+ this._advanceForwardArrowElement.className = "advance-arrow advance-forward";
+ this._advanceBackwardArrowElement = this._toolbarItem.element.appendChild(document.createElement("div"));
+ this._advanceBackwardArrowElement.className = "advance-arrow advance-backward";
+
+ this._advanceForwardArrowElement.addEventListener("click", this._advanceForwardArrowClicked.bind(this));
+ this._advanceBackwardArrowElement.addEventListener("click", this._advanceBackwardArrowClicked.bind(this));
+
+ // Represents currently open dashboards, with the most recent entries appended to the end.
+ this._dashboardStack = [];
+ this._currentIndex = -1;
+
+ this._updateAdvanceArrowVisibility();
+ }
+
+ // Public
+
+ get toolbarItem()
+ {
+ return this._toolbarItem;
+ }
+
+ get currentDashboardView()
+ {
+ if (this._currentIndex === -1)
+ return null;
+
+ return this._dashboardStack[this._currentIndex];
+ }
+
+ showDashboardViewForRepresentedObject(representedObject)
+ {
+ var dashboardView = this._dashboardViewForRepresentedObject(representedObject);
+ if (!dashboardView)
+ return null;
+
+ if (this.currentDashboardView === dashboardView)
+ return dashboardView;
+
+ var index = this._dashboardStack.indexOf(dashboardView);
+ this._showDashboardAtIndex(index);
+ return dashboardView;
+ }
+
+ hideDashboardViewForRepresentedObject(representedObject)
+ {
+ var onlyReturnExistingViews = true;
+ var dashboardView = this._dashboardViewForRepresentedObject(representedObject, onlyReturnExistingViews);
+
+ if (this.currentDashboardView !== dashboardView)
+ return;
+
+ console.assert(this._currentIndex > 0);
+ this._showDashboardAtIndex(this._currentIndex - 1);
+ }
+
+ closeDashboardViewForRepresentedObject(representedObject)
+ {
+ var onlyReturnExistingViews = true;
+ var dashboardView = this._dashboardViewForRepresentedObject(representedObject, onlyReturnExistingViews);
+ if (!dashboardView)
+ return;
+
+ this._closeDashboardView(dashboardView);
+ }
+
+ // Private
+
+ _advanceForwardArrowClicked()
+ {
+ this._showDashboardAtIndex(this._currentIndex + 1);
+ }
+
+ _advanceBackwardArrowClicked()
+ {
+ this._showDashboardAtIndex(this._currentIndex - 1);
+ }
+
+ _dismissAdvanceArrows()
+ {
+ this._advanceForwardArrowElement.classList.add(WebInspector.DashboardContainerView.InactiveStyleClassName);
+ this._advanceBackwardArrowElement.classList.add(WebInspector.DashboardContainerView.InactiveStyleClassName);
+ }
+
+ _updateAdvanceArrowVisibility()
+ {
+ var canAdvanceForward = this._currentIndex < this._dashboardStack.length - 1;
+ var canAdvanceBackward = this._currentIndex > 0;
+ this._advanceForwardArrowElement.classList.toggle(WebInspector.DashboardContainerView.InactiveStyleClassName, !canAdvanceForward);
+ this._advanceBackwardArrowElement.classList.toggle(WebInspector.DashboardContainerView.InactiveStyleClassName, !canAdvanceBackward);
+ }
+
+ _dashboardViewForRepresentedObject(representedObject, onlyReturnExistingViews)
+ {
+ console.assert(representedObject);
+
+ // Iterate over all known dashboard views and see if any are for this object.
+ for (var dashboardView of this._dashboardStack) {
+ if (dashboardView.representedObject === representedObject)
+ return dashboardView;
+ }
+
+ if (onlyReturnExistingViews)
+ return null;
+
+ // No existing content view found, make a new one.
+ dashboardView = WebInspector.DashboardView.create(representedObject);
+
+ console.assert(dashboardView, "Unknown representedObject", representedObject);
+ if (!dashboardView)
+ return null;
+
+ this._dashboardStack.push(dashboardView);
+ this._toolbarItem.element.appendChild(dashboardView.element);
+
+ return dashboardView;
+ }
+
+ _showDashboardAtIndex(index)
+ {
+ console.assert(index >= 0 && index <= this._dashboardStack.length - 1);
+
+ if (this._currentIndex === index)
+ return;
+
+ var advanceDirection = null;
+ if (this._currentIndex < index)
+ advanceDirection = WebInspector.DashboardContainerView.AdvanceDirection.Forward;
+ else
+ advanceDirection = WebInspector.DashboardContainerView.AdvanceDirection.Backward;
+ var initialDirection = WebInspector.DashboardContainerView.AdvanceDirection.None;
+ var isInitialDashboard = this._currentIndex === -1;
+ if (!isInitialDashboard)
+ this._hideDashboardView(this.currentDashboardView, advanceDirection);
+
+ this._currentIndex = index;
+ this._showDashboardView(this.currentDashboardView, isInitialDashboard ? initialDirection : advanceDirection);
+ }
+
+ _showDashboardView(dashboardView, advanceDirection)
+ {
+ console.assert(dashboardView instanceof WebInspector.DashboardView);
+
+ dashboardView.shown();
+ this._dismissAdvanceArrows();
+
+ var animationClass = null;
+ if (advanceDirection === WebInspector.DashboardContainerView.AdvanceDirection.Forward)
+ animationClass = WebInspector.DashboardContainerView.ForwardIncomingDashboardStyleClassName;
+ if (advanceDirection === WebInspector.DashboardContainerView.AdvanceDirection.Backward)
+ animationClass = WebInspector.DashboardContainerView.BackwardIncomingDashboardStyleClassName;
+
+ var container = this;
+ dashboardView.element.classList.add(WebInspector.DashboardContainerView.VisibleDashboardStyleClassName);
+
+ function animationEnded(event) {
+ if (event.target !== dashboardView.element)
+ return;
+
+ dashboardView.element.removeEventListener("animationend", animationEnded);
+ dashboardView.element.classList.remove(animationClass);
+ container._updateAdvanceArrowVisibility();
+ }
+
+ if (animationClass) {
+ dashboardView.element.classList.add(animationClass);
+ dashboardView.element.addEventListener("animationend", animationEnded);
+ }
+
+ return dashboardView;
+ }
+
+ _hideDashboardView(dashboardView, advanceDirection, callback)
+ {
+ console.assert(dashboardView instanceof WebInspector.DashboardView);
+ console.assert(this.currentDashboardView === dashboardView);
+
+ dashboardView.hidden();
+ this._dismissAdvanceArrows();
+
+ var animationClass = null;
+ if (advanceDirection === WebInspector.DashboardContainerView.AdvanceDirection.Forward)
+ animationClass = WebInspector.DashboardContainerView.ForwardOutgoingDashboardStyleClassName;
+ if (advanceDirection === WebInspector.DashboardContainerView.AdvanceDirection.Backward)
+ animationClass = WebInspector.DashboardContainerView.BackwardOutgoingDashboardStyleClassName;
+
+ var container = this;
+
+ function animationEnded(event) {
+ if (event.target !== dashboardView.element)
+ return;
+
+ dashboardView.element.removeEventListener("animationend", animationEnded);
+ dashboardView.element.classList.remove(animationClass);
+ dashboardView.element.classList.remove(WebInspector.DashboardContainerView.VisibleDashboardStyleClassName);
+ container._updateAdvanceArrowVisibility();
+
+ if (typeof callback === "function")
+ callback();
+ }
+
+ if (animationClass) {
+ dashboardView.element.classList.add(animationClass);
+ dashboardView.element.addEventListener("animationend", animationEnded);
+ } else
+ dashboardView.element.classList.remove(WebInspector.DashboardContainerView.VisibleDashboardStyleClassName);
+ }
+
+ _closeDashboardView(dashboardView)
+ {
+ console.assert(dashboardView instanceof WebInspector.DashboardView);
+
+ function dissociateDashboardView() {
+ dashboardView.closed();
+ dashboardView.element.parentNode.removeChild(dashboardView.element);
+ }
+
+ var index = this._dashboardStack.indexOf(dashboardView);
+
+ if (this.currentDashboardView === dashboardView) {
+ var direction = WebInspector.DashboardContainerView.AdvanceDirection.Backward;
+ this._hideDashboardView(this.currentDashboardView, direction, dissociateDashboardView);
+ this._dashboardStack.splice(index, 1);
+ --this._currentIndex;
+ this._showDashboardView(this.currentDashboardView, direction);
+ return;
+ }
+
+ this._dashboardStack.splice(index, 1);
+ if (this._currentIndex > index)
+ --this._currentIndex;
+ dissociateDashboardView.call(this);
+
+ this._updateAdvanceArrowVisibility();
+ }
+};
+
+WebInspector.DashboardContainerView.VisibleDashboardStyleClassName = "visible";
+WebInspector.DashboardContainerView.InactiveStyleClassName = "inactive";
+
+WebInspector.DashboardContainerView.AdvanceDirection = {
+ Forward: Symbol("dashboard-container-view-advance-direction-forward"),
+ Backward: Symbol("dashboard-container-view-advance-direction-backward"),
+ None: Symbol("dashboard-container-view-advance-direction-none")
+};
+
+WebInspector.DashboardContainerView.ForwardIncomingDashboardStyleClassName = "slide-in-down";
+WebInspector.DashboardContainerView.BackwardIncomingDashboardStyleClassName = "slide-in-up";
+WebInspector.DashboardContainerView.ForwardOutgoingDashboardStyleClassName = "slide-out-down";
+WebInspector.DashboardContainerView.BackwardOutgoingDashboardStyleClassName = "slide-out-up";