summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/src/utils/tabs.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 14:29:10 +0000
commit2aa4a82499d4becd2284cdb482213d541b8804dd (patch)
treeb80bf8bf13c3766139fbacc530efd0dd9d54394c /devtools/client/debugger/src/utils/tabs.js
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/src/utils/tabs.js')
-rw-r--r--devtools/client/debugger/src/utils/tabs.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/utils/tabs.js b/devtools/client/debugger/src/utils/tabs.js
new file mode 100644
index 0000000000..12349c2faa
--- /dev/null
+++ b/devtools/client/debugger/src/utils/tabs.js
@@ -0,0 +1,116 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
+
+// @flow
+
+import type { PersistedTab, VisibleTab } from "../reducers/tabs";
+import type { TabList, Tab, TabsSources } from "../reducers/types";
+import type { URL } from "../types";
+
+/*
+ * Finds the hidden tabs by comparing the tabs' top offset.
+ * hidden tabs will have a great top offset.
+ *
+ * @param sourceTabs Array
+ * @param sourceTabEls HTMLCollection
+ *
+ * @returns Array
+ */
+
+export function getHiddenTabs(
+ sourceTabs: TabsSources,
+ sourceTabEls: Array<any>
+): TabsSources {
+ sourceTabEls = [].slice.call(sourceTabEls);
+ function getTopOffset(): number {
+ const topOffsets = sourceTabEls.map(t => t.getBoundingClientRect().top);
+ return Math.min(...topOffsets);
+ }
+
+ function hasTopOffset(el): boolean {
+ // adding 10px helps account for cases where the tab might be offset by
+ // styling such as selected tabs which don't have a border.
+ const tabTopOffset = getTopOffset();
+ return el.getBoundingClientRect().top > tabTopOffset + 10;
+ }
+
+ return sourceTabs.filter((tab, index: number) => {
+ const element = sourceTabEls[index];
+ return element && hasTopOffset(element);
+ });
+}
+
+export function getFramework(tabs: TabList, url: URL): string {
+ const tab = tabs.find(t => t.url === url);
+ return tab?.framework ?? "";
+}
+
+export function getTabMenuItems(): Object {
+ return {
+ closeTab: {
+ id: "node-menu-close-tab",
+ label: L10N.getStr("sourceTabs.closeTab"),
+ accesskey: L10N.getStr("sourceTabs.closeTab.accesskey"),
+ disabled: false,
+ },
+ closeOtherTabs: {
+ id: "node-menu-close-other-tabs",
+ label: L10N.getStr("sourceTabs.closeOtherTabs"),
+ accesskey: L10N.getStr("sourceTabs.closeOtherTabs.accesskey"),
+ disabled: false,
+ },
+ closeTabsToEnd: {
+ id: "node-menu-close-tabs-to-end",
+ label: L10N.getStr("sourceTabs.closeTabsToEnd"),
+ accesskey: L10N.getStr("sourceTabs.closeTabsToEnd.accesskey"),
+ disabled: false,
+ },
+ closeAllTabs: {
+ id: "node-menu-close-all-tabs",
+ label: L10N.getStr("sourceTabs.closeAllTabs"),
+ accesskey: L10N.getStr("sourceTabs.closeAllTabs.accesskey"),
+ disabled: false,
+ },
+ showSource: {
+ id: "node-menu-show-source",
+ label: L10N.getStr("sourceTabs.revealInTree"),
+ accesskey: L10N.getStr("sourceTabs.revealInTree.accesskey"),
+ disabled: false,
+ },
+ copySource: {
+ id: "node-menu-copy-source",
+ label: L10N.getStr("copySource.label"),
+ accesskey: L10N.getStr("copySource.accesskey"),
+ disabled: false,
+ },
+ copySourceUri2: {
+ id: "node-menu-copy-source-url",
+ label: L10N.getStr("copySourceUri2"),
+ accesskey: L10N.getStr("copySourceUri2.accesskey"),
+ disabled: false,
+ },
+ toggleBlackBox: {
+ id: "node-menu-blackbox",
+ label: L10N.getStr("ignoreContextItem.ignore"),
+ accesskey: L10N.getStr("ignoreContextItem.ignore.accesskey"),
+ disabled: false,
+ },
+ prettyPrint: {
+ id: "node-menu-pretty-print",
+ label: L10N.getStr("sourceTabs.prettyPrint"),
+ accesskey: L10N.getStr("sourceTabs.prettyPrint.accesskey"),
+ disabled: false,
+ },
+ };
+}
+
+export function isSimilarTab(tab: Tab, url: URL, isOriginal: boolean): boolean {
+ return tab.url === url && tab.isOriginal === isOriginal;
+}
+
+export function persistTabs(tabs: VisibleTab[]): PersistedTab[] {
+ return [...tabs]
+ .filter(tab => tab.url)
+ .map(tab => ({ ...tab, sourceId: null }));
+}