summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/NavigationSidebarPanel.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/NavigationSidebarPanel.js
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/NavigationSidebarPanel.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/NavigationSidebarPanel.js692
1 files changed, 0 insertions, 692 deletions
diff --git a/Source/WebInspectorUI/UserInterface/NavigationSidebarPanel.js b/Source/WebInspectorUI/UserInterface/NavigationSidebarPanel.js
deleted file mode 100644
index 7bf292b28..000000000
--- a/Source/WebInspectorUI/UserInterface/NavigationSidebarPanel.js
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * Copyright (C) 2013 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.NavigationSidebarPanel = function(identifier, displayName, image, keyboardShortcutKey, autoPruneOldTopLevelResourceTreeElements, autoHideToolbarItemWhenEmpty, wantsTopOverflowShadow, element, role, label) {
- if (keyboardShortcutKey)
- this._keyboardShortcut = new WebInspector.KeyboardShortcut(WebInspector.KeyboardShortcut.Modifier.Control, keyboardShortcutKey, this.toggle.bind(this));
-
- if (this._keyboardShortcut) {
- var showToolTip = WebInspector.UIString("Show the %s navigation sidebar (%s)").format(displayName, this._keyboardShortcut.displayName);
- var hideToolTip = WebInspector.UIString("Hide the %s navigation sidebar (%s)").format(displayName, this._keyboardShortcut.displayName);
- } else {
- var showToolTip = WebInspector.UIString("Show the %s navigation sidebar").format(displayName);
- var hideToolTip = WebInspector.UIString("Hide the %s navigation sidebar").format(displayName);
- }
-
- WebInspector.SidebarPanel.call(this, identifier, displayName, showToolTip, hideToolTip, image, element, role, label || displayName);
-
- this.element.classList.add(WebInspector.NavigationSidebarPanel.StyleClassName);
-
- this._autoHideToolbarItemWhenEmpty = autoHideToolbarItemWhenEmpty || false;
-
- if (autoHideToolbarItemWhenEmpty)
- this.toolbarItem.hidden = true;
-
- this._visibleContentTreeOutlines = new Set;
-
- this._contentElement = document.createElement("div");
- this._contentElement.className = WebInspector.NavigationSidebarPanel.ContentElementStyleClassName;
- this._contentElement.addEventListener("scroll", this._updateContentOverflowShadowVisibility.bind(this));
- this.element.appendChild(this._contentElement);
-
- this._contentTreeOutline = this.createContentTreeOutline(true);
-
- this._filterBar = new WebInspector.FilterBar();
- this._filterBar.addEventListener(WebInspector.FilterBar.Event.TextFilterDidChange, this._textFilterDidChange, this);
- this.element.appendChild(this._filterBar.element);
-
- this._bottomOverflowShadowElement = document.createElement("div");
- this._bottomOverflowShadowElement.className = WebInspector.NavigationSidebarPanel.OverflowShadowElementStyleClassName;
- this.element.appendChild(this._bottomOverflowShadowElement);
-
- if (wantsTopOverflowShadow) {
- this._topOverflowShadowElement = document.createElement("div");
- this._topOverflowShadowElement.classList.add(WebInspector.NavigationSidebarPanel.OverflowShadowElementStyleClassName);
- this._topOverflowShadowElement.classList.add(WebInspector.NavigationSidebarPanel.TopOverflowShadowElementStyleClassName);
- this.element.appendChild(this._topOverflowShadowElement);
- }
-
- window.addEventListener("resize", this._updateContentOverflowShadowVisibility.bind(this));
-
- this._filtersSetting = new WebInspector.Setting(identifier + "-navigation-sidebar-filters", {});
- this._filterBar.filters = this._filtersSetting.value;
-
- this._emptyContentPlaceholderElement = document.createElement("div");
- this._emptyContentPlaceholderElement.className = WebInspector.NavigationSidebarPanel.EmptyContentPlaceholderElementStyleClassName;
-
- this._emptyContentPlaceholderMessageElement = document.createElement("div");
- this._emptyContentPlaceholderMessageElement.className = WebInspector.NavigationSidebarPanel.EmptyContentPlaceholderMessageElementStyleClassName;
- this._emptyContentPlaceholderElement.appendChild(this._emptyContentPlaceholderMessageElement);
-
- this._generateStyleRulesIfNeeded();
- this._generateDisclosureTrianglesIfNeeded();
-
- if (autoPruneOldTopLevelResourceTreeElements) {
- WebInspector.Frame.addEventListener(WebInspector.Frame.Event.MainResourceDidChange, this._checkForOldResources, this);
- WebInspector.Frame.addEventListener(WebInspector.Frame.Event.ChildFrameWasRemoved, this._checkForOldResources, this);
- WebInspector.Frame.addEventListener(WebInspector.Frame.Event.ResourceWasRemoved, this._checkForOldResources, this);
- }
-};
-
-WebInspector.NavigationSidebarPanel.StyleClassName = "navigation";
-WebInspector.NavigationSidebarPanel.OverflowShadowElementStyleClassName = "overflow-shadow";
-WebInspector.NavigationSidebarPanel.TopOverflowShadowElementStyleClassName = "top";
-WebInspector.NavigationSidebarPanel.ContentElementStyleClassName = "content";
-WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementHiddenStyleClassName = "hidden";
-WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementStyleClassName = "navigation-sidebar-panel-content-tree-outline";
-WebInspector.NavigationSidebarPanel.HideDisclosureButtonsStyleClassName = "hide-disclosure-buttons";
-WebInspector.NavigationSidebarPanel.EmptyContentPlaceholderElementStyleClassName = "empty-content-placeholder";
-WebInspector.NavigationSidebarPanel.EmptyContentPlaceholderMessageElementStyleClassName = "message";
-WebInspector.NavigationSidebarPanel.DisclosureTriangleOpenCanvasIdentifier = "navigation-sidebar-panel-disclosure-triangle-open";
-WebInspector.NavigationSidebarPanel.DisclosureTriangleClosedCanvasIdentifier = "navigation-sidebar-panel-disclosure-triangle-closed";
-WebInspector.NavigationSidebarPanel.DisclosureTriangleNormalCanvasIdentifierSuffix = "-normal";
-WebInspector.NavigationSidebarPanel.DisclosureTriangleSelectedCanvasIdentifierSuffix = "-selected";
-
-WebInspector.NavigationSidebarPanel.prototype = {
- constructor: WebInspector.NavigationSidebarPanel,
-
- // Public
-
- get contentElement()
- {
- return this._contentElement;
- },
-
- get contentTreeOutlineElement()
- {
- return this._contentTreeOutline.element;
- },
-
- get contentTreeOutline()
- {
- return this._contentTreeOutline;
- },
-
- set contentTreeOutline(newTreeOutline)
- {
- console.assert(newTreeOutline);
- if (!newTreeOutline)
- return;
-
- if (this._contentTreeOutline)
- this._contentTreeOutline.element.classList.add(WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementHiddenStyleClassName);
-
- this._contentTreeOutline = newTreeOutline;
- this._contentTreeOutline.element.classList.remove(WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementHiddenStyleClassName);
-
- this._visibleContentTreeOutlines.delete(this._contentTreeOutline);
- this._visibleContentTreeOutlines.add(newTreeOutline);
-
- this._updateFilter();
- },
-
- get contentTreeOutlineToAutoPrune()
- {
- return this._contentTreeOutline;
- },
-
- get filterBar()
- {
- return this._filterBar;
- },
-
- get restoringState()
- {
- return this._restoringState;
- },
-
- createContentTreeOutline: function(dontHideByDefault, suppressFiltering)
- {
- var contentTreeOutlineElement = document.createElement("ol");
- contentTreeOutlineElement.className = WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementStyleClassName;
- if (!dontHideByDefault)
- contentTreeOutlineElement.classList.add(WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementHiddenStyleClassName);
- this._contentElement.appendChild(contentTreeOutlineElement);
-
- var contentTreeOutline = new TreeOutline(contentTreeOutlineElement);
- contentTreeOutline.allowsRepeatSelection = true;
-
- if (!suppressFiltering) {
- contentTreeOutline.onadd = this._treeElementAddedOrChanged.bind(this);
- contentTreeOutline.onchange = this._treeElementAddedOrChanged.bind(this);
- contentTreeOutline.onexpand = this._treeElementExpandedOrCollapsed.bind(this);
- contentTreeOutline.oncollapse = this._treeElementExpandedOrCollapsed.bind(this);
- }
-
- if (dontHideByDefault)
- this._visibleContentTreeOutlines.add(contentTreeOutline);
-
- return contentTreeOutline;
- },
-
- treeElementForRepresentedObject: function(representedObject)
- {
- return this._contentTreeOutline.getCachedTreeElement(representedObject);
- },
-
- showDefaultContentView: function()
- {
- // Implemneted by subclasses if needed to show a content view when no existing tree element is selected.
- },
-
- showContentViewForCurrentSelection: function()
- {
- // Reselect the selected tree element to cause the content view to be shown as well. <rdar://problem/10854727>
- var selectedTreeElement = this._contentTreeOutline.selectedTreeElement;
- if (selectedTreeElement)
- selectedTreeElement.select();
- },
-
- saveStateToCookie: function(cookie)
- {
- console.assert(cookie);
-
- // This does not save folder selections, which lack a represented object and content view.
- var selectedTreeElement = null;
- this._visibleContentTreeOutlines.forEach(function(outline) {
- if (outline.selectedTreeElement)
- selectedTreeElement = outline.selectedTreeElement;
- });
-
- if (!selectedTreeElement)
- return;
-
- if (this._isTreeElementWithoutRepresentedObject(selectedTreeElement))
- return;
-
- var representedObject = selectedTreeElement.representedObject;
- cookie[WebInspector.TypeIdentifierCookieKey] = representedObject.constructor.TypeIdentifier;
-
- if (representedObject.saveIdentityToCookie)
- representedObject.saveIdentityToCookie(cookie);
- else
- console.error("Error: TreeElement.representedObject is missing a saveIdentityToCookie implementation. TreeElement.constructor: %s", selectedTreeElement.constructor);
- },
-
- // This can be supplemented by subclasses that admit a simpler strategy for static tree elements.
- restoreStateFromCookie: function(cookie, relaxedMatchDelay)
- {
- this._pendingViewStateCookie = cookie;
- this._restoringState = true;
-
- // Check if any existing tree elements in any outline match the cookie.
- this._checkOutlinesForPendingViewStateCookie();
-
- if (this._finalAttemptToRestoreViewStateTimeout)
- clearTimeout(this._finalAttemptToRestoreViewStateTimeout);
-
- function finalAttemptToRestoreViewStateFromCookie()
- {
- delete this._finalAttemptToRestoreViewStateTimeout;
-
- this._checkOutlinesForPendingViewStateCookie(true);
-
- delete this._pendingViewStateCookie;
- delete this._restoringState;
- }
-
- // If the specific tree element wasn't found, we may need to wait for the resources
- // to be registered. We try one last time (match type only) after an arbitrary amount of timeout.
- this._finalAttemptToRestoreViewStateTimeout = setTimeout(finalAttemptToRestoreViewStateFromCookie.bind(this), relaxedMatchDelay);
- },
-
- showEmptyContentPlaceholder: function(message, hideToolbarItem)
- {
- console.assert(message);
-
- this._emptyContentPlaceholderMessageElement.textContent = message;
- this.element.appendChild(this._emptyContentPlaceholderElement);
-
- this._hideToolbarItemWhenEmpty = hideToolbarItem || false;
- this._updateToolbarItemVisibility();
- this._updateContentOverflowShadowVisibility();
- },
-
- hideEmptyContentPlaceholder: function()
- {
- if (this._emptyContentPlaceholderElement.parentNode)
- this._emptyContentPlaceholderElement.parentNode.removeChild(this._emptyContentPlaceholderElement);
-
- this._hideToolbarItemWhenEmpty = false;
- this._updateToolbarItemVisibility();
- this._updateContentOverflowShadowVisibility();
- },
-
- updateEmptyContentPlaceholder: function(message)
- {
- this._updateToolbarItemVisibility();
-
- if (!this._contentTreeOutline.children.length) {
- // No tree elements, so no results.
- this.showEmptyContentPlaceholder(message);
- } else if (!this._emptyFilterResults) {
- // There are tree elements, and not all of them are hidden by the filter.
- this.hideEmptyContentPlaceholder();
- }
- },
-
- updateCustomContentOverflow: function()
- {
- // Implemented by subclasses if needed.
- },
-
- updateFilter: function()
- {
- this._updateFilter();
- },
-
- hasCustomFilters: function()
- {
- // Implemented by subclasses if needed.
- return false;
- },
-
- matchTreeElementAgainstCustomFilters: function(treeElement)
- {
- // Implemented by subclasses if needed.
- return true;
- },
-
- applyFiltersToTreeElement: function(treeElement)
- {
- if (!this._filterBar.hasActiveFilters() && !this.hasCustomFilters()) {
- // No filters, so make everything visible.
- treeElement.hidden = false;
-
- // If this tree element was expanded during filtering, collapse it again.
- if (treeElement.expanded && treeElement.__wasExpandedDuringFiltering) {
- delete treeElement.__wasExpandedDuringFiltering;
- treeElement.collapse();
- }
-
- return;
- }
-
- var filterableData = treeElement.filterableData || {};
-
- var matchedBuiltInFilters = false;
-
- var self = this;
- function matchTextFilter(inputs)
- {
- if (!inputs || !self._textFilterRegex)
- return true;
-
- // Convert to a single item array if needed.
- if (!(inputs instanceof Array))
- inputs = [inputs];
-
- // Loop over all the inputs and try to match them.
- for (var input of inputs) {
- if (!input)
- continue;
- if (self._textFilterRegex.test(input)) {
- matchedBuiltInFilters = true;
- return true;
- }
- }
-
- // No inputs matched.
- return false;
- }
-
- function makeVisible()
- {
- // Make this element visible.
- treeElement.hidden = false;
-
- // Make the ancestors visible and expand them.
- var currentAncestor = treeElement.parent;
- while (currentAncestor && !currentAncestor.root) {
- currentAncestor.hidden = false;
-
- // Only expand if the built-in filters matched, not custom filters.
- if (matchedBuiltInFilters && !currentAncestor.expanded) {
- currentAncestor.__wasExpandedDuringFiltering = true;
- currentAncestor.expand();
- }
-
- currentAncestor = currentAncestor.parent;
- }
- }
-
- if (matchTextFilter(filterableData.text) && this.matchTreeElementAgainstCustomFilters(treeElement)) {
- // Make this element visible since it matches.
- makeVisible();
-
- // If this tree element didn't match a built-in filter and was expanded earlier during filtering, collapse it again.
- if (!matchedBuiltInFilters && treeElement.expanded && treeElement.__wasExpandedDuringFiltering) {
- delete treeElement.__wasExpandedDuringFiltering;
- treeElement.collapse();
- }
-
- return;
- }
-
- // Make this element invisible since it does not match.
- treeElement.hidden = true;
- },
-
- show: function()
- {
- if (!this.parentSidebar)
- return;
-
- WebInspector.SidebarPanel.prototype.show.call(this);
-
- this.contentTreeOutlineElement.focus();
- },
-
- shown: function()
- {
- WebInspector.SidebarPanel.prototype.shown.call(this);
-
- this._updateContentOverflowShadowVisibility();
-
- // Force the navigation item to be visible. This makes sure it is
- // always visible when the panel is shown.
- this.toolbarItem.hidden = false;
- },
-
- hidden: function()
- {
- WebInspector.SidebarPanel.prototype.hidden.call(this);
-
- this._updateToolbarItemVisibility();
- },
-
- // Private
-
- _updateContentOverflowShadowVisibility: function()
- {
- this.updateCustomContentOverflow();
-
- var scrollHeight = this._contentElement.scrollHeight;
- var offsetHeight = this._contentElement.offsetHeight;
-
- if (scrollHeight < offsetHeight) {
- if (this._topOverflowShadowElement)
- this._topOverflowShadowElement.style.opacity = 0;
- this._bottomOverflowShadowElement.style.opacity = 0;
- return;
- }
-
- const edgeThreshold = 10;
- var scrollTop = this._contentElement.scrollTop;
-
- var topCoverage = Math.min(scrollTop, edgeThreshold);
- var bottomCoverage = Math.max(0, (offsetHeight + scrollTop) - (scrollHeight - edgeThreshold));
-
- if (this._topOverflowShadowElement)
- this._topOverflowShadowElement.style.opacity = (topCoverage / edgeThreshold).toFixed(1);
- this._bottomOverflowShadowElement.style.opacity = (1 - (bottomCoverage / edgeThreshold)).toFixed(1);
- },
-
- _updateToolbarItemVisibility: function()
- {
- // Hide the navigation item if requested or auto-hiding and we are not visible and we are empty.
- var shouldHide = ((this._hideToolbarItemWhenEmpty || this._autoHideToolbarItemWhenEmpty) && !this.selected && !this._contentTreeOutline.children.length);
- this.toolbarItem.hidden = shouldHide;
- },
-
- _checkForEmptyFilterResults: function()
- {
- // No tree elements, so don't touch the empty content placeholder.
- if (!this._contentTreeOutline.children.length)
- return;
-
- // Iterate over all the top level tree elements. If any are visible, return early.
- var currentTreeElement = this._contentTreeOutline.children[0];
- while (currentTreeElement) {
- if (!currentTreeElement.hidden) {
- // Not hidden, so hide any empty content message.
- this.hideEmptyContentPlaceholder();
- this._emptyFilterResults = false;
- return;
- }
-
- currentTreeElement = currentTreeElement.nextSibling;
- }
-
- // All top level tree elements are hidden, so filtering hid everything. Show a message.
- this.showEmptyContentPlaceholder(WebInspector.UIString("No Filter Results"));
- this._emptyFilterResults = true;
- },
-
- _textFilterDidChange: function()
- {
- this._updateFilter();
- },
-
- _updateFilter: function()
- {
- var filters = this._filterBar.filters;
- this._textFilterRegex = simpleGlobStringToRegExp(filters.text, "i");
- this._filtersSetting.value = filters;
-
- // Update the whole tree.
- var currentTreeElement = this._contentTreeOutline.children[0];
- while (currentTreeElement && !currentTreeElement.root) {
- this.applyFiltersToTreeElement(currentTreeElement);
- currentTreeElement = currentTreeElement.traverseNextTreeElement(false, null, false);
- }
-
- this._checkForEmptyFilterResults();
- this._updateContentOverflowShadowVisibility();
- },
-
- _treeElementAddedOrChanged: function(treeElement)
- {
- // Apply the filters to the tree element and its descendants.
- var currentTreeElement = treeElement;
- while (currentTreeElement && !currentTreeElement.root) {
- this.applyFiltersToTreeElement(currentTreeElement);
- currentTreeElement = currentTreeElement.traverseNextTreeElement(false, treeElement, false);
- }
-
- this._checkForEmptyFilterResults();
- this._updateContentOverflowShadowVisibility();
- this._checkElementsForPendingViewStateCookie(treeElement);
- },
-
- _treeElementExpandedOrCollapsed: function(treeElement)
- {
- this._updateContentOverflowShadowVisibility();
- },
-
- _generateStyleRulesIfNeeded: function()
- {
- if (WebInspector.NavigationSidebarPanel._styleElement)
- return;
-
- WebInspector.NavigationSidebarPanel._styleElement = document.createElement("style");
-
- const maximumSidebarTreeDepth = 15;
- const baseLeftPadding = 5; // Matches the padding in NavigationSidebarPanel.css for the item class. Keep in sync.
- const depthPadding = 16;
-
- var styleText = "";
- var childrenSubstring = " > ";
- for (var i = 1; i <= maximumSidebarTreeDepth; ++i) {
- childrenSubstring += ".children > ";
- styleText += "." + WebInspector.NavigationSidebarPanel.ContentTreeOutlineElementStyleClassName + childrenSubstring + ".item { ";
- styleText += "padding-left: " + (baseLeftPadding + (depthPadding * i)) + "px; }\n";
- }
-
- WebInspector.NavigationSidebarPanel._styleElement.textContent = styleText;
-
- document.head.appendChild(WebInspector.NavigationSidebarPanel._styleElement);
- },
-
- _generateDisclosureTrianglesIfNeeded: function()
- {
- if (WebInspector.NavigationSidebarPanel._generatedDisclosureTriangles)
- return;
-
- // Set this early instead of in _generateDisclosureTriangle because we don't want multiple panels that are
- // created at the same time to duplicate the work (even though it would be harmless.)
- WebInspector.NavigationSidebarPanel._generatedDisclosureTriangles = true;
-
- var specifications = {};
- specifications[WebInspector.NavigationSidebarPanel.DisclosureTriangleNormalCanvasIdentifierSuffix] = {
- fillColor: [112, 126, 139],
- shadowColor: [255, 255, 255, 0.8],
- shadowOffsetX: 0,
- shadowOffsetY: 1,
- shadowBlur: 0
- };
-
- specifications[WebInspector.NavigationSidebarPanel.DisclosureTriangleSelectedCanvasIdentifierSuffix] = {
- fillColor: [255, 255, 255],
- shadowColor: [61, 91, 110, 0.8],
- shadowOffsetX: 0,
- shadowOffsetY: 1,
- shadowBlur: 2
- };
-
- generateColoredImagesForCSS("Images/DisclosureTriangleSmallOpen.svg", specifications, 13, 13, WebInspector.NavigationSidebarPanel.DisclosureTriangleOpenCanvasIdentifier);
- generateColoredImagesForCSS("Images/DisclosureTriangleSmallClosed.svg", specifications, 13, 13, WebInspector.NavigationSidebarPanel.DisclosureTriangleClosedCanvasIdentifier);
- },
-
- _checkForOldResources: function(event)
- {
- if (this._checkForOldResourcesTimeoutIdentifier)
- return;
-
- function delayedWork()
- {
- delete this._checkForOldResourcesTimeoutIdentifier;
-
- var contentTreeOutline = this.contentTreeOutlineToAutoPrune;
-
- // Check all the ResourceTreeElements at the top level to make sure their Resource still has a parentFrame in the frame hierarchy.
- // If the parentFrame is no longer in the frame hierarchy we know it was removed due to a navigation or some other page change and
- // we should remove the issues for that resource.
- for (var i = contentTreeOutline.children.length - 1; i >= 0; --i) {
- var treeElement = contentTreeOutline.children[i];
- if (!(treeElement instanceof WebInspector.ResourceTreeElement))
- continue;
-
- var resource = treeElement.resource;
- if (!resource.parentFrame || resource.parentFrame.isDetached())
- contentTreeOutline.removeChildAtIndex(i, true, true);
- }
-
- if (typeof this._updateEmptyContentPlaceholder === "function")
- this._updateEmptyContentPlaceholder();
- }
-
- // Check on a delay to coalesce multiple calls to _checkForOldResources.
- this._checkForOldResourcesTimeoutIdentifier = setTimeout(delayedWork.bind(this), 0);
- },
-
- _isTreeElementWithoutRepresentedObject: function(treeElement)
- {
- return treeElement instanceof WebInspector.FolderTreeElement
- || treeElement instanceof WebInspector.DatabaseHostTreeElement
- || typeof treeElement.representedObject === "string"
- || treeElement.representedObject instanceof String;
- },
-
- _checkOutlinesForPendingViewStateCookie: function(matchTypeOnly)
- {
- if (!this._pendingViewStateCookie)
- return;
-
- var visibleTreeElements = [];
- this._visibleContentTreeOutlines.forEach(function(outline) {
- var currentTreeElement = outline.hasChildren ? outline.children[0] : null;
- while (currentTreeElement) {
- visibleTreeElements.push(currentTreeElement);
- currentTreeElement = currentTreeElement.traverseNextTreeElement(false, null, false);
- }
- });
-
- return this._checkElementsForPendingViewStateCookie(visibleTreeElements, matchTypeOnly);
- },
-
- _checkElementsForPendingViewStateCookie: function(treeElements, matchTypeOnly)
- {
- if (!this._pendingViewStateCookie)
- return;
-
- var cookie = this._pendingViewStateCookie;
-
- function treeElementMatchesCookie(treeElement)
- {
- if (this._isTreeElementWithoutRepresentedObject(treeElement))
- return false;
-
- var representedObject = treeElement.representedObject;
- if (!representedObject)
- return false;
-
- var typeIdentifier = cookie[WebInspector.TypeIdentifierCookieKey];
- if (typeIdentifier !== representedObject.constructor.TypeIdentifier)
- return false;
-
- if (matchTypeOnly)
- return true;
-
- var candidateObjectCookie = {};
- if (representedObject.saveIdentityToCookie)
- representedObject.saveIdentityToCookie(candidateObjectCookie);
-
- return Object.keys(candidateObjectCookie).every(function valuesMatchForKey(key) {
- return candidateObjectCookie[key] === cookie[key];
- });
- }
-
- if (!(treeElements instanceof Array))
- treeElements = [treeElements];
-
- var matchedElement = null;
- treeElements.some(function(element) {
- if (treeElementMatchesCookie.call(this, element)) {
- matchedElement = element;
- return true;
- }
- }, this);
-
- if (matchedElement) {
- matchedElement.revealAndSelect(true, false);
-
- delete this._pendingViewStateCookie;
-
- // Delay clearing the restoringState flag until the next runloop so listeners
- // checking for it in this runloop still know state was being restored.
- setTimeout(function() {
- delete this._restoringState;
- }.bind(this));
-
- if (this._finalAttemptToRestoreViewStateTimeout) {
- clearTimeout(this._finalAttemptToRestoreViewStateTimeout);
- delete this._finalAttemptToRestoreViewStateTimeout;
- }
- }
- }
-};
-
-WebInspector.NavigationSidebarPanel.prototype.__proto__ = WebInspector.SidebarPanel.prototype;