summaryrefslogtreecommitdiff
path: root/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.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/NewTabContentView.js
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js')
-rw-r--r--Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js163
1 files changed, 163 insertions, 0 deletions
diff --git a/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js b/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js
new file mode 100644
index 000000000..21c0142ab
--- /dev/null
+++ b/Source/WebInspectorUI/UserInterface/Views/NewTabContentView.js
@@ -0,0 +1,163 @@
+/*
+ * 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.NewTabContentView = class NewTabContentView extends WebInspector.TabContentView
+{
+ constructor(identifier)
+ {
+ let {image, title} = WebInspector.NewTabContentView.tabInfo();
+ let tabBarItem = new WebInspector.GeneralTabBarItem(image, title);
+ tabBarItem.isDefaultTab = true;
+
+ super(identifier || "new-tab", "new-tab", tabBarItem);
+
+ WebInspector.notifications.addEventListener(WebInspector.Notification.TabTypesChanged, this._updateShownTabs.bind(this));
+
+ this._tabElementsByTabClass = new Map;
+ this._updateShownTabs();
+ }
+
+ static tabInfo()
+ {
+ return {
+ image: "Images/NewTab.svg",
+ title: WebInspector.UIString("New Tab"),
+ };
+ }
+
+ static isEphemeral()
+ {
+ return true;
+ }
+
+ static shouldSaveTab()
+ {
+ return false;
+ }
+
+ // Public
+
+ get type()
+ {
+ return WebInspector.NewTabContentView.Type;
+ }
+
+ shown()
+ {
+ WebInspector.tabBrowser.tabBar.addEventListener(WebInspector.TabBar.Event.TabBarItemAdded, this._updateTabItems, this);
+ WebInspector.tabBrowser.tabBar.addEventListener(WebInspector.TabBar.Event.TabBarItemRemoved, this._updateTabItems, this);
+
+ this._updateTabItems();
+ }
+
+ hidden()
+ {
+ WebInspector.tabBrowser.tabBar.removeEventListener(null, null, this);
+ }
+
+ get supportsSplitContentBrowser()
+ {
+ // Showing the split console is problematic because some new tabs will cause it to
+ // disappear and not reappear, but others won't. Just prevent it from ever showing.
+ return false;
+ }
+
+ layout()
+ {
+ this._tabElementsByTabClass.clear();
+ this.element.removeChildren();
+
+ for (let tabClass of this._shownTabClasses) {
+ let tabItemElement = document.createElement("div");
+ tabItemElement.classList.add("tab-item");
+ tabItemElement.addEventListener("click", this._createNewTabWithType.bind(this, tabClass.Type));
+ tabItemElement[WebInspector.NewTabContentView.TypeSymbol] = tabClass.Type;
+
+ let boxElement = tabItemElement.appendChild(document.createElement("div"));
+ boxElement.classList.add("box");
+
+ let info = tabClass.tabInfo();
+ let imageElement = boxElement.appendChild(document.createElement("img"));
+ imageElement.src = info.image;
+
+ let labelElement = tabItemElement.appendChild(document.createElement("label"));
+ labelElement.textContent = info.title;
+
+ this.element.appendChild(tabItemElement);
+ this._tabElementsByTabClass.set(tabClass, tabItemElement);
+ }
+
+ this._updateTabItems();
+ }
+
+ // Private
+
+ _createNewTabWithType(tabType, event)
+ {
+ if (!WebInspector.isNewTabWithTypeAllowed(tabType))
+ return;
+
+ const canCreateAdditionalTabs = this._allowableTabTypes().length > 1;
+ const options = {
+ referencedView: this,
+ shouldReplaceTab: !canCreateAdditionalTabs || !WebInspector.modifierKeys.metaKey,
+ shouldShowNewTab: !WebInspector.modifierKeys.metaKey
+ };
+ WebInspector.createNewTabWithType(tabType, options);
+ }
+
+ _updateShownTabs()
+ {
+ let allTabClasses = Array.from(WebInspector.knownTabClasses());
+ let allowedTabClasses = allTabClasses.filter((tabClass) => tabClass.isTabAllowed() && !tabClass.isEphemeral());
+ allowedTabClasses.sort((a, b) => a.tabInfo().title.localeCompare(b.tabInfo().title));
+
+ if (Array.shallowEqual(this._shownTabClasses, allowedTabClasses))
+ return;
+
+ this._shownTabClasses = allowedTabClasses;
+ this.needsLayout();
+ }
+
+ _allowableTabTypes()
+ {
+ let tabTypes = this._shownTabClasses.map((tabClass) => tabClass.Type);
+ return tabTypes.filter((type) => WebInspector.isNewTabWithTypeAllowed(type));
+ }
+
+ _updateTabItems()
+ {
+ for (let [tabClass, tabItemElement] of this._tabElementsByTabClass.entries()) {
+ let allowed = WebInspector.isNewTabWithTypeAllowed(tabClass.Type);
+ tabItemElement.classList.toggle(WebInspector.NewTabContentView.DisabledStyleClassName, !allowed);
+ }
+ }
+};
+
+WebInspector.NewTabContentView.Type = "new-tab";
+WebInspector.NewTabContentView.TypeSymbol = Symbol("type");
+
+WebInspector.NewTabContentView.TabItemStyleClassName = "tab-item";
+WebInspector.NewTabContentView.DisabledStyleClassName = "disabled";