diff --git a/src/_locales/dict.setup-page.ts b/src/_locales/dict.setup-page.ts
index 4b5d924f8..55a1526ea 100644
--- a/src/_locales/dict.setup-page.ts
+++ b/src/_locales/dict.setup-page.ts
@@ -1988,6 +1988,17 @@ You can also set prefixes for each command type for faster navigation. Starting
zh_TW: '折疊全部',
ja: 'すべて折りたたむ',
},
+ 'settings.nav_bar_btn_expand': {
+ en: 'Expand all',
+ de: 'Alle ausklappen',
+ fr: 'Tout déplier',
+ hu: 'Ágak megnyitása',
+ pl: 'Rozwiń wszystko',
+ ru: 'Развернуть все',
+ zh_CN: '展开全部',
+ zh_TW: '展開全部',
+ ja: 'すべて展開する',
+ },
'settings.nav_bar_btn_remute_audio_tabs': {
en: 'Mute/Unmute audible tabs',
de: 'Stumm-/Lautschalten hörbarer Tabs',
diff --git a/src/_locales/dict.sidebar.ts b/src/_locales/dict.sidebar.ts
index 5f6491d68..9cf74b5b2 100644
--- a/src/_locales/dict.sidebar.ts
+++ b/src/_locales/dict.sidebar.ts
@@ -711,6 +711,17 @@ export const sidebarTranslations: Translations = {
zh_TW: '全部折疊',
ja: 'すべて折りたたむ',
},
+ 'nav.btn_expand': {
+ en: 'Expand all',
+ de: 'Alle ausklappen',
+ fr: 'Déplier tout',
+ hu: 'Minden ág megnyitása',
+ pl: 'Rozwiń wszystko',
+ ru: 'Развернуть все',
+ zh_CN: '全部展开',
+ zh_TW: '全部展開',
+ ja: 'すべて展開する',
+ },
'nav.tabs_panel_tooltip_mid_rm_all': {
en: 'Middle click: Close tabs',
de: 'Mittelklick: Schließe Tabs',
diff --git a/src/assets/expand-all.svg b/src/assets/expand-all.svg
new file mode 100644
index 000000000..3735022ef
--- /dev/null
+++ b/src/assets/expand-all.svg
@@ -0,0 +1 @@
+
diff --git a/src/defaults.ts b/src/defaults.ts
index 04832f0c1..2d327f342 100644
--- a/src/defaults.ts
+++ b/src/defaults.ts
@@ -68,6 +68,7 @@ export const BTN_ICONS: Record = {
add_tp: 'icon_add_tabs_panel',
search: 'icon_search',
collapse: 'icon_collapse_all',
+ expand: 'icon_expand_all',
create_snapshot: 'icon_snapshot',
remute_audio_tabs: 'icon_mute',
}
diff --git a/src/defaults/mocks.tabs.fg.ts b/src/defaults/mocks.tabs.fg.ts
index fdcd4c31f..9a0854eac 100644
--- a/src/defaults/mocks.tabs.fg.ts
+++ b/src/defaults/mocks.tabs.fg.ts
@@ -64,7 +64,6 @@ export class MTab implements Tab {
branchColor: null,
customColor: null,
isGroup: false,
- preview: false,
}
sessionData?: TabSessionData | undefined
titleEl?: HTMLElement | undefined
diff --git a/src/defaults/panels.ts b/src/defaults/panels.ts
index a64accf53..21f2872ed 100644
--- a/src/defaults/panels.ts
+++ b/src/defaults/panels.ts
@@ -210,4 +210,5 @@ export const NAV_BTNS_IDS: ID[] = [
'create_snapshot',
'remute_audio_tabs',
'collapse',
+ 'expand',
]
diff --git a/src/enums.ts b/src/enums.ts
index bff7dd078..bf297ba8a 100644
--- a/src/enums.ts
+++ b/src/enums.ts
@@ -109,6 +109,7 @@ export const enum ButtonType {
create_snapshot = 105,
remute_audio_tabs = 106,
collapse = 107,
+ expand = 108,
}
export const enum SpaceType {
diff --git a/src/page.setup/components/settings.navbar.vue b/src/page.setup/components/settings.navbar.vue
index 076aaa6c7..916c846c5 100644
--- a/src/page.setup/components/settings.navbar.vue
+++ b/src/page.setup/components/settings.navbar.vue
@@ -241,7 +241,7 @@ const availableBtns = computed(() => {
// prettier-ignore
const ids = [
'tabs_panel', 'bookmarks_panel', 'history', 'sync', 'sp', 'sd', 'hdn', 'search',
- 'add_tp', 'create_snapshot', 'collapse', 'remute_audio_tabs', 'settings',
+ 'add_tp', 'create_snapshot', 'collapse', 'expand', 'remute_audio_tabs', 'settings',
]
for (const id of ids) {
diff --git a/src/page.setup/setup.html b/src/page.setup/setup.html
index 89e32a581..d9667e407 100644
--- a/src/page.setup/setup.html
+++ b/src/page.setup/setup.html
@@ -84,6 +84,7 @@
svg://src/assets/close.svg#icon_close
svg://src/assets/mute.svg#icon_mute
svg://src/assets/collapse-all.svg#icon_collapse_all
+ svg://src/assets/expand-all.svg#icon_expand_all
svg://src/assets/ctr-include.svg#icon_ctr_include
svg://src/assets/ctr-exclude.svg#icon_ctr_exclude
svg://src/assets/download-in-progress.svg#icon_download_in_progress
diff --git a/src/services/bookmarks.fg.ts b/src/services/bookmarks.fg.ts
index 9d680fb9c..964ac3ef0 100644
--- a/src/services/bookmarks.fg.ts
+++ b/src/services/bookmarks.fg.ts
@@ -977,6 +977,18 @@ export function collapseAllBookmarks(panelId: ID): void {
saveBookmarksTree()
}
+/**
+ * Expand all bookmarks folders
+ */
+export function expandAllBookmarks(panelId: ID): void {
+ const expanded: Record = {}
+ for (const [id, node] of Bookmarks.byId) {
+ if (node.children) expanded[id] = true
+ }
+ Bookmarks.reactive.expanded[panelId] = expanded
+ saveBookmarksTree()
+}
+
/**
* Sort bookmarks
*/
diff --git a/src/services/sidebar.fg.ts b/src/services/sidebar.fg.ts
index 88d6a579d..c27dafafb 100644
--- a/src/services/sidebar.fg.ts
+++ b/src/services/sidebar.fg.ts
@@ -856,6 +856,7 @@ export function recalcPanels(): void {
if (id === 'create_snapshot') continue
if (id === 'remute_audio_tabs') continue
if (id === 'collapse') continue
+ if (id === 'expand') continue
if (id === 'hdn') continue
const panel = panelsById[id]
diff --git a/src/services/tabs.fg.ts b/src/services/tabs.fg.ts
index d3384ec86..eb6419a33 100644
--- a/src/services/tabs.fg.ts
+++ b/src/services/tabs.fg.ts
@@ -1825,6 +1825,14 @@ export function foldAllInactiveBranches(tabs: T.Tab[] = []): void {
}
}
+export function expAllBranches(tabs: T.Tab[] = []): void {
+ for (const tab of tabs) {
+ if (tab.isParent && tab.folded) {
+ expTabsBranch(tab.id, true, true)
+ }
+ }
+}
+
export function activateParent(tabId?: ID): void {
if (!Settings.state.tabsTree) return
if (tabId === undefined) tabId = Tabs.activeId
diff --git a/src/sidebar/components/bar.navigation.vue b/src/sidebar/components/bar.navigation.vue
index 9c8eb61a8..7826f7044 100644
--- a/src/sidebar/components/bar.navigation.vue
+++ b/src/sidebar/components/bar.navigation.vue
@@ -115,6 +115,7 @@ const ButtonTypes: Record = {
add_tp: E.ButtonType.add_tp,
hidden: E.ButtonType.hidden,
collapse: E.ButtonType.collapse,
+ expand: E.ButtonType.expand,
create_snapshot: E.ButtonType.create_snapshot,
remute_audio_tabs: E.ButtonType.remute_audio_tabs,
}
@@ -246,6 +247,7 @@ const nav = computed