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