mirror of
https://github.com/zen-browser/desktop.git
synced 2025-09-05 19:08:18 +00:00
Compare commits
25 Commits
91f5d58fbc
...
new-toolti
Author | SHA1 | Date | |
---|---|---|---|
![]() |
439a27d947 | ||
![]() |
b204671931 | ||
![]() |
d035348896 | ||
![]() |
72433745bc | ||
![]() |
2436ada221 | ||
![]() |
4a5141c15c | ||
![]() |
1015537a91 | ||
![]() |
89cafdaa0b | ||
![]() |
3723517d7d | ||
![]() |
c095bc7604 | ||
![]() |
e312e3fe8d | ||
![]() |
70aeebaf66 | ||
![]() |
f9ca9cc74c | ||
![]() |
d9646f939c | ||
![]() |
8f0292d836 | ||
![]() |
95b137ac13 | ||
![]() |
b1fcaeb97f | ||
![]() |
31def1147a | ||
![]() |
0a80765589 | ||
![]() |
e34a053dd0 | ||
![]() |
5e790efdce | ||
![]() |
005cdf53bd | ||
![]() |
429f74a7c7 | ||
![]() |
1f72765227 | ||
![]() |
91f5e104d2 |
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = إخفاء كليهما
|
||||
.accesskey = خ
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Amaga les dues
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Carpeta nova
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expandeix la barra lateral
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Skrýt obojí
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nová složka
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Zvětšit boční panel
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Skjul begge
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Ny mappe
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Udvid Sidepanel
|
||||
|
@@ -3,7 +3,7 @@ zen-folders-search-placeholder =
|
||||
zen-folders-panel-rename-folder =
|
||||
.label = Ordner umbenennen
|
||||
zen-folders-panel-unpack-folder =
|
||||
.label = Ordner entpacken
|
||||
.label = Ordner auflösen
|
||||
zen-folders-new-subfolder =
|
||||
.label = Neuer Unterordner
|
||||
zen-folders-panel-delete-folder =
|
||||
@@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space =
|
||||
zen-folders-panel-change-icon-folder =
|
||||
.label = Symbol ändern
|
||||
zen-folders-unload-all-tooltip =
|
||||
.tooltiptext = Unload all tabs in this folder
|
||||
.tooltiptext = Alle Tabs in diesem Ordner entladen
|
||||
zen-folders-unload-folder =
|
||||
.label = Unload All Tabs
|
||||
.label = Alle Tabs entladen
|
||||
zen-folders-search-no-results = Keine passenden Tabs gefunden 🤔
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Beide ausblenden
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Neuer Ordner
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Seitenleiste erweitern
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Απόκρυψη όλων
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Νέος φάκελος
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Επέκταση Πλαϊνής στήλης
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -18,7 +18,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
|
||||
sidebar-zen-expand =
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Ocultar ambas
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nueva carpeta
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expandir barra lateral
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Peida mõlemad
|
||||
.accesskey = P
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Laienda külgriba
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Piilota molemmat
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -10,7 +10,7 @@ zen-layout-collapsed-toolbar = Barre d’outils réduite
|
||||
sync-currently-syncing-workspaces = Espaces de travail
|
||||
sync-engine-workspaces =
|
||||
.label = Espaces de travail
|
||||
.tooltiptext = Synchroniser vos espaces de travail sur plusieurs appareils
|
||||
.tooltiptext = Synchroniser vos Espaces de travail sur plusieurs appareils
|
||||
.accesskey = W
|
||||
zen-glance-title = Aperçu
|
||||
zen-glance-header = Paramètres généraux d’Aperçu
|
||||
@@ -69,10 +69,10 @@ zen-pinned-tab-manager-reset-close-shortcut-option =
|
||||
zen-pinned-tab-manager-close-close-shortcut-option =
|
||||
.label = Fermer l’onglet
|
||||
pane-zen-workspaces-header = Espaces de travail
|
||||
zen-settings-workspaces-header = Paramètres généraux des espaces de travail
|
||||
zen-settings-workspaces-description = Avec des espaces de travail, vous pouvez avoir plusieurs sessions de navigation à la fois !
|
||||
zen-settings-workspaces-header = Paramètres généraux des Espaces de travail
|
||||
zen-settings-workspaces-description = Avec les Espaces de travail, vous pouvez avoir plusieurs sessions de navigation à la fois !
|
||||
zen-settings-workspaces-enabled =
|
||||
.label = Activer les espaces de travail
|
||||
.label = Activer les Espaces de travail
|
||||
zen-settings-workspaces-hide-default-container-indicator =
|
||||
.label = Dans la barre d’onglets, masquer l’indicateur de conteneur par défaut
|
||||
zen-key-unsaved = Raccourci non sauvegardé ! Pour l’enregistrer, veuillez le resaisir et en appuyer sur Échap.
|
||||
@@ -128,7 +128,7 @@ pane-zen-marketplace-title = Mods Zen
|
||||
zen-themes-auto-update =
|
||||
.label = Mettre à jour automatiquement les mods installés lors du démarrage
|
||||
zen-settings-workspaces-force-container-tabs-to-workspace =
|
||||
.label = À l'ouverture des onglets du conteneur, basculer vers l’espace de travail où le conteneur est défini par défaut
|
||||
.label = À l'ouverture des onglets du conteneur, basculer vers l’Espace de travail où le conteneur est défini par défaut
|
||||
zen-theme-marketplace-link = Visiter le magasin
|
||||
zen-dark-theme-styles-header = Styles de thème sombre
|
||||
zen-dark-theme-styles-description = Personnalisez le thème sombre selon vos préférences
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Masquer les deux
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nouveau dossier
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Étendre la barre latérale
|
||||
|
@@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space =
|
||||
zen-folders-panel-change-icon-folder =
|
||||
.label = Athraigh Deilbhín
|
||||
zen-folders-unload-all-tooltip =
|
||||
.tooltiptext = Unload all tabs in this folder
|
||||
.tooltiptext = Díluchtaigh gach cluaisín sa bhfillteán seo
|
||||
zen-folders-unload-folder =
|
||||
.label = Unload All Tabs
|
||||
.label = Díluchtaigh Gach Cluaisín
|
||||
zen-folders-search-no-results = Níl aon chluaisíní ann a mheaitseálann an cuardach sin 🤔
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Folaigh an dá cheann
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Fillteán nua
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Barra Taoibh a Leathnú
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = הסתרת שניהם
|
||||
.accesskey = י
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = תיקייה חדשה
|
||||
.label = New Folder
|
||||
.accesskey = מ
|
||||
sidebar-zen-expand =
|
||||
.label = הרחבת סרגל צדדי
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Mindkettő elrejtése
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Új mappa
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Oldalsáv kibontása
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Sembunyikan keduanya
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Folder baru
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Perluas Bilah Sisi
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Nascondi entrambi
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nuova cartella
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Espandi barra laterale
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = 両方隠す
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = サイドバーを展開する
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = 둘 다 숨기기
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = 새 폴더
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = 사이드바 확장
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Slėpti abi
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Naujas aplankas
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Išskleisti šoninę juostą
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Beide verbergen
|
||||
.accesskey = U
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nieuwe map
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Zijbalk uitklappen
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Ukryj oba
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nowy folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Rozwiń panel boczny
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Esconder os dois
|
||||
.accesskey = A
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nova pasta
|
||||
.label = Nova Pasta
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expandir barra lateral
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Ocultar ambas
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Nova pasta
|
||||
.label = Nova Pasta
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expandir Barra Lateral
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Скрыть оба
|
||||
.accesskey = Н
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Новая папка
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Развернуть боковую панель
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Dölj båda
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Hide both
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Expand Sidebar
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = İkisini de Gizle
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Yeni klasör
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Kenar Çubuğunu Genişlet
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Приховувати обидві
|
||||
.accesskey = Н
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Нова тека
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Розгорнути бічну панель
|
||||
|
@@ -97,7 +97,7 @@ zen-theme-disable-all-enabled =
|
||||
.title = Tắt tất cả tùy chỉnh
|
||||
zen-theme-disable-all-disabled =
|
||||
.title = Bật tất cả tùy chỉnh
|
||||
zen-theme-marketplace-description = Tìm và cài đặt tùy chỉnh từ cửa hàng.
|
||||
zen-theme-marketplace-description = Tìm và cài đặt tinh chỉnh từ cửa hàng.
|
||||
zen-theme-marketplace-remove-button =
|
||||
.label = Xóa tùy chỉnh
|
||||
zen-theme-marketplace-check-for-updates-button =
|
||||
@@ -111,7 +111,7 @@ zen-theme-marketplace-import-failure = Có lỗi xảy ra khi nhập các tùy c
|
||||
zen-theme-marketplace-export-success = Các tùy chỉnh được xuất thành công
|
||||
zen-theme-marketplace-export-failure = Có lỗi xảy ra khi xuất các tùy chỉnh
|
||||
zen-theme-marketplace-updates-success = Cập nhật tùy chỉnh thành công
|
||||
zen-theme-marketplace-updates-failure = Không có cập nhật mới
|
||||
zen-theme-marketplace-updates-failure = Không có cập nhật mới!
|
||||
zen-theme-marketplace-toggle-enabled-button =
|
||||
.title = Tắt các tùy chỉnh
|
||||
zen-theme-marketplace-toggle-disabled-button =
|
||||
@@ -126,7 +126,7 @@ zen-theme-marketplace-input-default-placeholder =
|
||||
.placeholder = Gõ gì đó đi...
|
||||
pane-zen-marketplace-title = Zen Mods
|
||||
zen-themes-auto-update =
|
||||
.label = Tự động câmpj nhất các tùy chỉnh khi mở trình duyệt
|
||||
.label = Tự động cập nhật các tùy chỉnh khi mở trình duyệt
|
||||
zen-settings-workspaces-force-container-tabs-to-workspace =
|
||||
.label = Switch to workspace where container is set as default when opening container tabs
|
||||
zen-theme-marketplace-link = Vào cửa hàng
|
||||
@@ -139,7 +139,7 @@ zen-compact-mode-styles-left = Ẩn thanh tab
|
||||
zen-compact-mode-styles-top = Ẩn thanh trên cùng
|
||||
zen-compact-mode-styles-both = Ẩn cả hai
|
||||
zen-urlbar-title = Thanh đường dẫn
|
||||
zen-urlbar-header = Thiệt lập chung cho thanh đường dẫn
|
||||
zen-urlbar-header = Thiết lập chung cho thanh đường dẫn
|
||||
zen-urlbar-description = Tùy chỉnh thanh đường dẫn theo sở thích
|
||||
zen-urlbar-behavior-label = Hành vi thanh đường dẫn
|
||||
zen-urlbar-behavior-normal =
|
||||
@@ -176,7 +176,7 @@ zen-key-quick-restart = Khởi động lại nhanh
|
||||
zen-window-new-shortcut = Cửa sổ mới
|
||||
zen-tab-new-shortcut = Tab mới
|
||||
zen-key-redo = Hoàn tác
|
||||
zen-restore-last-closed-tab-shortcut = Khôi phục lại tab gần nhất đã đóng
|
||||
zen-restore-last-closed-tab-shortcut = Khôi phục lại thẻ gần nhất đã đóng
|
||||
zen-location-open-shortcut = Mở đường dẫn
|
||||
zen-location-open-shortcut-alt = Mở tại (Alt)
|
||||
zen-key-undo-close-window = Mở lại cửa sổ đã đóng
|
||||
|
@@ -3,9 +3,9 @@ zen-folders-search-placeholder =
|
||||
zen-folders-panel-rename-folder =
|
||||
.label = Đổi tên thư mục thẻ
|
||||
zen-folders-panel-unpack-folder =
|
||||
.label = Unpack Folder
|
||||
.label = Giải thoát thư mục
|
||||
zen-folders-new-subfolder =
|
||||
.label = New Subfolder
|
||||
.label = Tạo thư mục con
|
||||
zen-folders-panel-delete-folder =
|
||||
.label = Xóa thư mục thẻ
|
||||
zen-folders-panel-convert-folder-to-space =
|
||||
@@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space =
|
||||
zen-folders-panel-change-icon-folder =
|
||||
.label = Đổi biểu tượng thư mục thẻ
|
||||
zen-folders-unload-all-tooltip =
|
||||
.tooltiptext = Unload all tabs in this folder
|
||||
.tooltiptext = Tải lại tất cả các thẻ trong thư mục
|
||||
zen-folders-unload-folder =
|
||||
.label = Unload All Tabs
|
||||
.label = Tải lại tất cả các thẻ
|
||||
zen-folders-search-no-results = Không có thẻ nào trùng với tìm kiếm 🤔
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = Ẩn cả hai
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = Thư mực thẻ mới
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = Mở rộng thanh bên
|
||||
|
@@ -48,4 +48,4 @@ zen-workspace-creation-profile = Hồ sơ
|
||||
zen-workspace-creation-header = Tạo không gian làm việc
|
||||
zen-workspace-creation-label = Không gian làm việc sẽ là nơi để bạn chứa các trang web và lượt truy cập của bạn.
|
||||
zen-workspaces-delete-workspace-title = Delete Workspace?
|
||||
zen-workspaces-delete-workspace-body = Are you sure you want to delete { $name }? This action cannot be undone.
|
||||
zen-workspaces-delete-workspace-body = Bạn có chắc là bạn muốn xóa { $name }? Thao tác này sẽ không được hoàn lại.
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = 两者都隐藏
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = 新建文件夹
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = 展开侧边栏
|
||||
|
@@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both =
|
||||
.label = 兩者皆隱藏
|
||||
.accesskey = H
|
||||
zen-toolbar-context-new-folder =
|
||||
.label = New folder
|
||||
.label = New Folder
|
||||
.accesskey = N
|
||||
sidebar-zen-expand =
|
||||
.label = 展開側邊欄
|
||||
|
@@ -24,5 +24,4 @@
|
||||
|
||||
- name: zen.injections.match-urls
|
||||
value: 'http://localhost/*'
|
||||
locked: true
|
||||
condition: '!defined(MOZILLA_OFFICIAL)'
|
||||
|
@@ -58,4 +58,3 @@
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenDownloadAnimation.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenEmojiPicker.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWorkspaceCreation.mjs"></script>
|
||||
<script type="text/javascript" src="chrome://browser/content/zen-components/ZenWindowSyncing.mjs"></script>
|
||||
|
@@ -44,7 +44,6 @@
|
||||
content/browser/zen-components/ZenWorkspaceIcons.mjs (../../zen/workspaces/ZenWorkspaceIcons.mjs)
|
||||
content/browser/zen-components/ZenWorkspace.mjs (../../zen/workspaces/ZenWorkspace.mjs)
|
||||
content/browser/zen-components/ZenWorkspaces.mjs (../../zen/workspaces/ZenWorkspaces.mjs)
|
||||
content/browser/zen-components/ZenWindowSyncing.mjs (../../zen/workspaces/ZenWindowSyncing.mjs)
|
||||
content/browser/zen-components/ZenWorkspaceCreation.mjs (../../zen/workspaces/ZenWorkspaceCreation.mjs)
|
||||
content/browser/zen-components/ZenWorkspacesStorage.mjs (../../zen/workspaces/ZenWorkspacesStorage.mjs)
|
||||
content/browser/zen-components/ZenWorkspacesSync.mjs (../../zen/workspaces/ZenWorkspacesSync.mjs)
|
||||
|
@@ -38,7 +38,6 @@
|
||||
<menuseparator />
|
||||
<menuitem id="context_zenFolderUnloadAll" data-l10n-id="zen-folders-unload-folder"/>
|
||||
<menuitem id="context_zenFolderNewSubfolder" data-l10n-id="zen-folders-new-subfolder"/>
|
||||
<menuitem id="context_zenFolderUnpack" data-l10n-id="zen-folders-panel-unpack-folder"/>
|
||||
<menuseparator />
|
||||
<menu id="context_zenChangeFolderSpace"
|
||||
data-l10n-id="zen-folders-panel-change-folder-space">
|
||||
@@ -46,5 +45,6 @@
|
||||
</menu>
|
||||
<menuitem id="context_zenFolderToSpace" data-l10n-id="zen-folders-panel-convert-folder-to-space" />
|
||||
<menuseparator />
|
||||
<menuitem id="context_zenFolderUnpack" data-l10n-id="zen-folders-panel-unpack-folder"/>
|
||||
<menuitem id="context_zenFolderDelete" data-l10n-id="zen-folders-panel-delete-folder"/>
|
||||
</menupopup>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
|
||||
index f9129fb171362e81369056923bf25acbb87d2ad8..924bcd2cd66a5dfcf9c45aac0c63cd0257c21a2c 100644
|
||||
index 66ce978d9b022285dea67fdb75b3c005adb05d9b..db61587570ca18403a82ea6796a756d403cc207e 100644
|
||||
--- a/browser/components/preferences/main.inc.xhtml
|
||||
+++ b/browser/components/preferences/main.inc.xhtml
|
||||
@@ -29,6 +29,9 @@
|
||||
@@ -12,23 +12,17 @@ index f9129fb171362e81369056923bf25acbb87d2ad8..924bcd2cd66a5dfcf9c45aac0c63cd02
|
||||
#ifdef XP_WIN
|
||||
<hbox id="windowsLaunchOnLoginBox" align="center" hidden="true">
|
||||
<checkbox id="windowsLaunchOnLogin"
|
||||
@@ -186,6 +189,7 @@
|
||||
</groupbox>
|
||||
|
||||
@@ -188,7 +191,8 @@
|
||||
<!-- Browser layout -->
|
||||
+#if 0
|
||||
<groupbox data-category="paneGeneral"
|
||||
data-subcategory="layout"
|
||||
hidden="true">
|
||||
@@ -201,6 +205,7 @@
|
||||
preference="sidebar.revamp"/>
|
||||
<description class="indent" data-l10n-id="browser-layout-show-sidebar-desc"></description>
|
||||
</groupbox>
|
||||
+#endif
|
||||
|
||||
<hbox id="languageAndAppearanceCategory"
|
||||
class="subcategory"
|
||||
@@ -421,6 +426,7 @@
|
||||
- hidden="true">
|
||||
+ hidden="true"
|
||||
+ style="display: none !important;">
|
||||
<label><html:h2 data-l10n-id="browser-layout-header"/></label>
|
||||
<radiogroup id="browserLayoutRadioGroup" preference="sidebar.verticalTabs">
|
||||
<radio id="browserLayoutHorizontalTabs" data-l10n-id="browser-layout-horizontal-tabs" value="false"/>
|
||||
@@ -419,6 +423,7 @@
|
||||
languages-customize-add.label,
|
||||
" />
|
||||
</hbox>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
index e954a8df26ed84731b08b151f90a758206946582..5b8013c71c6b50579668d16a5f7d5a82b5d43e4d 100644
|
||||
index e954a8df26ed84731b08b151f90a758206946582..64ab1cce10324d574b49fe861975188c292756c3 100644
|
||||
--- a/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
@@ -2135,7 +2135,6 @@ var SessionStoreInternal = {
|
||||
@@ -143,3 +143,12 @@ index e954a8df26ed84731b08b151f90a758206946582..5b8013c71c6b50579668d16a5f7d5a82
|
||||
|
||||
if (tabData.pinned) {
|
||||
tabbrowser.pinTab(tab);
|
||||
@@ -7266,7 +7289,7 @@ var SessionStoreInternal = {
|
||||
|
||||
let groupsToSave = new Map();
|
||||
for (let tIndex = 0; tIndex < window.tabs.length; ) {
|
||||
- if (window.tabs[tIndex].pinned) {
|
||||
+ if (window.tabs[tIndex].pinned && false) {
|
||||
// Adjust window.selected
|
||||
if (tIndex + 1 < window.selected) {
|
||||
window.selected -= 1;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc58e2af77 100644
|
||||
index d80a66a01002e78a9c65545d08fe786328ddf124..c5c079ac5218f051407b27c6edbd4ba6fe685e62 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -422,15 +422,60 @@
|
||||
@@ -391,10 +391,10 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
+ gZenWorkspaces._initialTab._shouldRemove = true;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
+ else {
|
||||
+ gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab;
|
||||
}
|
||||
+ }
|
||||
+ this._hasAlreadyInitializedZenSessionStore = true;
|
||||
|
||||
if (tabs.length > 1 || !tabs[0].selected) {
|
||||
@@ -623,11 +623,13 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6049,7 +6181,7 @@
|
||||
@@ -6048,8 +6180,8 @@
|
||||
}
|
||||
|
||||
// Don't allow mixing pinned and unpinned tabs.
|
||||
if (this.isTab(element) && element.pinned) {
|
||||
- if (this.isTab(element) && element.pinned) {
|
||||
- tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1);
|
||||
+ if (element.pinned) {
|
||||
+ tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(Math.max(tabIndex, this._numZenEssentials), this.pinnedTabCount - 1);
|
||||
} else {
|
||||
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
|
||||
@@ -651,7 +653,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
|
||||
neighbor.after(element);
|
||||
} else {
|
||||
@@ -6136,22 +6274,23 @@
|
||||
@@ -6136,23 +6274,28 @@
|
||||
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
|
||||
if (this.isTabGroupLabel(targetElement)) {
|
||||
targetElement = targetElement.group;
|
||||
@@ -679,9 +681,14 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
- targetElement = this.tabs[this.pinnedTabCount - 1];
|
||||
+ targetElement = this.tabsWithoutGlance[this.pinnedTabCount - 1];
|
||||
moveBefore = false;
|
||||
+ if (!this.visibleTabs.includes(targetElement)) {
|
||||
+ targetElement = gZenWorkspaces.pinnedTabsContainer.querySelector('.pinned-tabs-container-separator')
|
||||
+ moveBefore = true;
|
||||
+ }
|
||||
} else if (!element.pinned && targetElement && targetElement.pinned) {
|
||||
// If the caller asks to move an unpinned element next to a pinned
|
||||
@@ -6165,14 +6304,34 @@
|
||||
// tab, move the unpinned element to be the first unpinned element
|
||||
@@ -6165,14 +6308,34 @@
|
||||
// move the tab group right before the first unpinned tab.
|
||||
// 4. Moving a tab group and the first unpinned tab is grouped:
|
||||
// move the tab group right before the first unpinned tab's tab group.
|
||||
@@ -717,7 +724,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
element.pinned
|
||||
? this.tabContainer.pinnedTabsContainer
|
||||
: this.tabContainer;
|
||||
@@ -6181,7 +6340,7 @@
|
||||
@@ -6181,7 +6344,7 @@
|
||||
element,
|
||||
() => {
|
||||
if (moveBefore) {
|
||||
@@ -726,7 +733,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
} else if (targetElement) {
|
||||
targetElement.after(element);
|
||||
} else {
|
||||
@@ -6227,10 +6386,10 @@
|
||||
@@ -6227,10 +6390,10 @@
|
||||
* @param {TabMetricsContext} [metricsContext]
|
||||
*/
|
||||
moveTabToGroup(aTab, aGroup, metricsContext) {
|
||||
@@ -739,7 +746,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
return;
|
||||
}
|
||||
if (aTab.group && aTab.group.id === aGroup.id) {
|
||||
@@ -6324,6 +6483,10 @@
|
||||
@@ -6324,6 +6487,10 @@
|
||||
|
||||
moveActionCallback();
|
||||
|
||||
@@ -750,7 +757,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
// Clear tabs cache after moving nodes because the order of tabs may have
|
||||
// changed.
|
||||
this.tabContainer._invalidateCachedTabs();
|
||||
@@ -7221,7 +7384,7 @@
|
||||
@@ -7221,7 +7388,7 @@
|
||||
// preventDefault(). It will still raise the window if appropriate.
|
||||
break;
|
||||
}
|
||||
@@ -759,7 +766,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
window.focus();
|
||||
aEvent.preventDefault();
|
||||
break;
|
||||
@@ -8166,6 +8329,7 @@
|
||||
@@ -8166,6 +8333,7 @@
|
||||
aWebProgress.isTopLevel
|
||||
) {
|
||||
this.mTab.setAttribute("busy", "true");
|
||||
@@ -767,7 +774,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
gBrowser._tabAttrModified(this.mTab, ["busy"]);
|
||||
this.mTab._notselectedsinceload = !this.mTab.selected;
|
||||
}
|
||||
@@ -9157,7 +9321,7 @@ var TabContextMenu = {
|
||||
@@ -9157,7 +9325,7 @@ var TabContextMenu = {
|
||||
);
|
||||
contextUnpinSelectedTabs.hidden =
|
||||
!this.contextTab.pinned || !this.multiselected;
|
||||
@@ -776,7 +783,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc
|
||||
// Build Ask Chat items
|
||||
TabContextMenu.GenAI.buildTabMenu(
|
||||
document.getElementById("context_askChat"),
|
||||
@@ -9476,6 +9640,7 @@ var TabContextMenu = {
|
||||
@@ -9476,6 +9644,7 @@ var TabContextMenu = {
|
||||
)
|
||||
);
|
||||
} else {
|
||||
|
@@ -1,8 +1,24 @@
|
||||
diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css
|
||||
index ba7642c9264ac201fec7be1bd492bc778bb147a2..9e89735e8a0886183ae7ecf98e6ce08142bf3bbc 100644
|
||||
index ba7642c9264ac201fec7be1bd492bc778bb147a2..f0e02bcc000f106e186b3123ada96b4cbf83b40f 100644
|
||||
--- a/toolkit/content/xul.css
|
||||
+++ b/toolkit/content/xul.css
|
||||
@@ -456,7 +456,8 @@ deck > *|*:not(:-moz-native-anonymous) {
|
||||
@@ -401,6 +401,15 @@ tooltip {
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ border-radius: 16px !important;
|
||||
+ border-top-left-radius: 4px !important;
|
||||
+ border: 1px solid rgba(225, 225, 225, 0.15) !important;
|
||||
+ padding: 5px 9px 6px 9px !important;
|
||||
+ font-weight: 600 !important;
|
||||
+ background: color-mix(in srgb, var(--zen-primary-color, white), black 80%) !important;
|
||||
+ color: #f3f3f3 !important;
|
||||
+ font-size: smaller !important;
|
||||
}
|
||||
|
||||
/******** tree ******/
|
||||
@@ -456,7 +465,8 @@ deck > *|*:not(:-moz-native-anonymous) {
|
||||
}
|
||||
|
||||
tabpanels > .deck-selected,
|
||||
|
@@ -228,3 +228,19 @@ body > #confetti {
|
||||
linear-gradient(#fff 0 0);
|
||||
mask-composite: exclude;
|
||||
}
|
||||
|
||||
/* Status panel */
|
||||
|
||||
#statuspanel {
|
||||
padding: 4px 3px;
|
||||
|
||||
& > #statuspanel-label {
|
||||
border-radius: 16px !important;
|
||||
border: 1px solid rgba(225, 225, 225, 0.15) !important;
|
||||
padding: 5px 9px 6px 9px !important;
|
||||
font-weight: 600 !important;
|
||||
background: color-mix(in srgb, var(--zen-primary-color), black 80%) !important;
|
||||
color: #f3f3f3 !important;
|
||||
font-size: smaller !important;
|
||||
}
|
||||
}
|
||||
|
@@ -139,7 +139,7 @@
|
||||
}
|
||||
|
||||
rename() {
|
||||
if (!gZenVerticalTabsManager._hasSetSingleToolbar) {
|
||||
if (!document.documentElement.hasAttribute('zen-sidebar-expanded')) {
|
||||
return;
|
||||
}
|
||||
gZenVerticalTabsManager.renameTabStart({
|
||||
@@ -149,6 +149,12 @@
|
||||
}
|
||||
|
||||
createSubfolder() {
|
||||
// We need to expand all parent folders
|
||||
let currentFolder = this;
|
||||
do {
|
||||
currentFolder.collapsed = false;
|
||||
currentFolder = currentFolder.group;
|
||||
} while (currentFolder);
|
||||
gZenFolders.createFolder([], {
|
||||
renameFolder: !gZenUIManager.testingEnabled,
|
||||
label: 'Subfolder',
|
||||
|
@@ -231,7 +231,7 @@
|
||||
}
|
||||
|
||||
if (group.collapsed && !this._sessionRestoring) {
|
||||
group.collapsed = false;
|
||||
group.collapsed = group.hasAttribute('has-active');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -270,6 +270,7 @@
|
||||
gBrowser.pinTab(tab);
|
||||
group.addTabs([tab]);
|
||||
} else {
|
||||
tab._ignoreUngrouped = true;
|
||||
// Otherwise, we must move it to the first tab since it was added in an unpinned state
|
||||
gZenWorkspaces._emptyTab.after(tab);
|
||||
gBrowser.tabContainer._invalidateCachedTabs();
|
||||
@@ -279,6 +280,10 @@
|
||||
on_TabUngrouped(event) {
|
||||
const tab = event.detail;
|
||||
const group = event.target;
|
||||
if (tab._ignoreUngrouped) {
|
||||
delete tab._ignoreUngrouped;
|
||||
return;
|
||||
}
|
||||
tab.removeAttribute('folder-active');
|
||||
if (group.hasAttribute('split-view-group') && tab.hasAttribute('had-zen-pinned-changed')) {
|
||||
tab.setAttribute('zen-pinned-changed', true);
|
||||
@@ -291,7 +296,7 @@
|
||||
if (!folder.activeTabs.length) {
|
||||
folder.removeAttribute('has-active');
|
||||
}
|
||||
this.collapseVisibleTab(folder);
|
||||
this.collapseVisibleTab(folder, true);
|
||||
this.updateFolderIcon(folder, 'close', false);
|
||||
}
|
||||
}
|
||||
@@ -618,7 +623,23 @@
|
||||
let activeGroup = folders.get(group?.id);
|
||||
// If group has active tabs, we need to update the indentation
|
||||
if (activeGroup) {
|
||||
this.on_TabGroupCollapse({ target: activeGroup });
|
||||
const activeGroupStart = activeGroup.querySelector('.zen-tab-group-start');
|
||||
const selectedTabs = activeGroup.activeTabs;
|
||||
if (selectedTabs.length > 0) {
|
||||
const selectedItem = selectedTabs[0];
|
||||
const isSplitView = selectedItem.group?.hasAttribute('split-view-group');
|
||||
const selectedContainer = isSplitView ? selectedItem.group : selectedItem;
|
||||
|
||||
const heightUntilSelected =
|
||||
window.windowUtils.getBoundsWithoutFlushing(selectedContainer).top -
|
||||
window.windowUtils.getBoundsWithoutFlushing(activeGroupStart).bottom;
|
||||
|
||||
const adjustedHeight = isSplitView
|
||||
? heightUntilSelected - 2
|
||||
: heightUntilSelected;
|
||||
activeGroupStart.style.marginTop =
|
||||
-(adjustedHeight + 4 * (selectedTabs.length === 0 ? 1 : 0)) + 'px';
|
||||
}
|
||||
this.setFolderIndentation([tab], activeGroup, /* for collapse = */ true);
|
||||
} else {
|
||||
// Since the folder is now expanded, we should remove active attribute
|
||||
@@ -745,9 +766,11 @@
|
||||
const workspaceElement = gZenWorkspaces.workspaceElement(workspaceId);
|
||||
const pinnedTabsContainer = workspaceElement.pinnedTabsContainer;
|
||||
pinnedTabsContainer.insertBefore(folder, pinnedTabsContainer.lastChild);
|
||||
folder.setAttribute('zen-workspace-id', workspaceId);
|
||||
for (const tab of folder.tabs) {
|
||||
tab.setAttribute('zen-workspace-id', workspaceId);
|
||||
// This sets the ID for the current folder and any sub-folder
|
||||
// we may encounter
|
||||
tab.group.setAttribute('zen-workspace-id', workspaceId);
|
||||
gBrowser.TabStateFlusher.flush(tab.linkedBrowser);
|
||||
if (gZenWorkspaces._lastSelectedWorkspaceTabs[workspaceId] === tab) {
|
||||
// This tab is no longer the last selected tab in the previous workspace because it's being moved to a new workspace
|
||||
@@ -755,7 +778,9 @@
|
||||
}
|
||||
}
|
||||
folder.dispatchEvent(new CustomEvent('ZenFolderChangedWorkspace', { bubbles: true }));
|
||||
gZenWorkspaces.changeWorkspaceWithID(workspaceId);
|
||||
gZenWorkspaces.changeWorkspaceWithID(workspaceId).then(() => {
|
||||
gBrowser.moveTabTo(folder, { elementIndex: 0, forceUngrouped: true });
|
||||
});
|
||||
}
|
||||
|
||||
canDropElement(element, targetElement) {
|
||||
@@ -1034,9 +1059,7 @@
|
||||
// We don't need to do anything if the URL is invalid. e.g. about:blank
|
||||
}
|
||||
let tabLabel = tab.label || '';
|
||||
let iconURL =
|
||||
gBrowser.getIcon(tab) ||
|
||||
"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100'%3E%3C/svg%3E";
|
||||
let iconURL = gBrowser.getIcon(tab) || PlacesUtils.favicons.defaultFavicon;
|
||||
|
||||
icon.src = iconURL;
|
||||
|
||||
@@ -1290,6 +1313,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
if (group.activeTabs.length === 0) {
|
||||
group.removeAttribute('has-active');
|
||||
this.updateFolderIcon(group, 'close', false);
|
||||
}
|
||||
|
||||
this.on_TabGroupExpand({ target: group, forExpandVisible: true });
|
||||
|
||||
gBrowser.tabContainer._invalidateCachedVisibleTabs();
|
||||
|
@@ -620,6 +620,11 @@
|
||||
this.animatingFullOpen = true;
|
||||
this.#currentTab.setAttribute('zen-dont-split-glance', true);
|
||||
|
||||
const isZenFolder = this.#currentParentTab?.group?.isZenFolder;
|
||||
if (Services.prefs.getBoolPref('zen.folders.owned-tabs-in-folder') && isZenFolder) {
|
||||
gBrowser.pinTab(this.#currentTab);
|
||||
}
|
||||
|
||||
gBrowser.moveTabAfter(this.#currentTab, this.#currentParentTab);
|
||||
|
||||
const browserRect = window.windowUtils.getBoundsWithoutFlushing(this.browserWrapper);
|
||||
@@ -710,6 +715,10 @@
|
||||
const currentTab = this.#currentTab;
|
||||
const currentParentTab = this.#currentParentTab;
|
||||
|
||||
const isZenFolder = currentParentTab?.group?.isZenFolder;
|
||||
if (Services.prefs.getBoolPref('zen.folders.owned-tabs-in-folder') && isZenFolder) {
|
||||
gBrowser.pinTab(currentTab);
|
||||
}
|
||||
await this.fullyOpenGlance({ forSplit: true });
|
||||
gZenViewSplitter.splitTabs([currentTab, currentParentTab], 'vsep', 1);
|
||||
const browserContainer = currentTab.linkedBrowser?.closest('.browserSidebarContainer');
|
||||
|
@@ -92,7 +92,6 @@
|
||||
}
|
||||
|
||||
onTabIconChanged(tab, url = null) {
|
||||
tab.dispatchEvent(new CustomEvent('ZenTabIconChanged', { bubbles: true, detail: { tab } }));
|
||||
const iconUrl = url ?? tab.iconImage.src;
|
||||
if (!iconUrl && tab.hasAttribute('zen-pin-id')) {
|
||||
try {
|
||||
@@ -191,6 +190,7 @@
|
||||
async #initializePinnedTabs(init = false) {
|
||||
const pins = this._pinsCache;
|
||||
if (!pins?.length || !init) {
|
||||
this.#hasInitializedPins = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -373,12 +373,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
gBrowser._updateTabBarForPinnedTabs();
|
||||
gZenUIManager.updateTabsToolbar();
|
||||
|
||||
setTimeout(() => {
|
||||
this.#hasInitializedPins = true;
|
||||
}, 0);
|
||||
|
||||
gBrowser._updateTabBarForPinnedTabs();
|
||||
gZenUIManager.updateTabsToolbar();
|
||||
}
|
||||
|
||||
_onPinnedTabEvent(action, event) {
|
||||
@@ -446,6 +446,18 @@
|
||||
group._pPos
|
||||
);
|
||||
group.setAttribute('zen-pin-id', id);
|
||||
for (const tab of group.tabs) {
|
||||
// Only add it if the tab is directly under the group
|
||||
if (
|
||||
tab.pinned &&
|
||||
tab.hasAttribute('zen-pin-id') &&
|
||||
tab.group === group &&
|
||||
this.#hasInitializedPins
|
||||
) {
|
||||
const tabPinId = tab.getAttribute('zen-pin-id');
|
||||
await ZenPinnedTabsStorage.addTabToGroup(tabPinId, id, /* position */ tab._pPos);
|
||||
}
|
||||
}
|
||||
await this.refreshPinnedTabs();
|
||||
}
|
||||
|
||||
@@ -727,6 +739,10 @@
|
||||
const existingPin = this._pinsCache.find((p) => p.uuid === pin.uuid);
|
||||
if (existingPin) {
|
||||
Object.assign(existingPin, pin);
|
||||
} else {
|
||||
// We shouldn't need it, but just in case there's
|
||||
// a race condition while making new pinned tabs.
|
||||
this._pinsCache.push(pin);
|
||||
}
|
||||
await ZenPinnedTabsStorage.savePin(pin, notifyObservers);
|
||||
}
|
||||
@@ -1437,7 +1453,6 @@
|
||||
}
|
||||
|
||||
async onTabLabelChanged(tab) {
|
||||
tab.dispatchEvent(new CustomEvent('ZenTabLabelChanged', { detail: { tab } }));
|
||||
if (!this._pinsCache) {
|
||||
return;
|
||||
}
|
||||
|
@@ -137,7 +137,7 @@
|
||||
document.getElementById('zen-welcome-pages').style.display = 'flex';
|
||||
document.getElementById('zen-welcome-start').remove();
|
||||
window.maximize();
|
||||
animate('#zen-welcome-pages', { opacity: [0, 1] }, { delay: 0.2, duration: 0.2 });
|
||||
animate('#zen-welcome-pages', { opacity: [0, 1] }, { delay: 0.2, duration: 0.1 });
|
||||
}
|
||||
|
||||
async fadeInTitles(page) {
|
||||
@@ -238,7 +238,7 @@
|
||||
delay: getMotion().stagger(0.05, { startDelay: 0.3 }),
|
||||
type: 'spring',
|
||||
bounce: 0,
|
||||
duration: 0.2,
|
||||
duration: 0.1,
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -271,7 +271,7 @@
|
||||
await animate('#zen-welcome-page-content', { x: [0, '100%'] }, { bounce: 0 });
|
||||
document.getElementById('zen-welcome-page-content').remove();
|
||||
await this.animHeart();
|
||||
this._pinRemainingTabs();
|
||||
await this.#pinRemainingTabs();
|
||||
await animate('#zen-welcome-pages', { opacity: [1, 0] });
|
||||
document.getElementById('zen-welcome').remove();
|
||||
document.documentElement.removeAttribute('zen-welcome-stage');
|
||||
@@ -288,10 +288,13 @@
|
||||
gZenUIManager.showToast('zen-welcome-finished');
|
||||
}
|
||||
|
||||
_pinRemainingTabs() {
|
||||
async #pinRemainingTabs() {
|
||||
for (const tab of _tabsToPin) {
|
||||
tab.setAttribute('zen-workspace-id', gZenWorkspaces.activeWorkspace);
|
||||
gBrowser.pinTab(tab);
|
||||
await new Promise((resolve) => {
|
||||
tab.addEventListener('ZenPinnedTabCreated', resolve, { once: true });
|
||||
});
|
||||
}
|
||||
for (const tab of _tabsToPinEssentials) {
|
||||
tab.removeAttribute('pending'); // Make it appear loaded
|
||||
|
@@ -1,257 +0,0 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
{
|
||||
class nsZenWorkspaceWindowSync extends nsZenMultiWindowFeature {
|
||||
#ignoreNextEvents = false;
|
||||
#waitForPromise = null;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
if (!window.closed) {
|
||||
this.init();
|
||||
}
|
||||
}
|
||||
|
||||
async init() {
|
||||
await gZenWorkspaces.promiseInitialized;
|
||||
this.#makeSureAllTabsHaveIds();
|
||||
this.#setUpEventListeners();
|
||||
}
|
||||
|
||||
#makeSureAllTabsHaveIds() {
|
||||
const allTabs = gZenWorkspaces.allStoredTabs;
|
||||
for (const tab of allTabs) {
|
||||
if (!tab.hasAttribute('zen-sync-id')) {
|
||||
const tabId = gZenUIManager.generateUuidv4();
|
||||
tab.setAttribute('zen-sync-id', tabId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#setUpEventListeners() {
|
||||
const kEvents = [
|
||||
'TabClose',
|
||||
'TabOpen',
|
||||
'TabPinned',
|
||||
'TabUnpinned',
|
||||
'TabAddedToEssentials',
|
||||
'TabRemovedFromEssentials',
|
||||
'TabHide',
|
||||
'TabShow',
|
||||
'TabMove',
|
||||
'ZenTabIconChanged',
|
||||
'ZenTabLabelChanged',
|
||||
];
|
||||
const eventListener = this.#handleEvent.bind(this);
|
||||
for (const event of kEvents) {
|
||||
window.addEventListener(event, eventListener);
|
||||
}
|
||||
|
||||
window.addEventListener('unload', () => {
|
||||
for (const event of kEvents) {
|
||||
window.removeEventListener(event, eventListener);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#handleEvent(event) {
|
||||
this.#propagateToOtherWindows(event);
|
||||
}
|
||||
|
||||
async #propagateToOtherWindows(event) {
|
||||
if (this.#ignoreNextEvents) {
|
||||
return;
|
||||
}
|
||||
if (this.#waitForPromise) {
|
||||
await this.#waitForPromise;
|
||||
}
|
||||
this.#waitForPromise = new Promise((resolve) => {
|
||||
this.foreachWindowAsActive(async (browser) => {
|
||||
if (browser.gZenWorkspaceWindowSync && !this.windowIsActive(browser)) {
|
||||
await browser.gZenWorkspaceWindowSync.onExternalTabEvent(event);
|
||||
}
|
||||
}).then(() => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async onExternalTabEvent(event) {
|
||||
this.#ignoreNextEvents = true;
|
||||
switch (event.type) {
|
||||
case 'TabClose':
|
||||
this.#onTabClose(event);
|
||||
break;
|
||||
case 'TabOpen':
|
||||
await this.#onTabOpen(event);
|
||||
break;
|
||||
case 'TabPinned':
|
||||
this.#onTabPinned(event);
|
||||
break;
|
||||
case 'TabUnpinned':
|
||||
this.#onTabUnpinned(event);
|
||||
break;
|
||||
case 'TabAddedToEssentials':
|
||||
this.#onTabAddedToEssentials(event);
|
||||
break;
|
||||
case 'TabRemovedFromEssentials':
|
||||
this.#onTabRemovedFromEssentials(event);
|
||||
break;
|
||||
case 'TabHide':
|
||||
this.#onTabHide(event);
|
||||
break;
|
||||
case 'TabShow':
|
||||
this.#onTabShow(event);
|
||||
break;
|
||||
case 'TabMove':
|
||||
this.#onTabMove(event);
|
||||
break;
|
||||
case 'ZenTabIconChanged':
|
||||
this.#onTabIconChanged(event);
|
||||
break;
|
||||
case 'ZenTabLabelChanged':
|
||||
this.#onTabLabelChanged(event);
|
||||
break;
|
||||
default:
|
||||
console.warn(`Unhandled event type: ${event.type}`);
|
||||
break;
|
||||
}
|
||||
this.#ignoreNextEvents = false;
|
||||
}
|
||||
|
||||
#getTabId(tab) {
|
||||
return tab.getAttribute('zen-sync-id');
|
||||
}
|
||||
|
||||
#getTabWithId(tabId) {
|
||||
for (const tab of gZenWorkspaces.allStoredTabs) {
|
||||
if (this.#getTabId(tab) === tabId) {
|
||||
return tab;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
#onTabClose(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToClose = this.#getTabWithId(tabId);
|
||||
if (tabToClose) {
|
||||
gBrowser.removeTab(tabToClose);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabPinned(event) {
|
||||
const targetTab = event.target;
|
||||
if (targetTab.hasAttribute('zen-essential')) {
|
||||
return this.#onTabAddedToEssentials(event);
|
||||
}
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const elementIndex = targetTab.elementIndex;
|
||||
const tabToPin = this.#getTabWithId(tabId);
|
||||
if (tabToPin) {
|
||||
gBrowser.pinTab(tabToPin);
|
||||
gBrowser.moveTabTo(tabToPin, { elementIndex, forceUngrouped: !!targetTab.group });
|
||||
}
|
||||
}
|
||||
|
||||
#onTabUnpinned(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToUnpin = this.#getTabWithId(tabId);
|
||||
if (tabToUnpin) {
|
||||
gBrowser.unpinTab(tabToUnpin);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabIconChanged(event) {
|
||||
this.#updateTabIconAndLabel(event);
|
||||
}
|
||||
|
||||
#onTabLabelChanged(event) {
|
||||
this.#updateTabIconAndLabel(event);
|
||||
}
|
||||
|
||||
#updateTabIconAndLabel(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToChange = this.#getTabWithId(tabId);
|
||||
if (tabToChange && tabToChange.hasAttribute('pending')) {
|
||||
gBrowser.setIcon(tabToChange, gBrowser.getIcon(targetTab));
|
||||
gBrowser._setTabLabel(tabToChange, targetTab.label);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabAddedToEssentials(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToAdd = this.#getTabWithId(tabId);
|
||||
if (tabToAdd) {
|
||||
gZenPinnedTabManager.addToEssentials(tabToAdd);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabRemovedFromEssentials(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToRemove = this.#getTabWithId(tabId);
|
||||
if (tabToRemove) {
|
||||
gZenPinnedTabManager.removeFromEssentials(tabToRemove);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabHide(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToHide = this.#getTabWithId(tabId);
|
||||
if (tabToHide) {
|
||||
gBrowser.hideTab(tabToHide);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabShow(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabToShow = this.#getTabWithId(tabId);
|
||||
if (tabToShow) {
|
||||
gBrowser.showTab(tabToShow);
|
||||
}
|
||||
}
|
||||
|
||||
#onTabMove(event) {
|
||||
const targetTab = event.target;
|
||||
const tabId = this.#getTabId(targetTab);
|
||||
const tabIndex = targetTab._pPos;
|
||||
const tabToMove = this.#getTabWithId(tabId);
|
||||
if (tabToMove) {
|
||||
gBrowser.moveTabTo(tabToMove, { tabIndex, forceUngrouped: !!targetTab.group });
|
||||
}
|
||||
}
|
||||
|
||||
async #onTabOpen(event) {
|
||||
const targetTab = event.target;
|
||||
const isPinned = targetTab.pinned;
|
||||
const isEssential = isPinned && targetTab.hasAttribute('zen-essential');
|
||||
const elementIndex = targetTab.elementIndex;
|
||||
|
||||
const duplicatedTab = gBrowser.addTrustedTab(targetTab.linkedBrowser.currentURI.spec, {
|
||||
createLazyBrowser: true,
|
||||
});
|
||||
|
||||
duplicatedTab.setAttribute('zen-pin-id', targetTab.getAttribute('zen-pin-id'));
|
||||
duplicatedTab.setAttribute('zen-tab-id', targetTab.getAttribute('zen-tab-id'));
|
||||
duplicatedTab.setAttribute('zen-workspace-id', targetTab.getAttribute('zen-workspace-id'));
|
||||
|
||||
if (isEssential) {
|
||||
gZenPinnedTabManager.addToEssentials(duplicatedTab);
|
||||
} else if (isPinned) {
|
||||
gBrowser.pinTab(duplicatedTab);
|
||||
}
|
||||
|
||||
gBrowser.moveTabTo(duplicatedTab, { elementIndex, forceUngrouped: !!targetTab.group });
|
||||
}
|
||||
}
|
||||
|
||||
window.gZenWorkspaceWindowSync = new nsZenWorkspaceWindowSync();
|
||||
}
|
@@ -478,7 +478,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
|
||||
return this.getEssentialsSection(currentWorkspace?.containerTabId);
|
||||
}
|
||||
|
||||
async _createWorkspaceTabsSection(workspace, tabs) {
|
||||
async _createWorkspaceTabsSection(workspace, tabs = []) {
|
||||
const workspaceWrapper = document.createXULElement('zen-workspace');
|
||||
const container = document.getElementById('tabbrowser-arrowscrollbox');
|
||||
workspaceWrapper.id = workspace.uuid;
|
||||
@@ -1354,6 +1354,12 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
|
||||
detail: { activeIndex: browser.gZenWorkspaces.activeWorkspace },
|
||||
})
|
||||
);
|
||||
for (const workspace of workspaces.workspaces) {
|
||||
// Add workspace elements if they dont exist on other windows
|
||||
if (!browser.gZenWorkspaces.workspaceElement(workspace.uuid)) {
|
||||
await browser.gZenWorkspaces._createWorkspaceTabsSection(workspace);
|
||||
}
|
||||
}
|
||||
}
|
||||
await browser.gZenWorkspaces.workspaceBookmarks();
|
||||
if (!ignoreStrip) {
|
||||
@@ -1499,7 +1505,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
|
||||
return true;
|
||||
}
|
||||
|
||||
_prepareNewWorkspace(window) {
|
||||
#prepareNewWorkspace(window) {
|
||||
document.documentElement.setAttribute('zen-workspace-id', window.uuid);
|
||||
let tabCount = 0;
|
||||
for (let tab of gBrowser.tabs) {
|
||||
@@ -1535,7 +1541,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
|
||||
|
||||
async changeWorkspaceWithID(workspaceID, ...args) {
|
||||
const workspace = this.getWorkspaceFromId(workspaceID);
|
||||
return await this.changeWorkspace(workspace, ...args);
|
||||
await this.changeWorkspace(workspace, ...args);
|
||||
}
|
||||
|
||||
async changeWorkspace(workspace, ...args) {
|
||||
@@ -1618,7 +1624,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
|
||||
}
|
||||
|
||||
#fixTabPositions() {
|
||||
gBrowser.tabContainer._invalidateCachedTabs();
|
||||
this.tabContainer._invalidateCachedTabs();
|
||||
// Fix tabs _tPos values relative to the actual order
|
||||
const tabs = gBrowser.tabs;
|
||||
const usedGroups = new Set();
|
||||
@@ -2320,7 +2326,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature {
|
||||
containerTabId,
|
||||
};
|
||||
if (moveTabs) {
|
||||
this._prepareNewWorkspace(workspace);
|
||||
this.#prepareNewWorkspace(workspace);
|
||||
await this._createWorkspaceTabsSection(workspace, tabs);
|
||||
await this._organizeWorkspaceStripLocations(workspace);
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@
|
||||
"brandShortName": "Zen",
|
||||
"brandFullName": "Zen Browser",
|
||||
"release": {
|
||||
"displayVersion": "1.15.1b",
|
||||
"displayVersion": "1.15.2b",
|
||||
"github": {
|
||||
"repo": "zen-browser/desktop"
|
||||
},
|
||||
|
Reference in New Issue
Block a user