Skip to content

Commit 7f302df

Browse files
committed
feat: Add the ability to cycle through panels (hidden configurable)
1 parent d74c2f7 commit 7f302df

File tree

8 files changed

+32
-11
lines changed

8 files changed

+32
-11
lines changed

src/_locales/dict.browser.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@
9393
"zh_TW": "切換到下一個面板",
9494
"ja": "次のパネルに切り替え"
9595
},
96+
"KbLoopPanels": {
97+
"en": "Loop trough all panels"
98+
},
9699
"KbPrevPanel": {
97100
"en": "Switch to previous panel",
98101
"de": "Zum vorherigen Panel wechseln",

src/_locales/dict.setup-page.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ export const setupPageTranslations: Translations = {
12021202
en: 'Required for:\n- Cleaning cookies\n- Proxy and URL rules of containers\n- Screenshots for the group page and windows selection panel\n- Changing the User-Agent per container',
12031203
de: 'Benötigt für:\n- Cookies löschen\n- Proxy- und URL-Regeln für Umgebungen\n- Bildschirmfotos für die Gruppenseite und das Fensterauswahlmenü\n- User-Agent per Umgebung ändern',
12041204
hu: 'A következő funkciókhoz szükséges:\n– Sütik törlése\n– A konténerek proxy- és URL-szabályainak beállítása\n– Képernyőképek a csoportoldalhoz és az ablakválasztóhoz\n– Konténerenkénti böngészőazonosító megadása',
1205-
pl: 'Wymagane dla:\n- Czyszczenia ciasteczek\n- Zasady proxy i URL dla kontenerów\n- Zrzuty ekranu dla grup stron i panelu zaznaczenia okna\n- Zmiana User-Agent\'a dla kontenera',
1205+
pl: "Wymagane dla:\n- Czyszczenia ciasteczek\n- Zasady proxy i URL dla kontenerów\n- Zrzuty ekranu dla grup stron i panelu zaznaczenia okna\n- Zmiana User-Agent'a dla kontenera",
12061206
ru: 'Необходимо для:\n- Удаления cookies\n- Прокси и url-правил контейнеров\n- Скриншотов на групповой странице и на панели выбора окна',
12071207
zh_CN:
12081208
'用于:\n- 清除 Cookie\n- 容器的代理和 URL 规则\n- 分组页面和窗口选择面板的缩略图\n- 更改每个容器的用户代理',
@@ -5383,7 +5383,7 @@ Przykłady: "*", "ctrl+$", "ctrl+alt+g"`,
53835383
%Y - Jahr; %M - Monat; %D - Tag; %h - Stunde; %m - Minute; %s - Sekunde`,
53845384
hu: `Megjegyzés: az elérési út a letöltések mappájához képest relatív.
53855385
%Y: év; %M: hónap; %D: nap; %h: óra; %m: perc; %s: másodperc`,
5386-
pl: `Info: Ścieżka jest relatywna do folderu pobrane i Firefox nie pozwala ustawić ścieżki poza nim.
5386+
pl: `Info: Ścieżka jest relatywna do folderu pobrane i Firefox nie pozwala ustawić ścieżki poza nim.
53875387
%Y - rok; %M - miesiąc; %D - dzień; %h - godzina; %m - minuta; %s - sekunda`,
53885388
ru: `Примечание: Путь указывается относительно папки загрузок и Firefox не позволяет устанавливать путь за ее пределами.
53895389
%Y - год; %M - месяц; %D - день; %h - час; %m - минута; %s - секунда`,
@@ -5980,6 +5980,9 @@ Przykłady: "*", "ctrl+$", "ctrl+alt+g"`,
59805980
zh_TW: '切換面板',
59815981
ja: 'パネル間の切り替え',
59825982
},
5983+
'settings.kb_switching_panel.ignore_hidden': {
5984+
en: 'Ignore hidden panels',
5985+
},
59835986
'settings.kb_scroll_active_panel': {
59845987
en: 'Scrolling the active panel',
59855988
de: 'Scrollen des aktiven Panels',

src/defaults/settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ export const DEFAULT_SETTINGS: SettingsState = {
248248

249249
// Keybindings
250250
selectActiveTabFirst: true,
251+
ignoreHiddenPanelsSwitching: false,
251252
}
252253

253254
// prettier-ignore

src/manifest.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@
6464
},
6565
"description": "__MSG_KbOpenSidebarPanel__"
6666
},
67+
"loop_panels": {
68+
"suggested_key": {
69+
"default": "Ctrl+Shift+Space",
70+
"mac": "MacCtrl+Shift+Space"
71+
},
72+
"description": "__MSG_KbLoopPanels__"
73+
},
6774
"next_panel": {
6875
"suggested_key": {
6976
"default": "Alt+Period"
@@ -84,10 +91,6 @@
8491
"description": "__MSG_KbOpenNewTabInCurrPanel__"
8592
},
8693
"new_tab_in_group": {
87-
"suggested_key": {
88-
"default": "Ctrl+Shift+Space",
89-
"mac": "MacCtrl+Shift+Space"
90-
},
9194
"description": "__MSG_KbOpenNewTabAfter__"
9295
},
9396
"new_tab_as_first_child": {

src/page.setup/components/keybindings.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@
1414
section
1515
h2 {{translate('settings.kb_switching_panel')}}
1616
span.header-shadow
17-
KeybindingField.-no-separator(:keybinding="Keybindings.reactive.byName.next_panel")
17+
KeybindingField.-no-separator(:keybinding="Keybindings.reactive.byName.loop_panels")
18+
.sub-fields
19+
ToggleField.-no-separator(
20+
label="settings.kb_switching_panel.ignore_hidden"
21+
v-model:value="Settings.state.ignoreHiddenPanelsSwitching"
22+
@update:value="Settings.saveDebounced(150)")
23+
KeybindingField(:keybinding="Keybindings.reactive.byName.next_panel")
1824
KeybindingField(:keybinding="Keybindings.reactive.byName.prev_panel")
1925
KeybindingField(:keybinding="Keybindings.reactive.byName.switch_to_panel_0")
2026
KeybindingField(:keybinding="Keybindings.reactive.byName.switch_to_panel_1")

src/services/keybindings.actions.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ function onCmd(name: string): void {
111111
if (!kb) kb = Keybindings.reactive.list.find(k => k.name === name)
112112
if (!kb) return
113113

114-
if (name === 'next_panel') Sidebar.switchPanel(1, false, true)
114+
if (name === 'loop_panels')
115+
Sidebar.switchPanel(1, Settings.state.ignoreHiddenPanelsSwitching, true, undefined, true)
116+
else if (name === 'next_panel') Sidebar.switchPanel(1, false, true)
115117
else if (name === 'prev_panel') Sidebar.switchPanel(-1, false, true)
116118
else if (name === 'new_tab_on_panel') onKeyNewTabInPanel()
117119
else if (name === 'new_tab_in_group') onKeyNewTabAfter()

src/services/sidebar.actions.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,7 +1264,8 @@ export function switchPanel(
12641264
dir: 1 | -1,
12651265
ignoreHidden?: boolean,
12661266
withoutTabCreation?: boolean,
1267-
restartDebouncer?: boolean
1267+
restartDebouncer?: boolean,
1268+
shouldLoop?: boolean
12681269
): void {
12691270
// Single panel switch
12701271
const delay = Settings.state.navSwitchPanelsDelay ?? 128
@@ -1285,7 +1286,6 @@ export function switchPanel(
12851286
Selection.resetSelection()
12861287

12871288
const activePanelId = Sidebar.activePanelId
1288-
12891289
// If current active panel is not exist
12901290
let activePanel = Sidebar.panelsById[activePanelId]
12911291
if (!activePanel) {
@@ -1350,6 +1350,7 @@ export function switchPanel(
13501350
else panel = hiddenPanels[hiddenPanels.length - 1]
13511351
newActIsHidden = true
13521352
}
1353+
if (shouldLoop && ignoreHidden) panel = visiblePanels[0]
13531354
break
13541355
}
13551356
if (!panel) break
@@ -1363,9 +1364,10 @@ export function switchPanel(
13631364
if (!panel) {
13641365
if (visiblePanels.length) {
13651366
panel = visiblePanels[dir > 0 ? hdnIndex : hdnIndex - 1]
1366-
if (!panel) break
1367+
if (!panel && !shouldLoop) break
13671368
if (hiddenPanelsPopupIsShown) Sidebar.reactive.hiddenPanelsPopup = false
13681369
newActIsHidden = false
1370+
if (shouldLoop) panel = visiblePanels[0]
13691371
}
13701372
break
13711373
}

src/types/settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,4 +251,5 @@ export interface SettingsState {
251251

252252
// Keybindings
253253
selectActiveTabFirst: boolean
254+
ignoreHiddenPanelsSwitching: boolean
254255
}

0 commit comments

Comments
 (0)