mirror of
https://github.com/zen-browser/desktop
synced 2026-04-25 17:15:00 +02:00
chore: Run lint and fund dependencies, p=#12718
This commit is contained in:
@@ -67,7 +67,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
if (!this.enabled) {
|
||||
return;
|
||||
}
|
||||
this._canLog = Services.prefs.getBoolPref("zen.pinned-tab-manager.debug", false);
|
||||
this._canLog = Services.prefs.getBoolPref(
|
||||
"zen.pinned-tab-manager.debug",
|
||||
false
|
||||
);
|
||||
this.observer = new ZenPinnedTabsObserver();
|
||||
this._initClosePinnedTabShortcut();
|
||||
this._insertItemsIntoTabContextMenu();
|
||||
@@ -97,7 +100,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
}
|
||||
|
||||
onTabIconChanged(tab, url = null) {
|
||||
tab.dispatchEvent(new CustomEvent("ZenTabIconChanged", { bubbles: true, detail: { tab } }));
|
||||
tab.dispatchEvent(
|
||||
new CustomEvent("ZenTabIconChanged", { bubbles: true, detail: { tab } })
|
||||
);
|
||||
if (tab.hasAttribute("zen-essential")) {
|
||||
this.setEssentialTabIcon(tab, url);
|
||||
}
|
||||
@@ -158,7 +163,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
const tab = e.target?.closest("tab");
|
||||
if (e.button === 1 && tab) {
|
||||
await this.onCloseTabShortcut(e, tab, {
|
||||
closeIfPending: Services.prefs.getBoolPref("zen.pinned-tab-manager.wheel-close-if-pending"),
|
||||
closeIfPending: Services.prefs.getBoolPref(
|
||||
"zen.pinned-tab-manager.wheel-close-if-pending"
|
||||
),
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -211,13 +218,13 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
const pinnedTabs = [
|
||||
...new Set(
|
||||
tabs
|
||||
.flatMap((tab) => {
|
||||
.flatMap(tab => {
|
||||
if (tab.group?.hasAttribute("split-view-group")) {
|
||||
return tab.group.tabs;
|
||||
}
|
||||
return tab;
|
||||
})
|
||||
.filter((tab) => tab?.pinned)
|
||||
.filter(tab => tab?.pinned)
|
||||
),
|
||||
];
|
||||
|
||||
@@ -225,7 +232,7 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedTabs = pinnedTabs.filter((tab) => tab.selected);
|
||||
const selectedTabs = pinnedTabs.filter(tab => tab.selected);
|
||||
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
@@ -234,8 +241,13 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
behavior = "unload-switch";
|
||||
}
|
||||
|
||||
if (alwaysUnload && ["close", "reset", "switch", "reset-switch"].includes(behavior)) {
|
||||
behavior = behavior.contains("reset") ? "reset-unload-switch" : "unload-switch";
|
||||
if (
|
||||
alwaysUnload &&
|
||||
["close", "reset", "switch", "reset-switch"].includes(behavior)
|
||||
) {
|
||||
behavior = behavior.contains("reset")
|
||||
? "reset-unload-switch"
|
||||
: "unload-switch";
|
||||
}
|
||||
|
||||
switch (behavior) {
|
||||
@@ -256,19 +268,23 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
// before we used to just ignore it but now we need to fully close
|
||||
// it as well.
|
||||
gZenGlanceManager.manageTabClose(tab.glanceTab);
|
||||
await new Promise((resolve) => {
|
||||
await new Promise(resolve => {
|
||||
let hasRan = false;
|
||||
const onGlanceClose = () => {
|
||||
hasRan = true;
|
||||
resolve();
|
||||
};
|
||||
window.addEventListener("GlanceClose", onGlanceClose, { once: true });
|
||||
window.addEventListener("GlanceClose", onGlanceClose, {
|
||||
once: true,
|
||||
});
|
||||
// Set a timeout to resolve the promise if the event doesn't fire.
|
||||
// We do this to prevent any future issues where glance woudnt close such as
|
||||
// glance requering to ask for permit unload.
|
||||
setTimeout(() => {
|
||||
if (!hasRan) {
|
||||
console.warn("GlanceClose event did not fire within 3 seconds");
|
||||
console.warn(
|
||||
"GlanceClose event did not fire within 3 seconds"
|
||||
);
|
||||
resolve();
|
||||
}
|
||||
}, 3000);
|
||||
@@ -285,11 +301,15 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
await gZenFolders.animateUnloadAll(folderToUnload);
|
||||
}
|
||||
const allAreUnloaded = pinnedTabs.every(
|
||||
(tab) => tab.hasAttribute("pending") && !tab.hasAttribute("zen-essential")
|
||||
tab =>
|
||||
tab.hasAttribute("pending") &&
|
||||
!tab.hasAttribute("zen-essential")
|
||||
);
|
||||
for (const tabItem of pinnedTabs) {
|
||||
if (allAreUnloaded && closeIfPending) {
|
||||
await this.onCloseTabShortcut(event, tabItem, { behavior: "close" });
|
||||
await this.onCloseTabShortcut(event, tabItem, {
|
||||
behavior: "close",
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -323,10 +343,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
if (selectedTab !== gBrowser.selectedTab) {
|
||||
return;
|
||||
}
|
||||
const findNextTab = (direction) =>
|
||||
const findNextTab = direction =>
|
||||
gBrowser.tabContainer.findNextTab(selectedTab, {
|
||||
direction,
|
||||
filter: (tab) => !tab.hidden && !tab.pinned,
|
||||
filter: tab => !tab.hidden && !tab.pinned,
|
||||
});
|
||||
|
||||
let nextTab = findNextTab(1) || findNextTab(-1);
|
||||
@@ -441,8 +461,14 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
// eslint-disable-next-line no-shadow
|
||||
const tab = tabs[i];
|
||||
tab.removeAttribute("zen-essential");
|
||||
if (gZenWorkspaces.workspaceEnabled && gZenWorkspaces.getActiveWorkspaceFromCache().uuid) {
|
||||
tab.setAttribute("zen-workspace-id", gZenWorkspaces.getActiveWorkspaceFromCache().uuid);
|
||||
if (
|
||||
gZenWorkspaces.workspaceEnabled &&
|
||||
gZenWorkspaces.getActiveWorkspaceFromCache().uuid
|
||||
) {
|
||||
tab.setAttribute(
|
||||
"zen-workspace-id",
|
||||
gZenWorkspaces.getActiveWorkspaceFromCache().uuid
|
||||
);
|
||||
}
|
||||
if (unpin) {
|
||||
gBrowser.unpinTab(tab);
|
||||
@@ -500,28 +526,32 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
`);
|
||||
|
||||
document.getElementById("context_pinTab")?.before(element);
|
||||
document.getElementById("context_zen-edit-tab-title").addEventListener("command", (event) => {
|
||||
gZenVerticalTabsManager.renameTabStart(event);
|
||||
});
|
||||
document.getElementById("context_zen-edit-tab-icon").addEventListener("command", () => {
|
||||
const tab = TabContextMenu.contextTab;
|
||||
gZenEmojiPicker.open(tab.iconImage, {
|
||||
emojiAsSVG: true,
|
||||
closeOnSelect: false,
|
||||
allowNone: Boolean(tab.zenStaticIcon),
|
||||
onSelect: (icon) => {
|
||||
if (icon) {
|
||||
tab.zenStaticIcon = icon;
|
||||
} else {
|
||||
delete tab.zenStaticIcon;
|
||||
}
|
||||
gBrowser.setIcon(tab, icon);
|
||||
lazy.TabStateCache.update(tab.permanentKey, {
|
||||
image: null,
|
||||
});
|
||||
},
|
||||
document
|
||||
.getElementById("context_zen-edit-tab-title")
|
||||
.addEventListener("command", event => {
|
||||
gZenVerticalTabsManager.renameTabStart(event);
|
||||
});
|
||||
document
|
||||
.getElementById("context_zen-edit-tab-icon")
|
||||
.addEventListener("command", () => {
|
||||
const tab = TabContextMenu.contextTab;
|
||||
gZenEmojiPicker.open(tab.iconImage, {
|
||||
emojiAsSVG: true,
|
||||
closeOnSelect: false,
|
||||
allowNone: Boolean(tab.zenStaticIcon),
|
||||
onSelect: icon => {
|
||||
if (icon) {
|
||||
tab.zenStaticIcon = icon;
|
||||
} else {
|
||||
delete tab.zenStaticIcon;
|
||||
}
|
||||
gBrowser.setIcon(tab, icon);
|
||||
lazy.TabStateCache.update(tab.permanentKey, {
|
||||
image: null,
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
updatePinnedTabContextMenu(contextTab) {
|
||||
@@ -531,12 +561,16 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
}
|
||||
const isVisible = contextTab.pinned && !contextTab.multiselected;
|
||||
const isEssential = contextTab.getAttribute("zen-essential");
|
||||
const zenAddEssential = document.getElementById("context_zen-add-essential");
|
||||
const zenResetPinnedTab = document.getElementById("context_zen-reset-pinned-tab");
|
||||
const zenAddEssential = document.getElementById(
|
||||
"context_zen-add-essential"
|
||||
);
|
||||
const zenResetPinnedTab = document.getElementById(
|
||||
"context_zen-reset-pinned-tab"
|
||||
);
|
||||
const zenReplacePinnedUrl = document.getElementById(
|
||||
"context_zen-replace-pinned-url-with-current"
|
||||
);
|
||||
[zenResetPinnedTab, zenReplacePinnedUrl].forEach((element) => {
|
||||
[zenResetPinnedTab, zenReplacePinnedUrl].forEach(element => {
|
||||
if (element) {
|
||||
element.hidden = !isVisible;
|
||||
document.l10n.setArgs(element, { isEssential });
|
||||
@@ -548,19 +582,23 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
num: gBrowser._numZenEssentials,
|
||||
max: this.maxEssentialTabs,
|
||||
})
|
||||
.then((badgeText) => {
|
||||
.then(badgeText => {
|
||||
zenAddEssential.setAttribute("badge", badgeText);
|
||||
});
|
||||
document
|
||||
.getElementById("cmd_contextZenAddToEssentials")
|
||||
.setAttribute("disabled", !this.canEssentialBeAdded(contextTab));
|
||||
document.getElementById("context_closeTab").hidden = contextTab.hasAttribute("zen-essential");
|
||||
document.getElementById("context_zen-remove-essential").hidden = !isEssential;
|
||||
document.getElementById("context_closeTab").hidden =
|
||||
contextTab.hasAttribute("zen-essential");
|
||||
document.getElementById("context_zen-remove-essential").hidden =
|
||||
!isEssential;
|
||||
document.getElementById("context_unpinTab").hidden =
|
||||
document.getElementById("context_unpinTab").hidden || isEssential;
|
||||
document.getElementById("context_unpinSelectedTabs").hidden =
|
||||
document.getElementById("context_unpinSelectedTabs").hidden || isEssential;
|
||||
document.getElementById("context_zen-pinned-tab-separator").hidden = !isVisible;
|
||||
document.getElementById("context_unpinSelectedTabs").hidden ||
|
||||
isEssential;
|
||||
document.getElementById("context_zen-pinned-tab-separator").hidden =
|
||||
!isVisible;
|
||||
document.getElementById("context_zen-edit-tab-title").hidden =
|
||||
isEssential ||
|
||||
!Services.prefs.getBoolPref("zen.tabs.rename-tabs") ||
|
||||
@@ -568,12 +606,17 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
}
|
||||
|
||||
// eslint-disable-next-line complexity
|
||||
moveToAnotherTabContainerIfNecessary(event, draggedTab, movingTabs, dropIndex) {
|
||||
moveToAnotherTabContainerIfNecessary(
|
||||
event,
|
||||
draggedTab,
|
||||
movingTabs,
|
||||
dropIndex
|
||||
) {
|
||||
let newIndex = dropIndex;
|
||||
let fromDifferentWindow = false;
|
||||
movingTabs = Array.from(movingTabs || draggedTab)
|
||||
.reverse()
|
||||
.map((tab) => {
|
||||
.map(tab => {
|
||||
if (!gBrowser.isTab(tab)) {
|
||||
return tab;
|
||||
}
|
||||
@@ -582,13 +625,12 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
fromDifferentWindow = true;
|
||||
if (
|
||||
!tab.hasAttribute("zen-essential") &&
|
||||
tab.getAttribute("zen-workspace-id") != gZenWorkspaces.activeWorkspace
|
||||
tab.getAttribute("zen-workspace-id") !=
|
||||
gZenWorkspaces.activeWorkspace
|
||||
) {
|
||||
workspaceId = gZenWorkspaces.activeWorkspace;
|
||||
tab.ownerGlobal.gBrowser.selectedTab = tab.ownerGlobal.gBrowser._findTabToBlurTo(
|
||||
tab,
|
||||
movingTabs
|
||||
);
|
||||
tab.ownerGlobal.gBrowser.selectedTab =
|
||||
tab.ownerGlobal.gBrowser._findTabToBlurTo(tab, movingTabs);
|
||||
tab.ownerGlobal.gZenWorkspaces.moveTabToWorkspace(tab, workspaceId);
|
||||
}
|
||||
// Move the tabs into this window. To avoid multiple tab-switches in
|
||||
@@ -617,14 +659,17 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
const pinnedTabsTarget = event.target.closest(
|
||||
":is(.zen-current-workspace-indicator, .zen-workspace-pinned-tabs-section)"
|
||||
);
|
||||
const essentialTabsTarget = event.target.closest(".zen-essentials-container");
|
||||
const essentialTabsTarget = event.target.closest(
|
||||
".zen-essentials-container"
|
||||
);
|
||||
const tabsTarget = !pinnedTabsTarget;
|
||||
let currentEssenialContainer = gZenWorkspaces.getCurrentEssentialsContainer();
|
||||
let currentEssenialContainer =
|
||||
gZenWorkspaces.getCurrentEssentialsContainer();
|
||||
if (currentEssenialContainer?.essentialsPromo) {
|
||||
currentEssenialContainer.essentialsPromo.remove();
|
||||
}
|
||||
|
||||
movingTabs = movingTabs.filter((tab) =>
|
||||
movingTabs = movingTabs.filter(tab =>
|
||||
gBrowser.isTabGroupLabel(tab) && tab.group?.isZenFolder
|
||||
? !tabsTarget && !essentialTabsTarget
|
||||
: true
|
||||
@@ -651,7 +696,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
let isRegularTabs = false;
|
||||
// Check for essentials container
|
||||
if (essentialTabsTarget) {
|
||||
if (!tab.hasAttribute("zen-essential") && !tab?.group?.hasAttribute("split-view-group")) {
|
||||
if (
|
||||
!tab.hasAttribute("zen-essential") &&
|
||||
!tab?.group?.hasAttribute("split-view-group")
|
||||
) {
|
||||
moved = true;
|
||||
isVertical = false;
|
||||
hasActuallyMoved = this.addToEssentials(tab);
|
||||
@@ -775,7 +823,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
} else {
|
||||
tab.setAttribute("zen-pinned-changed", "true");
|
||||
}
|
||||
tab.style.setProperty("--zen-original-tab-icon", `url(${tab._zenPinnedInitialState.image})`);
|
||||
tab.style.setProperty(
|
||||
"--zen-original-tab-icon",
|
||||
`url(${tab._zenPinnedInitialState.image})`
|
||||
);
|
||||
}
|
||||
|
||||
removeTabContainersDragoverClass(hideIndicator = true) {
|
||||
@@ -796,7 +847,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
}
|
||||
|
||||
get expandedSidebarMode() {
|
||||
return document.documentElement.getAttribute("zen-sidebar-expanded") === "true";
|
||||
return (
|
||||
document.documentElement.getAttribute("zen-sidebar-expanded") === "true"
|
||||
);
|
||||
}
|
||||
|
||||
canEssentialBeAdded(tab) {
|
||||
@@ -823,16 +876,24 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
this.removeTabContainersDragoverClass();
|
||||
return;
|
||||
}
|
||||
const pinnedTabsTarget = event.target.closest(".zen-workspace-pinned-tabs-section");
|
||||
const essentialTabsTarget = event.target.closest(".zen-essentials-container");
|
||||
const tabsTarget = event.target.closest(".zen-workspace-normal-tabs-section");
|
||||
const pinnedTabsTarget = event.target.closest(
|
||||
".zen-workspace-pinned-tabs-section"
|
||||
);
|
||||
const essentialTabsTarget = event.target.closest(
|
||||
".zen-essentials-container"
|
||||
);
|
||||
const tabsTarget = event.target.closest(
|
||||
".zen-workspace-normal-tabs-section"
|
||||
);
|
||||
const folderTarget = event.target.closest("zen-folder");
|
||||
let targetTab = event.target.closest(".tabbrowser-tab");
|
||||
targetTab = targetTab?.group || targetTab;
|
||||
draggedTab = draggedTab?.group?.hasAttribute("split-view-group")
|
||||
? draggedTab.group
|
||||
: draggedTab;
|
||||
const isHoveringIndicator = !!event.target.closest(".zen-current-workspace-indicator");
|
||||
const isHoveringIndicator = !!event.target.closest(
|
||||
".zen-current-workspace-indicator"
|
||||
);
|
||||
if (isHoveringIndicator) {
|
||||
this.removeTabContainersDragoverClass(false);
|
||||
gZenWorkspaces.activeWorkspaceIndicator?.setAttribute("open", true);
|
||||
@@ -848,7 +909,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
|
||||
// Decide whether we should show a dragover class for the given target
|
||||
if (essentialTabsTarget) {
|
||||
if (!draggedTab.hasAttribute("zen-essential") && this.canEssentialBeAdded(draggedTab)) {
|
||||
if (
|
||||
!draggedTab.hasAttribute("zen-essential") &&
|
||||
this.canEssentialBeAdded(draggedTab)
|
||||
) {
|
||||
shouldAddDragOverElement = true;
|
||||
isVertical = false;
|
||||
}
|
||||
@@ -862,7 +926,11 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
}
|
||||
}
|
||||
|
||||
if (!shouldAddDragOverElement || (!targetTab && !folderTarget) || !targetTab) {
|
||||
if (
|
||||
!shouldAddDragOverElement ||
|
||||
(!targetTab && !folderTarget) ||
|
||||
!targetTab
|
||||
) {
|
||||
this.removeTabContainersDragoverClass(!isHoveringIndicator);
|
||||
return;
|
||||
}
|
||||
@@ -885,8 +953,14 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
shouldPlayHapticFeedback = true;
|
||||
}
|
||||
indicator.setAttribute("orientation", "horizontal");
|
||||
indicator.style.setProperty("--indicator-left", rect.left + separation / 2 + "px");
|
||||
indicator.style.setProperty("--indicator-width", rect.width - separation + "px");
|
||||
indicator.style.setProperty(
|
||||
"--indicator-left",
|
||||
rect.left + separation / 2 + "px"
|
||||
);
|
||||
indicator.style.setProperty(
|
||||
"--indicator-width",
|
||||
rect.width - separation + "px"
|
||||
);
|
||||
indicator.style.top = top;
|
||||
indicator.style.removeProperty("left");
|
||||
} else {
|
||||
@@ -903,8 +977,14 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
shouldPlayHapticFeedback = true;
|
||||
}
|
||||
indicator.setAttribute("orientation", "vertical");
|
||||
indicator.style.setProperty("--indicator-top", rect.top + separation / 2 + "px");
|
||||
indicator.style.setProperty("--indicator-height", rect.height - separation + "px");
|
||||
indicator.style.setProperty(
|
||||
"--indicator-top",
|
||||
rect.top + separation / 2 + "px"
|
||||
);
|
||||
indicator.style.setProperty(
|
||||
"--indicator-height",
|
||||
rect.height - separation + "px"
|
||||
);
|
||||
indicator.style.left = left;
|
||||
indicator.style.removeProperty("top");
|
||||
}
|
||||
@@ -915,7 +995,9 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature {
|
||||
}
|
||||
|
||||
onTabLabelChanged(tab) {
|
||||
tab.dispatchEvent(new CustomEvent("ZenTabLabelChanged", { bubbles: true, detail: { tab } }));
|
||||
tab.dispatchEvent(
|
||||
new CustomEvent("ZenTabLabelChanged", { bubbles: true, detail: { tab } })
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user