mirror of
https://github.com/zen-browser/desktop.git
synced 2026-01-28 15:46:16 +00:00
feat: Enhance folder creation with split-view groups (#9968)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index d80a66a01002e78a9c65545d08fe786328ddf124..749991884735a1a6d7b1a2c2e1c77f7eae2e5c28 100644
|
||||
index d80a66a01002e78a9c65545d08fe786328ddf124..1c01a1931a2d0b98f2d8f9a3b27e565c1ec15e92 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -422,15 +422,60 @@
|
||||
@@ -718,8 +718,12 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..749991884735a1a6d7b1a2c2e1c77f7e
|
||||
} else if (targetElement) {
|
||||
targetElement.after(element);
|
||||
} else {
|
||||
@@ -6230,7 +6388,7 @@
|
||||
if (!this.isTab(aTab)) {
|
||||
@@ -6227,10 +6385,10 @@
|
||||
* @param {TabMetricsContext} [metricsContext]
|
||||
*/
|
||||
moveTabToGroup(aTab, aGroup, metricsContext) {
|
||||
- if (!this.isTab(aTab)) {
|
||||
+ if (!this.isTab(aTab) && !aTab.hasAttribute('split-view-group')) {
|
||||
throw new Error("Can only move a tab into a tab group");
|
||||
}
|
||||
- if (aTab.pinned) {
|
||||
|
||||
@@ -615,12 +615,26 @@
|
||||
contextMenu.triggerNode &&
|
||||
(contextMenu.triggerNode.tab || contextMenu.triggerNode.closest('tab'));
|
||||
|
||||
tabs.push(triggerTab, ...gBrowser.selectedTabs);
|
||||
const selectedTabs = gBrowser.selectedTabs;
|
||||
if (selectedTabs.length > 1) {
|
||||
tabs.push(triggerTab, ...gBrowser.selectedTabs);
|
||||
} else {
|
||||
tabs.push(triggerTab);
|
||||
}
|
||||
if (isFromToolbar) {
|
||||
tabs = [];
|
||||
}
|
||||
|
||||
const group = this.createFolder(tabs, { insertBefore: triggerTab, renameFolder: true });
|
||||
const canInsertBefore =
|
||||
!triggerTab.hasAttribute('zen-essential') &&
|
||||
!triggerTab?.group?.hasAttribute('split-view-group') &&
|
||||
this.canDropElement({ isZenFolder: true }, triggerTab);
|
||||
|
||||
const group = this.createFolder(tabs, {
|
||||
insertAfter: !canInsertBefore ? triggerTab?.group : null,
|
||||
insertBefore: canInsertBefore ? triggerTab : null,
|
||||
renameFolder: true,
|
||||
});
|
||||
if (!group) return;
|
||||
this.#groupInit(group);
|
||||
}
|
||||
@@ -695,19 +709,25 @@
|
||||
}
|
||||
|
||||
canDropElement(element, targetElement) {
|
||||
if (element?.isZenFolder && targetElement?.group?.level >= ZEN_MAX_SUBFOLDERS) {
|
||||
const isZenFolder = element?.isZenFolder;
|
||||
const level = targetElement?.group?.level + 1;
|
||||
if (isZenFolder && level >= ZEN_MAX_SUBFOLDERS) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
createFolder(tabs = [], options = {}) {
|
||||
for (const tab of tabs) {
|
||||
if (tab.hasAttribute('zen-essential')) return;
|
||||
if (tab.group?.hasAttribute('split-view-group')) return;
|
||||
const filteredTabs = tabs
|
||||
.filter((tab) => !tab.hasAttribute('zen-essential'))
|
||||
.map((tab) => {
|
||||
gBrowser.pinTab(tab);
|
||||
if (tab?.group?.hasAttribute('split-view-group')) {
|
||||
tab = tab.group;
|
||||
}
|
||||
return tab;
|
||||
});
|
||||
|
||||
gBrowser.pinTab(tab);
|
||||
}
|
||||
const workspacePinned = gZenWorkspaces.workspaceElement(
|
||||
options.workspaceId
|
||||
)?.pinnedTabsContainer;
|
||||
@@ -724,7 +744,7 @@
|
||||
_forZenEmptyTab: true,
|
||||
});
|
||||
|
||||
tabs = [emptyTab, ...tabs];
|
||||
tabs = [emptyTab, ...filteredTabs];
|
||||
|
||||
const folder = this._createFolderNode(options);
|
||||
if (options.initialPinId) {
|
||||
|
||||
Reference in New Issue
Block a user