diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebInspectorUI/UserInterface/Views/TabContentView.js | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Views/TabContentView.js')
-rw-r--r-- | Source/WebInspectorUI/UserInterface/Views/TabContentView.js | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Views/TabContentView.js b/Source/WebInspectorUI/UserInterface/Views/TabContentView.js new file mode 100644 index 000000000..d0a88ab98 --- /dev/null +++ b/Source/WebInspectorUI/UserInterface/Views/TabContentView.js @@ -0,0 +1,184 @@ +/* + * Copyright (C) 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.TabContentView = class TabContentView extends WebInspector.ContentView +{ + constructor(identifier, styleClassNames, tabBarItem, navigationSidebarPanel, detailsSidebarPanels) + { + console.assert(typeof identifier === "string"); + console.assert(typeof styleClassNames === "string" || styleClassNames.every((className) => typeof className === "string")); + console.assert(tabBarItem instanceof WebInspector.TabBarItem); + console.assert(!navigationSidebarPanel || navigationSidebarPanel instanceof WebInspector.NavigationSidebarPanel); + console.assert(!detailsSidebarPanels || detailsSidebarPanels.every((detailsSidebarPanel) => detailsSidebarPanel instanceof WebInspector.DetailsSidebarPanel)); + + super(null); + + this.element.classList.add("tab"); + + if (typeof styleClassNames === "string") + styleClassNames = [styleClassNames]; + + this.element.classList.add(...styleClassNames); + + this._identifier = identifier; + this._tabBarItem = tabBarItem; + this._navigationSidebarPanel = navigationSidebarPanel || null; + this._detailsSidebarPanels = detailsSidebarPanels || []; + + const defaultSidebarWidth = 300; + + this._navigationSidebarCollapsedSetting = new WebInspector.Setting(identifier + "-navigation-sidebar-collapsed", false); + this._navigationSidebarWidthSetting = new WebInspector.Setting(identifier + "-navigation-sidebar-width", defaultSidebarWidth); + + this._detailsSidebarCollapsedSetting = new WebInspector.Setting(identifier + "-details-sidebar-collapsed", true); + this._detailsSidebarSelectedPanelSetting = new WebInspector.Setting(identifier + "-details-sidebar-selected-panel", null); + this._detailsSidebarWidthSetting = new WebInspector.Setting(identifier + "-details-sidebar-width", defaultSidebarWidth); + + this._cookieSetting = new WebInspector.Setting(identifier + "-tab-cookie", {}); + } + + static isTabAllowed() + { + // Returns false if a necessary domain or other features are unavailable. + return true; + } + + static isEphemeral() + { + // Returns true if the tab should not be shown in the new tab content view. + return false; + } + + static shouldSaveTab() + { + // Returns false if the tab should not be restored when re-opening the Inspector. + return true; + } + + // Public + + get type() + { + // Implemented by subclasses. + return null; + } + + get parentTabBrowser() + { + return this._parentTabBrowser; + } + + set parentTabBrowser(tabBrowser) + { + this._parentTabBrowser = tabBrowser || null; + } + + get identifier() + { + return this._identifier; + } + + get tabBarItem() + { + return this._tabBarItem; + } + + get managesDetailsSidebarPanels() + { + // Implemented by subclasses. + return false; + } + + showDetailsSidebarPanels() + { + // Implemented by subclasses. + } + + showRepresentedObject(representedObject, cookie) + { + // Implemented by subclasses. + } + + canShowRepresentedObject(representedObject) + { + // Implemented by subclasses. + return false; + } + + shown() + { + super.shown(); + + if (this._shouldRestoreStateWhenShown) + this.restoreStateFromCookie(WebInspector.StateRestorationType.Delayed); + } + + restoreStateFromCookie(restorationType) + { + if (!this.visible) { + this._shouldRestoreStateWhenShown = true; + return; + } + + this._shouldRestoreStateWhenShown = false; + + var relaxMatchDelay = 0; + if (restorationType === WebInspector.StateRestorationType.Load) + relaxMatchDelay = 1000; + else if (restorationType === WebInspector.StateRestorationType.Navigation) + relaxMatchDelay = 2000; + + let cookie = this._cookieSetting.value || {}; + + if (this.navigationSidebarPanel) + this.navigationSidebarPanel.restoreStateFromCookie(cookie, relaxMatchDelay); + + this.restoreFromCookie(cookie); + } + + saveStateToCookie(cookie) + { + if (this._shouldRestoreStateWhenShown) + return; + + cookie = cookie || {}; + + if (this.navigationSidebarPanel) + this.navigationSidebarPanel.saveStateToCookie(cookie); + + this.saveToCookie(cookie); + + this._cookieSetting.value = cookie; + } + + get navigationSidebarPanel() { return this._navigationSidebarPanel; } + get navigationSidebarCollapsedSetting() { return this._navigationSidebarCollapsedSetting; } + get navigationSidebarWidthSetting() { return this._navigationSidebarWidthSetting; } + + get detailsSidebarPanels() { return this._detailsSidebarPanels; } + get detailsSidebarCollapsedSetting() { return this._detailsSidebarCollapsedSetting; } + get detailsSidebarSelectedPanelSetting() { return this._detailsSidebarSelectedPanelSetting; } + get detailsSidebarWidthSetting() { return this._detailsSidebarWidthSetting; } +}; |