Merge branch 'dev' of https://github.com/zen-browser/desktop into dev
@@ -223,7 +223,7 @@ zen-key-exit-full-screen = Ukončit režim celé obrazovky
|
||||
zen-ai-chatbot-sidebar-shortcut = Přepnout postranní panel AI chatbota
|
||||
zen-key-inspector-mac = Přepnout inspektor (Mac)
|
||||
zen-toggle-sidebar-shortcut = Přepnout postranní panel Firefoxu
|
||||
zen-toggle-pin-tab-shortcut = Toggle Pin Tab
|
||||
zen-toggle-pin-tab-shortcut = Přepnout připnutí záložky
|
||||
zen-reader-mode-toggle-shortcut-other = Přepnout čtecí režim
|
||||
zen-picture-in-picture-toggle-shortcut = Přepnout obraz v obraze
|
||||
zen-nav-reload-shortcut-2 = Znovu načíst stránku
|
||||
@@ -257,7 +257,7 @@ zen-close-tab-shortcut = Zavřít kartu
|
||||
zen-compact-mode-shortcut-show-sidebar = Přepnout plovoucí postranní panel
|
||||
zen-compact-mode-shortcut-show-toolbar = Přepnout plovoucí panel nástrojů
|
||||
zen-compact-mode-shortcut-toggle = Přepnout kompaktní režim
|
||||
zen-glance-expand = Expand Glance
|
||||
zen-glance-expand = Rozšířit Glance
|
||||
zen-workspace-shortcut-switch-1 = Přepnout do pracovního prostoru 1
|
||||
zen-workspace-shortcut-switch-2 = Přepnout do pracovního prostoru 2
|
||||
zen-workspace-shortcut-switch-3 = Přepnout do pracovního prostoru 3
|
||||
|
||||
@@ -10,14 +10,14 @@ 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 = Synchronisez 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
|
||||
zen-glance-title = Glance
|
||||
zen-glance-header = Paramètres généraux de Glance
|
||||
zen-glance-description = Obtenez un aperçu rapide de vos liens, sans les ouvrir dans un nouvel onglet
|
||||
zen-glance-trigger-label = Méthode de déclenchement
|
||||
zen-glance-enabled =
|
||||
.label = Activer Aperçu
|
||||
.label = Activer Glance
|
||||
zen-glance-trigger-ctrl-click =
|
||||
.label = Ctrl + clic
|
||||
zen-glance-trigger-alt-click =
|
||||
@@ -54,7 +54,7 @@ zen-pinned-tab-manager-description = Gérer le comportement supplémentaire des
|
||||
zen-pinned-tab-manager-restore-pinned-tabs-to-pinned-url =
|
||||
.label = Au démarrage, restaurer les onglets épinglés à leur URL d’origine
|
||||
zen-pinned-tab-manager-container-specific-essentials-enabled =
|
||||
.label = Activer les Essentiels spécifiques aux conteneurs
|
||||
.label = Activer les Essentials spécifiques aux conteneurs
|
||||
zen-pinned-tab-manager-close-shortcut-behavior-label = Comportement du raccourci pour fermer l'onglet
|
||||
zen-pinned-tab-manager-reset-unload-switch-close-shortcut-option =
|
||||
.label = Réinitialiser l’URL, décharger et passer à l’onglet suivant
|
||||
@@ -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 les 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
|
||||
@@ -223,7 +223,7 @@ zen-key-exit-full-screen = Quitter le mode plein écran
|
||||
zen-ai-chatbot-sidebar-shortcut = Activer/désactiver la barre latérale de discussion IA
|
||||
zen-key-inspector-mac = Activer/désactiver l’inspecteur (macOS)
|
||||
zen-toggle-sidebar-shortcut = Activer/désactiver la barre latérale de Firefox
|
||||
zen-toggle-pin-tab-shortcut = Activer Epingler l'onglet
|
||||
zen-toggle-pin-tab-shortcut = Activer/désactiver Épingler l'onglet
|
||||
zen-reader-mode-toggle-shortcut-other = Activer/désactiver le mode lecture
|
||||
zen-picture-in-picture-toggle-shortcut = Activer/désactiver le mode inscrutation
|
||||
zen-nav-reload-shortcut-2 = Recharger la page
|
||||
|
||||
@@ -9,9 +9,9 @@ zen-folders-new-subfolder =
|
||||
zen-folders-panel-delete-folder =
|
||||
.label = Supprimer le dossier
|
||||
zen-folders-panel-convert-folder-to-space =
|
||||
.label = Convertir le dossier en Espace
|
||||
.label = Convertir le dossier en espace
|
||||
zen-folders-panel-change-folder-space =
|
||||
.label = Changer d'Espace...
|
||||
.label = Changer d'espace...
|
||||
zen-folders-panel-change-icon-folder =
|
||||
.label = Changer d'icône
|
||||
zen-folders-unload-all-tooltip =
|
||||
|
||||
@@ -4,10 +4,10 @@ tab-context-zen-reset-pinned-tab =
|
||||
.label = Réinitialiser l’onglet épinglé
|
||||
.accesskey = R
|
||||
tab-context-zen-add-essential =
|
||||
.label = Ajouter aux Essentiels ({ $num } / 12 emplacements remplis)
|
||||
.label = Ajouter aux Essentials ({ $num } / 12 emplacements remplis)
|
||||
.accesskey = E
|
||||
tab-context-zen-remove-essential =
|
||||
.label = Retirer des Essentiels
|
||||
.label = Retirer des Essentials
|
||||
.accesskey = R
|
||||
tab-context-zen-replace-pinned-url-with-current =
|
||||
.label = Remplacer l’URL épinglée par l’actuelle
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
zen-welcome-title-line1 = Bienvenue dans
|
||||
zen-welcome-title-line2 = un internet plus calme
|
||||
zen-welcome-title-line2 = un Internet plus calme
|
||||
zen-welcome-import-title = Un nouveau départ, les mêmes favoris
|
||||
zen-welcome-import-description-1 = Vos favoris, votre historique, et vos mots de passe sont comme des miettes sur internet. Ne les laissez pas trainer derrière vous !
|
||||
zen-welcome-import-description-2 = Importez-les facilement depuis un autre navigateur et reprenez là où vous vous êtes arrêté.
|
||||
@@ -12,8 +12,8 @@ zen-welcome-set-default-browser = Définir { -brand-short-name } comme votre nav
|
||||
zen-welcome-dont-set-default-browser = NE PAS définir { -brand-short-name } comme votre navigateur par défaut
|
||||
zen-welcome-initial-essentials-title = Vos onglets principaux, toujours à portée de main
|
||||
zen-welcome-initial-essentials-description-1 = Gardez vos onglets les plus importants facilement accessibles et toujours à portée de main, peu importe combien vous en ouvrez.
|
||||
zen-welcome-initial-essentials-description-2 = Les onglets Essentiels sont toujours visibles, peu importe l’espace de travail où vous êtes.
|
||||
zen-welcome-workspace-colors-title = Vos Espaces de travail, vos couleurs
|
||||
zen-welcome-initial-essentials-description-2 = Les onglets Essentials sont toujours visibles, peu importe l’espace de travail où vous êtes.
|
||||
zen-welcome-workspace-colors-title = Vos espaces de travail, vos couleurs
|
||||
zen-welcome-workspace-colors-description = Personnalisez votre navigateur en donnant à chaque espace de travail sa propre identité de couleur.
|
||||
zen-welcome-start-browsing-title =
|
||||
Tout est prêt ?<br/>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
zen-panel-ui-workspaces-text = Espaces
|
||||
zen-panel-ui-workspaces-create =
|
||||
.label = Créer un Espace
|
||||
.label = Créer un espace
|
||||
zen-panel-ui-folder-create =
|
||||
.label = Créer un dossier
|
||||
zen-workspaces-panel-context-delete =
|
||||
.label = Supprimer l’Espace
|
||||
.label = Supprimer l’espace
|
||||
.accesskey = D
|
||||
zen-workspaces-panel-change-name =
|
||||
.label = Modifier le nom
|
||||
@@ -12,18 +12,18 @@ zen-workspaces-panel-change-icon =
|
||||
.label = Changer d'icône
|
||||
zen-workspaces-panel-context-default-profile =
|
||||
.label = Définir le profil
|
||||
zen-workspaces-how-to-reorder-title = Comment réordonner les Espaces
|
||||
zen-workspaces-how-to-reorder-title = Comment réordonner les espaces
|
||||
zen-workspaces-how-to-reorder-desc = Faites glisser les icônes d'espace en bas de la barre latérale pour les réorganiser
|
||||
zen-workspaces-change-theme =
|
||||
.label = Modifier le thème
|
||||
zen-workspaces-panel-context-open =
|
||||
.label = Ouvrir un Espace de travail
|
||||
.label = Ouvrir un espace de travail
|
||||
.accesskey = O
|
||||
zen-workspaces-panel-context-edit =
|
||||
.label = Éditer l’Espace
|
||||
.label = Éditer l’espace
|
||||
.accesskey = E
|
||||
context-zen-change-workspace-tab =
|
||||
.label = Déplacer vers l’Espace de travail
|
||||
.label = Déplacer vers l’espace de travail
|
||||
.accesskey = C
|
||||
zen-bookmark-edit-panel-workspace-selector =
|
||||
.value = Espaces de travail
|
||||
@@ -40,12 +40,12 @@ zen-panel-ui-gradient-generator-algo-floating =
|
||||
.label = Flottant
|
||||
zen-panel-ui-gradient-click-to-add = Cliquez pour ajouter une couleur
|
||||
zen-workspace-creation-name =
|
||||
.placeholder = Nom de l'Espace
|
||||
.placeholder = Nom de l'espace
|
||||
zen-workspaces-panel-context-reorder =
|
||||
.label = Réorganiser les Espaces
|
||||
.label = Réorganiser les espaces
|
||||
zen-workspace-creation-profile = Profil
|
||||
.tooltiptext = Les profils sont utilisés pour séparer les cookies et les données des sites entre les Espaces.
|
||||
zen-workspace-creation-header = Créer un Espace
|
||||
zen-workspace-creation-label = Les Espaces sont utilisés pour organiser vos onglets et sessions.
|
||||
zen-workspaces-delete-workspace-title = Supprimer l’Espace ?
|
||||
zen-workspace-creation-header = Créer un espace
|
||||
zen-workspace-creation-label = Les espaces sont utilisés pour organiser vos onglets et sessions.
|
||||
zen-workspaces-delete-workspace-title = Supprimer l’espace ?
|
||||
zen-workspaces-delete-workspace-body = Êtes-vous sûr de vouloir supprimer { $name } ? Cette action ne peut pas être annulée.
|
||||
|
||||
@@ -223,7 +223,7 @@ zen-key-exit-full-screen = Scoir Lánscáileáin
|
||||
zen-ai-chatbot-sidebar-shortcut = Barra Taobh Comhrá AI a Athrú
|
||||
zen-key-inspector-mac = Scoránaigh Cigire (Mac)
|
||||
zen-toggle-sidebar-shortcut = Scoránaigh an Taobhbharra Firefox
|
||||
zen-toggle-pin-tab-shortcut = Toggle Pin Tab
|
||||
zen-toggle-pin-tab-shortcut = Cluaisín bioráin a scoránaigh
|
||||
zen-reader-mode-toggle-shortcut-other = Scoránaigh Mód Léitheoir
|
||||
zen-picture-in-picture-toggle-shortcut = Scoránaigh Pictiúr-i-Pictiúr
|
||||
zen-nav-reload-shortcut-2 = Athlódáil an Leathanach
|
||||
@@ -257,7 +257,7 @@ zen-close-tab-shortcut = Dún an Cluaisín
|
||||
zen-compact-mode-shortcut-show-sidebar = Scoránaigh Barra Taoibh Snámh
|
||||
zen-compact-mode-shortcut-show-toolbar = Scoránaigh Barra Uirlisí Snámh
|
||||
zen-compact-mode-shortcut-toggle = Scoránaigh Mód Dlúth
|
||||
zen-glance-expand = Expand Glance
|
||||
zen-glance-expand = Leathnaigh an Súil
|
||||
zen-workspace-shortcut-switch-1 = Athraigh go Spás Oibre 1
|
||||
zen-workspace-shortcut-switch-2 = Athraigh go Spás Oibre 2
|
||||
zen-workspace-shortcut-switch-3 = Athraigh go Spás Oibre 3
|
||||
|
||||
@@ -223,7 +223,7 @@ zen-key-exit-full-screen = Keluar Dari Layar Penuh
|
||||
zen-ai-chatbot-sidebar-shortcut = Beralih ke AI Chatbot Sidebar
|
||||
zen-key-inspector-mac = Beralih ke Inspector (Mac)
|
||||
zen-toggle-sidebar-shortcut = Beralih ke Firefox Sidebar
|
||||
zen-toggle-pin-tab-shortcut = Toggle Pin Tab
|
||||
zen-toggle-pin-tab-shortcut = Alihkan Sematan Tab
|
||||
zen-reader-mode-toggle-shortcut-other = Aktif/nonaktifkan Mode Membaca
|
||||
zen-picture-in-picture-toggle-shortcut = Aktif/nonaktifkan Picture-in-Picture
|
||||
zen-nav-reload-shortcut-2 = Muat Ulang Halaman
|
||||
@@ -257,7 +257,7 @@ zen-close-tab-shortcut = Tutup Tab
|
||||
zen-compact-mode-shortcut-show-sidebar = Beralih ke Bilah sisi mengambang
|
||||
zen-compact-mode-shortcut-show-toolbar = Nyala/Matikan Toolbar Mengambang
|
||||
zen-compact-mode-shortcut-toggle = Aktifkan/Sembunyikan Mode Ringkas
|
||||
zen-glance-expand = Expand Glance
|
||||
zen-glance-expand = Perluas Glance
|
||||
zen-workspace-shortcut-switch-1 = Beralih ke Ruang Kerja 1
|
||||
zen-workspace-shortcut-switch-2 = Beralih ke Ruang Kerja 2
|
||||
zen-workspace-shortcut-switch-3 = Beralih ke Ruang Kerja 3
|
||||
|
||||
@@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space =
|
||||
zen-folders-panel-change-icon-folder =
|
||||
.label = Ubah Ikon
|
||||
zen-folders-unload-all-tooltip =
|
||||
.tooltiptext = Unload active in this folder
|
||||
.tooltiptext = Lepaskan tab yang aktif di folder ini
|
||||
zen-folders-unload-folder =
|
||||
.label = Lepaskan Semua Tab
|
||||
zen-folders-search-no-results = Tidak ada tab yang cocok 🤔
|
||||
|
||||
@@ -15,7 +15,7 @@ sync-engine-workspaces =
|
||||
zen-glance-title = Glance
|
||||
zen-glance-header = Glance 一般設定
|
||||
zen-glance-description = 無需打開新分頁,即可快速預覽
|
||||
zen-glance-trigger-label = 觸發方法
|
||||
zen-glance-trigger-label = 觸發方式
|
||||
zen-glance-enabled =
|
||||
.label = 啟用 Glance
|
||||
zen-glance-trigger-ctrl-click =
|
||||
@@ -27,7 +27,7 @@ zen-glance-trigger-shift-click =
|
||||
zen-glance-trigger-meta-click =
|
||||
.label = Meta (Command) + 左鍵
|
||||
zen-glance-trigger-mantain-click =
|
||||
.label = Mantain Click
|
||||
.label = 長按(即將上線!)
|
||||
zen-look-and-feel-compact-view-header = 在緊湊模式下顯示
|
||||
zen-look-and-feel-compact-view-description = 只顯示你需要用的工具欄!
|
||||
zen-look-and-feel-compact-view-enabled =
|
||||
@@ -45,7 +45,7 @@ zen-tabs-unloader-enabled =
|
||||
zen-look-and-feel-compact-toolbar-themed =
|
||||
.label = 將主題顏色套用至折疊工具欄
|
||||
zen-look-and-feel-compact-sidebar-themed =
|
||||
.label = 將主題顏色套用至摺疊側邊欄
|
||||
.label = 將主題顏色套用至折疊側邊欄
|
||||
zen-workspace-continue-where-left-off =
|
||||
.label = Continue where you left off
|
||||
pane-zen-pinned-tab-manager-title = 釘選分頁
|
||||
@@ -70,12 +70,12 @@ zen-pinned-tab-manager-close-close-shortcut-option =
|
||||
.label = 關閉分頁
|
||||
pane-zen-workspaces-header = 工作區
|
||||
zen-settings-workspaces-header = 工作區的一般設定
|
||||
zen-settings-workspaces-description = 有了工作區,你就可以同時瀏覽多個頁面!
|
||||
zen-settings-workspaces-description = 透過工作區,您能同時擁有多個獨立的瀏覽環境!
|
||||
zen-settings-workspaces-enabled =
|
||||
.label = 啟用工作區 (實驗性的)
|
||||
.label = 啟用工作區
|
||||
zen-settings-workspaces-hide-default-container-indicator =
|
||||
.label = 隱藏分頁欄中的容器指標
|
||||
zen-key-unsaved = 快捷鍵未儲存!請重新輸入並按下 "Escape" 鍵來儲存快捷鍵
|
||||
zen-key-unsaved = 快捷鍵未儲存!請重新輸入並按下 "Escape" 鍵來儲存快捷鍵。
|
||||
zen-key-conflict = 與其它快捷鍵發生衝突
|
||||
pane-zen-theme-title = 主題設定
|
||||
zen-vertical-tabs-title = 側邊欄與分頁排版
|
||||
@@ -92,7 +92,7 @@ zen-vertical-tabs-dont-expand-tabs-by-default = 預設不展開分頁
|
||||
zen-vertical-tabs-expand-tabs-on-hover = 懸停時擴展分頁 (無法在緊湊模式下使用)
|
||||
zen-vertical-tabs-expand-tabs-header = 如何擴展分頁
|
||||
zen-vertical-tabs-expand-tabs-description = 選擇要如何擴展側邊欄中的分頁
|
||||
zen-theme-marketplace-header = Zen模式
|
||||
zen-theme-marketplace-header = Zen 模組
|
||||
zen-theme-disable-all-enabled =
|
||||
.title = 啟用所有主題
|
||||
zen-theme-disable-all-disabled =
|
||||
@@ -103,15 +103,15 @@ zen-theme-marketplace-remove-button =
|
||||
zen-theme-marketplace-check-for-updates-button =
|
||||
.label = 檢查更新
|
||||
zen-theme-marketplace-import-button =
|
||||
.label = Import mods
|
||||
.label = 匯入模組
|
||||
zen-theme-marketplace-export-button =
|
||||
.label = Export Mods
|
||||
zen-theme-marketplace-import-success = Mods imported successfully
|
||||
zen-theme-marketplace-import-failure = There was an error importing the mods
|
||||
zen-theme-marketplace-export-success = Mods exported successfully
|
||||
zen-theme-marketplace-export-failure = There was an error exporting the mods
|
||||
.label = 匯出模組
|
||||
zen-theme-marketplace-import-success = 模組匯入成功
|
||||
zen-theme-marketplace-import-failure = 匯入模組時發生錯誤
|
||||
zen-theme-marketplace-export-success = 模組匯出成功
|
||||
zen-theme-marketplace-export-failure = 匯出模組時發生錯誤
|
||||
zen-theme-marketplace-updates-success = 主題更新成功
|
||||
zen-theme-marketplace-updates-failure = Couldn't find any updates!
|
||||
zen-theme-marketplace-updates-failure = 找不到任何更新!
|
||||
zen-theme-marketplace-toggle-enabled-button =
|
||||
.title = 關閉佈景主題
|
||||
zen-theme-marketplace-toggle-disabled-button =
|
||||
@@ -126,7 +126,7 @@ zen-theme-marketplace-input-default-placeholder =
|
||||
.placeholder = 請輸入
|
||||
pane-zen-marketplace-title = Zen 模式
|
||||
zen-themes-auto-update =
|
||||
.label = Automatically update installed mods on startup
|
||||
.label = 啟動時自動更新已安裝模組
|
||||
zen-settings-workspaces-force-container-tabs-to-workspace =
|
||||
.label = 開啟容器分頁時,切換到容器設定為預設值的工作區
|
||||
zen-theme-marketplace-link = 造訪商店
|
||||
@@ -175,17 +175,17 @@ zenCKSOption-group-devTools = 開發人員工具
|
||||
zen-key-quick-restart = 快速重啟
|
||||
zen-window-new-shortcut = 開新視窗
|
||||
zen-tab-new-shortcut = 開新分頁
|
||||
zen-key-redo = 取消「復原」
|
||||
zen-key-redo = 重做
|
||||
zen-restore-last-closed-tab-shortcut = 復原上次關閉的分頁
|
||||
zen-location-open-shortcut = 選取網址列
|
||||
zen-location-open-shortcut-alt = 選取網址列 (備用)
|
||||
zen-location-open-shortcut-alt = 選取網址列(備用)
|
||||
zen-key-undo-close-window = 還原已關閉視窗
|
||||
zen-text-action-undo-shortcut = 復原
|
||||
zen-text-action-redo-shortcut = 取消「復原」
|
||||
zen-text-action-cut-shortcut = 剪下
|
||||
zen-text-action-copy-shortcut = 複製
|
||||
zen-text-action-copy-url-shortcut = 複製目前網址
|
||||
zen-text-action-copy-url-markdown-shortcut = 把目前網址複製成Markdown
|
||||
zen-text-action-copy-url-markdown-shortcut = 將目前網址複製為 Markdown
|
||||
zen-text-action-paste-shortcut = 貼上
|
||||
zen-text-action-select-all-shortcut = 全選
|
||||
zen-text-action-delete-shortcut = 刪除
|
||||
@@ -240,9 +240,9 @@ zen-key-stop = 停止載入
|
||||
zen-full-zoom-reduce-shortcut = 縮小
|
||||
zen-full-zoom-enlarge-shortcut = 放大
|
||||
zen-full-zoom-reset-shortcut = 縮放重設
|
||||
zen-full-zoom-reset-shortcut-alt = Reset Zoom (Alt)
|
||||
zen-full-zoom-enlarge-shortcut-alt = Zoom In (Alt)
|
||||
zen-full-zoom-enlarge-shortcut-alt2 = Zoom In (Alt 2)
|
||||
zen-full-zoom-reset-shortcut-alt = 重置縮放(Alt)
|
||||
zen-full-zoom-enlarge-shortcut-alt = 放大(Alt)
|
||||
zen-full-zoom-enlarge-shortcut-alt2 = 放大(Alt 2)
|
||||
zen-bidi-switch-direction-shortcut = 切換文字方向
|
||||
zen-private-browsing-shortcut = 隱私瀏覽
|
||||
zen-screenshot-shortcut = 截圖
|
||||
|
||||
@@ -18,4 +18,4 @@ zen-folders-unload-all-tooltip =
|
||||
.tooltiptext = Unload active in this folder
|
||||
zen-folders-unload-folder =
|
||||
.label = Unload All Tabs
|
||||
zen-folders-search-no-results = No tabs matching that search 🤔
|
||||
zen-folders-search-no-results = 沒有找到搜尋的分頁 🤔
|
||||
|
||||
@@ -12,7 +12,7 @@ tab-context-zen-remove-essential =
|
||||
tab-context-zen-replace-pinned-url-with-current =
|
||||
.label = 將釘選的網址換成目前的網址
|
||||
.accesskey = C
|
||||
zen-themes-corrupted = 你的 { -brand-short-name } 模組文件已損壞,它們已重置為預設佈景主題
|
||||
zen-themes-corrupted = 你的 { -brand-short-name } 模組文件已損壞,它們已重置為預設佈景主題。
|
||||
zen-shortcuts-corrupted = 你的 { -brand-short-name } 快捷文件已損壞。它們已被重設為預設值。
|
||||
# note: Do not translate the "<br/>" tags in the following string
|
||||
zen-new-urlbar-notification = 新的 URL 欄已啟用,你不再需要新增新分頁。<br/><br/>馬上打開新分頁來看看新的 URL 欄!
|
||||
@@ -24,25 +24,25 @@ zen-panel-ui-gradient-generator-custom-color = 自訂顏色
|
||||
zen-panel-ui-gradient-generator-saved-message = 漸層儲存成功!
|
||||
zen-copy-current-url-confirmation = 網址已複製到剪貼簿。
|
||||
zen-general-cancel-label =
|
||||
.label = Cancel
|
||||
.label = 取消
|
||||
zen-general-confirm =
|
||||
.label = Confirm
|
||||
.label = 確認
|
||||
zen-pinned-tab-replaced = 釘選分頁網址已替換為當前當前網址。
|
||||
zen-tabs-renamed = 分頁重新命名成功!
|
||||
zen-background-tab-opened-toast = New background tab opened!
|
||||
zen-workspace-renamed-toast = Workspace has been successfully renamed!
|
||||
zen-library-sidebar-workspaces =
|
||||
.label = Spaces
|
||||
.label = 工作區
|
||||
zen-library-sidebar-mods =
|
||||
.label = Mods
|
||||
.label = 模組
|
||||
|
||||
# note: Do not translate the "<br/>" tags in the following string
|
||||
|
||||
zen-learn-more-text = 瞭解更多
|
||||
zen-close-label = 關閉
|
||||
zen-singletoolbar-urlbar-placeholder-with-name =
|
||||
.placeholder = Search...
|
||||
.placeholder = 搜尋...
|
||||
zen-icons-picker-emoji =
|
||||
.label = Emojis
|
||||
.label = 表情符號
|
||||
zen-icons-picker-svg =
|
||||
.label = Icons
|
||||
|
||||
@@ -11,6 +11,6 @@ zen-split-link =
|
||||
zen-split-view-modifier-header = 分割畫面
|
||||
zen-split-view-modifier-activate-reallocation =
|
||||
.label = 啟用重新分配
|
||||
zen-split-view-modifier-enabled-toast = 分割畫面重新排列已開啟
|
||||
zen-split-view-modifier-enabled-toast = 分割畫面重新排列已開啟。
|
||||
zen-split-view-modifier-enabled-toast-description = 拖曳畫面以重新排列。按 Esc 鍵退出
|
||||
zen-split-view-modifier-disabled-toast = 分割畫面重新排列已關閉
|
||||
|
||||
@@ -33,4 +33,4 @@ tabbrowser-reset-pin-button =
|
||||
[one] Reset and pin tab
|
||||
*[other] Reset and pin { $tabCount } tabs
|
||||
}
|
||||
tab-reset-pin-label = Back to pinned url
|
||||
tab-reset-pin-label = 返回釘選網址
|
||||
|
||||
@@ -6,7 +6,7 @@ zen-welcome-title-line1 = Welcome to
|
||||
zen-welcome-title-line2 = a calmer internet
|
||||
zen-welcome-import-title = A Fresh Start, Same Bookmarks
|
||||
zen-welcome-import-description-1 = Your bookmarks, history, and passwords are like a trail of breadcrumbs through the internet—don’t leave them behind!
|
||||
zen-welcome-import-description-2 = Easily bring them over from another browser and pick up right where you left off..
|
||||
zen-welcome-import-description-2 = 輕鬆匯入其他瀏覽器的資料,無縫接續瀏覽體驗。
|
||||
zen-welcome-import-button = Import now
|
||||
zen-welcome-set-default-browser = Set { -brand-short-name } as your default browser
|
||||
zen-welcome-dont-set-default-browser = DON’T set { -brand-short-name } as your default browser
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
zen-panel-ui-workspaces-text = 其他工作區
|
||||
zen-panel-ui-workspaces-text = 工作區
|
||||
zen-panel-ui-workspaces-create =
|
||||
.label = Create Space
|
||||
.label = 創建工作區
|
||||
zen-panel-ui-folder-create =
|
||||
.label = Create Folder
|
||||
zen-workspaces-panel-context-delete =
|
||||
.label = 刪除工作區
|
||||
.accesskey = D
|
||||
zen-workspaces-panel-change-name =
|
||||
.label = Change Name
|
||||
.label = 重新命名
|
||||
zen-workspaces-panel-change-icon =
|
||||
.label = Change Icon
|
||||
.label = 變更圖示
|
||||
zen-workspaces-panel-context-default-profile =
|
||||
.label = Set Profile
|
||||
zen-workspaces-how-to-reorder-title = How to reorder spaces
|
||||
zen-workspaces-how-to-reorder-desc = Drag the space icons at the bottom of the sidebar to reorder them
|
||||
zen-workspaces-how-to-reorder-title = 如何排序工作區
|
||||
zen-workspaces-how-to-reorder-desc = 拖曳側邊欄底部工作區圖示以重新排序
|
||||
zen-workspaces-change-theme =
|
||||
.label = Edit Theme
|
||||
.label = 編輯主題
|
||||
zen-workspaces-panel-context-open =
|
||||
.label = 打開工作區
|
||||
.accesskey = O
|
||||
@@ -23,7 +23,7 @@ zen-workspaces-panel-context-edit =
|
||||
.label = 編輯工作區
|
||||
.accesskey = E
|
||||
context-zen-change-workspace-tab =
|
||||
.label = 將分頁(含多個)移至工作區
|
||||
.label = 將分頁(含多個)移至工作區
|
||||
.accesskey = C
|
||||
zen-bookmark-edit-panel-workspace-selector =
|
||||
.value = 選擇工作區
|
||||
@@ -40,12 +40,12 @@ zen-panel-ui-gradient-generator-algo-floating =
|
||||
.label = 懸浮
|
||||
zen-panel-ui-gradient-click-to-add = 點擊新增顏色
|
||||
zen-workspace-creation-name =
|
||||
.placeholder = Space Name
|
||||
.placeholder = 工作區名稱
|
||||
zen-workspaces-panel-context-reorder =
|
||||
.label = Reorder Spaces
|
||||
.label = 排序工作區
|
||||
zen-workspace-creation-profile = Profile
|
||||
.tooltiptext = Profiles are used to separate cookies and site data between spaces.
|
||||
zen-workspace-creation-header = Create a Space
|
||||
zen-workspace-creation-header = 創建工作區
|
||||
zen-workspace-creation-label = Spaces are used to organize your tabs and sessions.
|
||||
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-title = 刪除工作區?
|
||||
zen-workspaces-delete-workspace-body = 你確定要刪除 { $name } 嗎?該動作無法物復原。
|
||||
|
||||
@@ -22,3 +22,8 @@
|
||||
|
||||
- name: zen.urlbar.enable-overrides
|
||||
value: false
|
||||
|
||||
# Mark: Zen suggestions controls
|
||||
|
||||
- name: zen.urlbar.suggestions.quick-actions
|
||||
value: true
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
content/browser/zen-sets.js (../../zen/common/zen-sets.js)
|
||||
content/browser/ZenUIManager.mjs (../../zen/common/ZenUIManager.mjs)
|
||||
content/browser/zen-components/ZenActorsManager.mjs (../../zen/common/ZenActorsManager.mjs)
|
||||
content/browser/zen-components/ZenUIMigration.mjs (../../zen/common/ZenUIMigration.mjs)
|
||||
content/browser/zen-components/ZenCommonUtils.mjs (../../zen/common/ZenCommonUtils.mjs)
|
||||
content/browser/zen-components/ZenSessionStore.mjs (../../zen/common/ZenSessionStore.mjs)
|
||||
content/browser/zen-components/ZenEmojisData.min.mjs (../../zen/common/emojis/ZenEmojisData.min.mjs)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
|
||||
index eae3ed9518ad9ce2103bb912963465c1b10ac050..51859cd542bc69f524d891a67e725c30d4cf14bb 100644
|
||||
index eae3ed9518ad9ce2103bb912963465c1b10ac050..ccbb04cd36fd8fd63fd8c9ebd0b51f0a5966829c 100644
|
||||
--- a/browser/components/BrowserGlue.sys.mjs
|
||||
+++ b/browser/components/BrowserGlue.sys.mjs
|
||||
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
||||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
+ gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs",
|
||||
+ gZenUIMigration: "resource:///modules/ZenUIMigration.sys.mjs",
|
||||
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
|
||||
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
|
||||
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
index 555273f6ea1efd77aa3062b9910bbfe28568775d..c8aae86e1233d256e538970d58fd0febed745893 100644
|
||||
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
@@ -138,7 +138,7 @@ class ProvidersManager {
|
||||
// To improve dataflow and reduce UI work, when a result is added we may notify
|
||||
// it to the controller after a delay, so that we can chunk results in that
|
||||
// timeframe into a single call. See _notifyResultsFromProvider for details.
|
||||
- this.CHUNK_RESULTS_DELAY_MS = 16;
|
||||
+ this.CHUNK_RESULTS_DELAY_MS = 20;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
index fdbab8806fd320f4aacec46a42c8ef953580d00c..a1be83735cd2b69d335cd36d3287cd3b3e3f2a5b 100644
|
||||
index fdbab8806fd320f4aacec46a42c8ef953580d00c..40568280c3ba2f0a36f4443a5116430d3c502ec1 100644
|
||||
--- a/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
@@ -613,7 +613,7 @@ export class UrlbarView {
|
||||
@@ -11,7 +11,27 @@ index fdbab8806fd320f4aacec46a42c8ef953580d00c..a1be83735cd2b69d335cd36d3287cd3b
|
||||
// Try to reuse the cached top-sites context. If it's not cached, then
|
||||
// there will be a gap of time between when the input is focused and
|
||||
// when the view opens that can be perceived as flicker.
|
||||
@@ -1341,7 +1341,7 @@ export class UrlbarView {
|
||||
@@ -823,6 +823,19 @@ export class UrlbarView {
|
||||
// them, resembling tab-to-search. In that case, the input value is
|
||||
// still associated with the first result.
|
||||
this.input.setResultForCurrentValue(firstResult);
|
||||
+ } else if (firstResult.payload.zenAction) {
|
||||
+ this.#selectElement(this.getFirstSelectableElement(), {
|
||||
+ updateInput: false,
|
||||
+ setAccessibleFocus:
|
||||
+ this.controller._userSelectionBehavior == "arrow",
|
||||
+ });
|
||||
+ this.window.setTimeout(() => {
|
||||
+ this.#selectElement(this.getFirstSelectableElement(), {
|
||||
+ updateInput: false,
|
||||
+ setAccessibleFocus:
|
||||
+ this.controller._userSelectionBehavior == "arrow",
|
||||
+ });
|
||||
+ }, 150);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1341,7 +1354,7 @@ export class UrlbarView {
|
||||
includeHiddenExposures: true,
|
||||
});
|
||||
let canBeVisible =
|
||||
@@ -20,7 +40,7 @@ index fdbab8806fd320f4aacec46a42c8ef953580d00c..a1be83735cd2b69d335cd36d3287cd3b
|
||||
if (result.isHiddenExposure) {
|
||||
if (canBeVisible) {
|
||||
this.controller.engagementEvent.addExposure(
|
||||
@@ -3189,7 +3189,7 @@ export class UrlbarView {
|
||||
@@ -3189,7 +3202,7 @@ export class UrlbarView {
|
||||
}
|
||||
|
||||
#enableOrDisableRowWrap() {
|
||||
|
||||
3
src/zen/@types/lib.gecko.darwin.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from source XPCOM .idl files.
|
||||
|
||||
3
src/zen/@types/lib.gecko.dom.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from source .webidl files.
|
||||
|
||||
3
src/zen/@types/lib.gecko.glean.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from glean .yaml files.
|
||||
|
||||
3
src/zen/@types/lib.gecko.linux.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from source XPCOM .idl files.
|
||||
|
||||
3
src/zen/@types/lib.gecko.modules.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated by running "mach ts paths".
|
||||
|
||||
3
src/zen/@types/lib.gecko.nsresult.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from xpc.msg and error_list.json.
|
||||
|
||||
3
src/zen/@types/lib.gecko.services.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from services.json.
|
||||
|
||||
3
src/zen/@types/lib.gecko.tweaks.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* Gecko generic/specialized adjustments for xpcom and webidl types.
|
||||
*/
|
||||
|
||||
3
src/zen/@types/lib.gecko.win32.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from source XPCOM .idl files.
|
||||
|
||||
3
src/zen/@types/lib.gecko.xpcom.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* NOTE: Do not modify this file by hand.
|
||||
* Content was generated from source XPCOM .idl files.
|
||||
|
||||
3
src/zen/@types/lib.gecko.xpidl.d.ts
vendored
@@ -1,3 +1,6 @@
|
||||
// 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/.
|
||||
/**
|
||||
* Gecko XPIDL base types.
|
||||
*/
|
||||
|
||||
@@ -75,6 +75,14 @@ var gZenUIManager = {
|
||||
|
||||
this._initCreateNewPopup();
|
||||
this._debloatContextMenus();
|
||||
this._initOmniboxCommands();
|
||||
},
|
||||
|
||||
_initOmniboxCommands() {
|
||||
const { registerZenUrlbarProviders } = ChromeUtils.importESModule(
|
||||
'resource:///modules/ZenUBProvider.sys.mjs'
|
||||
);
|
||||
registerZenUrlbarProviders();
|
||||
},
|
||||
|
||||
_debloatContextMenus() {
|
||||
|
||||
@@ -4,4 +4,5 @@
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
"ZenCustomizableUI.sys.mjs",
|
||||
"ZenUIMigration.sys.mjs",
|
||||
]
|
||||
|
||||
@@ -89,8 +89,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
:root[animating-background='true'] &::after,
|
||||
:root[animating-background='true'] &::before {
|
||||
&::after,
|
||||
&::before {
|
||||
mix-blend-mode: plus-lighter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
--tab-close-button-padding: 5px !important;
|
||||
|
||||
--input-border-color: var(--zen-input-border-color) !important;
|
||||
--zen-themed-toolbar-bg-transparent: light-dark(var(--zen-branding-bg), #171717);
|
||||
--zen-themed-toolbar-bg-transparent: transparent;
|
||||
|
||||
--zen-workspace-indicator-height: 46px;
|
||||
|
||||
@@ -265,13 +265,9 @@
|
||||
#main-window:not([chromehidden~='toolbar']) {
|
||||
min-height: 495px !important;
|
||||
|
||||
@media (-moz-windows-mica) or (-moz-platform: macos) or ((-moz-platform: linux) and -moz-pref('zen.widget.linux.transparency')) {
|
||||
background: transparent;
|
||||
--zen-themed-toolbar-bg-transparent: transparent;
|
||||
|
||||
@media (-moz-windows-mica) and (not (-moz-pref('widget.windows.mica.toplevel-backdrop', 1))) and (not (-moz-pref('widget.windows.mica.toplevel-backdrop', 2))) {
|
||||
--zen-themed-toolbar-bg-transparent: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
background: transparent;
|
||||
@media (-moz-windows-mica) and (not (-moz-pref('widget.windows.mica.toplevel-backdrop', 1))) and (not (-moz-pref('widget.windows.mica.toplevel-backdrop', 2))) {
|
||||
--zen-themed-toolbar-bg-transparent: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
&,
|
||||
|
||||
@@ -61,8 +61,11 @@
|
||||
}
|
||||
|
||||
#urlbar:not([breakout-extend='true']) {
|
||||
:root:not([supress-primary-adjustment]) & .urlbar-background {
|
||||
& .urlbar-background {
|
||||
transition: background-color 0.15s ease;
|
||||
:root[supress-primary-adjustment] & {
|
||||
transition: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover .urlbar-background {
|
||||
@@ -559,6 +562,22 @@ button.popup-notification-dropmarker {
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
.urlbarView-shortcutContent {
|
||||
border-radius: 4px;
|
||||
padding: 6px 8px;
|
||||
font-size: 10px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
margin-left: auto;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
|
||||
|
||||
&:empty {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.urlbarView-row[has-action]:is([type='switchtab'], [type='remotetab'], [type='clipboard']) {
|
||||
& .urlbarView-action:last-child {
|
||||
margin-left: auto !important;
|
||||
@@ -616,15 +635,14 @@ button.popup-notification-dropmarker {
|
||||
--urlbarView-item-inline-padding: 8px;
|
||||
--urlbarView-item-block-padding: 10px;
|
||||
|
||||
&:hover {
|
||||
.urlbarView-favicon,
|
||||
& {
|
||||
background-color: color-mix(
|
||||
in srgb,
|
||||
var(--zen-branding-bg-reverse) 5%,
|
||||
transparent 95%
|
||||
) !important;
|
||||
}
|
||||
&:hover.urlbarView-favicon,
|
||||
&:hover,
|
||||
& .urlbarView-shortcutContent {
|
||||
background-color: color-mix(
|
||||
in srgb,
|
||||
var(--zen-branding-bg-reverse) 5%,
|
||||
transparent 95%
|
||||
) !important;
|
||||
}
|
||||
|
||||
&[selected] {
|
||||
@@ -643,7 +661,12 @@ button.popup-notification-dropmarker {
|
||||
fill: black !important;
|
||||
}
|
||||
|
||||
& .urlbarView-favicon {
|
||||
& .urlbarView-shortcutContent {
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
& .urlbarView-favicon,
|
||||
& .urlbarView-shortcutContent {
|
||||
background-color: rgba(255, 255, 255, 0.9) !important;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,10 +189,11 @@ var gZenCompactModeManager = {
|
||||
updateCompactModeContext(isSingleToolbar) {
|
||||
const menuitem = document.getElementById('zen-context-menu-compact-mode-toggle');
|
||||
const menu = document.getElementById('zen-context-menu-compact-mode');
|
||||
menu.setAttribute('hidden', isSingleToolbar);
|
||||
if (isSingleToolbar) {
|
||||
menu.setAttribute('hidden', 'true');
|
||||
menu.before(menuitem);
|
||||
} else {
|
||||
menu.removeAttribute('hidden');
|
||||
menu.querySelector('menupopup').prepend(menuitem);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -147,13 +147,23 @@
|
||||
|
||||
& #zen-toolbar-background {
|
||||
display: flex;
|
||||
outline: 1px solid rgba(255, 255, 255, .15);
|
||||
border-radius: calc(var(--zen-native-inner-radius) + var(--zen-element-separation) / 4 - var(--zen-compact-mode-no-padding-radius-fix, 0px));
|
||||
overflow: clip;
|
||||
background: transparent;
|
||||
z-index: -1;
|
||||
box-shadow: var(--zen-big-shadow);
|
||||
@media -moz-pref('zen.theme.acrylic-elements') {
|
||||
backdrop-filter: blur(42px) saturate(110%) brightness(0.25) contrast(100%) !important;
|
||||
}
|
||||
&::before,
|
||||
&::after {
|
||||
outline: 1px solid rgba(255, 255, 255, .15);
|
||||
outline-offset: -1px;
|
||||
}
|
||||
&,
|
||||
&::before,
|
||||
&::after {
|
||||
border-radius: calc(var(--zen-native-inner-radius) + var(--zen-element-separation) / 4 - var(--zen-compact-mode-no-padding-radius-fix, 0px));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M24.4212 7.5791H7.5791V24.4212H24.4212V7.5791Z" fill="white"/>
|
||||
<path d="M24.4212 31.9999L32.0001 24.421L28.2106 23.7744L24.4212 24.421L23.7295 27.8872L24.4212 31.9999Z" fill="#EA4335"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16C0 7.16344 7.16344 0 16 0C24.8366 0 32 7.16344 32 16Z" fill="#5765F2"/>
|
||||
<path d="M18.5844 9C18.4039 9.32044 18.2418 9.65193 18.0945 9.99079C16.6949 9.78085 15.2695 9.78085 13.8661 9.99079C13.7225 9.65193 13.5567 9.32044 13.3763 9C12.0614 9.22469 10.7796 9.61879 9.56412 10.1749C7.15527 13.744 6.50334 17.221 6.82747 20.6501C8.23814 21.6924 9.81826 22.488 11.5015 22.9963C11.8809 22.488 12.2161 21.9466 12.5033 21.3831C11.9582 21.1805 11.4315 20.9263 10.9269 20.6317C11.0595 20.5359 11.1884 20.4365 11.3137 20.3407C14.2713 21.733 17.6967 21.733 20.658 20.3407C20.7833 20.4438 20.9122 20.5433 21.0448 20.6317C20.5402 20.93 20.0135 21.1805 19.4647 21.3867C19.752 21.9503 20.0871 22.4917 20.4665 23C22.1497 22.4917 23.7298 21.6998 25.1406 20.6575C25.5236 16.6796 24.4849 13.232 22.3965 10.1786C21.1847 9.62247 19.903 9.22836 18.5881 9.00736L18.5844 9ZM12.9159 18.5396C12.0061 18.5396 11.251 17.7145 11.251 16.6943C11.251 15.674 11.9766 14.8453 12.9122 14.8453C13.8477 14.8453 14.5917 15.6777 14.577 16.6943C14.5623 17.7109 13.844 18.5396 12.9159 18.5396ZM19.0522 18.5396C18.1387 18.5396 17.391 17.7145 17.391 16.6943C17.391 15.674 18.1166 14.8453 19.0522 14.8453C19.9877 14.8453 20.728 15.6777 20.7133 16.6943C20.6986 17.7109 19.9803 18.5396 19.0522 18.5396Z" fill="white"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10.5 32.0002C13.536 32.0002 16 29.6108 16 26.6668V21.3335H10.5C7.464 21.3335 5 23.7228 5 26.6668C5 29.6108 7.464 32.0002 10.5 32.0002Z" fill="#0ACF83"/>
|
||||
<path d="M5 15.9998C5 13.0558 7.464 10.6665 10.5 10.6665H16V21.3332H10.5C7.464 21.3332 5 18.9438 5 15.9998Z" fill="#A259FF"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 811 B After Width: | Height: | Size: 1.0 KiB |
@@ -1 +1,6 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><style>path { fill: black; } @media (prefers-color-scheme: dark) { path { fill: white; }}</style><path d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>
|
||||
|
Before Width: | Height: | Size: 919 B After Width: | Height: | Size: 1.1 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M19.9092 0.570312C20.9252 0.483425 21.6372 0.459533 22.2676 0.602539C22.9145 0.749343 23.4327 1.06038 24.0859 1.53418L29.3965 5.26758L29.4043 5.27246C29.8125 5.57126 30.1701 5.81942 30.4004 6.08594C30.6783 6.40761 30.7783 6.75136 30.7783 7.19238V27.665C30.7783 28.3532 30.6552 29.0129 30.2148 29.5127C29.7704 30.0169 29.0911 30.2598 28.2109 30.3223H28.2061L8.88672 31.4893H8.88086C8.2502 31.519 7.71523 31.495 7.23926 31.3213C6.74601 31.1412 6.36848 30.821 6.00977 30.3652L6.00684 30.3613L2.09668 25.2871L2.09375 25.2832C1.35529 24.3021 1.00001 23.4985 1 22.5322V4.33398C1.00003 3.74262 1.13121 3.13817 1.50781 2.65625C1.8945 2.16152 2.4867 1.86338 3.2666 1.7959H3.27344L19.9092 0.569336V0.570312Z" fill="white" stroke="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.947 1.0682L3.308 2.2942C1.968 2.4102 1.5 3.2852 1.5 4.3342V22.5322C1.5 23.3492 1.791 24.0482 2.492 24.9822L6.403 30.0562C7.046 30.8732 7.629 31.0482 8.856 30.9902L28.177 29.8232C29.811 29.7072 30.279 28.9482 30.279 27.6652V7.1922C30.279 6.5292 30.016 6.3382 29.242 5.7722L29.11 5.6762L23.8 1.9432C22.515 1.0112 21.99 0.893201 19.946 1.0682H19.947ZM9.293 6.8572C7.716 6.9632 7.357 6.9872 6.462 6.2602L4.185 4.4522C3.952 4.2182 4.069 3.9262 4.652 3.8682L20.647 2.7022C21.989 2.5852 22.69 3.0522 23.215 3.4602L25.959 5.4432C26.076 5.5022 26.367 5.8512 26.017 5.8512L9.497 6.8432L9.293 6.8572ZM7.454 27.4902V10.1102C7.454 9.3512 7.688 9.0012 8.388 8.9422L27.359 7.8342C28.002 7.7762 28.294 8.1842 28.294 8.9422V26.2062C28.294 26.9652 28.177 27.6072 27.126 27.6652L8.972 28.7152C7.922 28.7732 7.454 28.4242 7.454 27.4902ZM25.376 11.0422C25.492 11.5672 25.376 12.0922 24.849 12.1522L23.975 12.3252V25.1572C23.215 25.5652 22.515 25.7982 21.931 25.7982C20.997 25.7982 20.763 25.5062 20.063 24.6322L14.342 15.6502V24.3402L16.152 24.7492C16.152 24.7492 16.152 25.7992 14.692 25.7992L10.665 26.0322C10.548 25.7982 10.665 25.2152 11.073 25.0992L12.124 24.8082V13.3182L10.665 13.2002C10.548 12.6752 10.839 11.9172 11.657 11.8592L15.977 11.5672L21.931 20.6672V12.6172L20.413 12.4432C20.297 11.8002 20.763 11.3342 21.347 11.2762L25.376 11.0422Z" fill="black"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.8525 18.68C12.6687 18.4375 13.9937 18.0675 15.51 17.9663C14.7007 16.039 14.3729 13.9436 14.555 11.8613C14.7587 9.79752 15.4975 8.06377 16.2112 6.59877L16.645 5.70627L17.205 4.55877C17.4987 3.93377 17.715 3.38627 17.8175 2.86377C17.9187 2.35502 17.9187 1.90877 17.7925 1.47502C17.6637 1.04127 17.4087 0.582519 16.8987 0.073769C16.5564 -0.0184991 16.1963 -0.0237195 15.8514 0.0585822C15.5065 0.140884 15.1876 0.308097 14.9237 0.545019L8.3225 6.48252C7.95209 6.81468 7.70898 7.26552 7.635 7.75752L7.0725 11.53C9.20091 13.5086 10.8377 15.957 11.8525 18.68ZM6.80625 13.25L6.67875 13.6325L3.18625 21.4075C3.01261 21.7987 2.95877 22.2327 3.03152 22.6545C3.10427 23.0763 3.30034 23.4671 3.595 23.7775L9.0875 29.4225C10.2319 27.8406 10.9382 25.9845 11.1351 24.042C11.332 22.0995 11.0124 20.1394 10.2087 18.36C9.38578 16.4688 8.23375 14.7387 6.80625 13.25Z" fill="#A88BFA"/>
|
||||
<path d="M10.3624 30.0988L10.6549 30.1238C11.6874 30.1488 13.4461 30.2513 14.8599 30.5063C16.0199 30.7226 18.3261 31.3601 20.2124 31.9076C21.6524 32.3413 23.1436 31.1826 23.3474 29.6913C23.5011 28.6076 23.7936 27.3838 24.3161 26.2501C23.6993 24.2904 22.5837 22.5248 21.0786 21.1263C20.0366 20.2208 18.752 19.6406 17.3836 19.4576C15.6525 19.2856 13.9047 19.4898 12.2599 20.0563C12.676 21.7697 12.7207 23.5523 12.391 25.2844C12.0614 27.0165 11.365 28.6581 10.3486 30.0988H10.3611H10.3624Z" fill="#A88BFA"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_187_41)">
|
||||
<path d="M16 0C7.16296 0 0 7.16296 0 16C0 20.4178 1.79111 24.4178 4.68593 27.3141L1.63852 30.3615C1.03407 30.9659 1.46222 32 2.31704 32H16C24.837 32 32 24.837 32 16C32 7.16296 24.837 0 16 0Z" fill="#FF4500"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 9.1 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.73015 20.1649C6.73015 22.0188 5.23174 23.5173 3.37777 23.5173C1.5238 23.5173 0.0253906 22.0188 0.0253906 20.1649C0.0253906 18.3109 1.5238 16.8125 3.37777 16.8125H6.73015V20.1649ZM8.40634 20.1649C8.40634 18.3109 9.90475 16.8125 11.7587 16.8125C13.6127 16.8125 15.1111 18.3109 15.1111 20.1649V28.5458C15.1111 30.3998 13.6127 31.8982 11.7587 31.8982C9.90475 31.8982 8.40634 30.3998 8.40634 28.5458V20.1649Z" fill="#E01E5A"/>
|
||||
<path d="M11.7587 6.70476C9.90476 6.70476 8.40635 5.20635 8.40635 3.35238C8.40635 1.49841 9.90476 0 11.7587 0C13.6127 0 15.1111 1.49841 15.1111 3.35238V6.70476H11.7587ZM11.7587 8.40635C13.6127 8.40635 15.1111 9.90476 15.1111 11.7587C15.1111 13.6127 13.6127 15.1111 11.7587 15.1111H3.35238C1.49841 15.1111 0 13.6127 0 11.7587C0 9.90476 1.49841 8.40635 3.35238 8.40635H11.7587Z" fill="#36C5F0"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M28.875 0H3.125C1.39911 0 0 1.39911 0 3.125V28.875C0 30.6009 1.39911 32 3.125 32H28.875C30.6009 32 32 30.6009 32 28.875V3.125C32 1.39911 30.6009 0 28.875 0Z" fill="url(#paint0_linear_187_69)"/>
|
||||
<path d="M26.3401 4.16016H19.5801C18.7517 4.16016 18.0801 4.83173 18.0801 5.66016V16.6602C18.0801 17.4886 18.7517 18.1602 19.5801 18.1602H26.3401C27.1685 18.1602 27.8401 17.4886 27.8401 16.6602V5.66016C27.8401 4.83173 27.1685 4.16016 26.3401 4.16016Z" fill="white"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1,3 +1,8 @@
|
||||
<!--
|
||||
- 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/.
|
||||
-->
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 0H32V32H0V0Z" fill="black"/>
|
||||
<path d="M18.2856 14.1635L27.2216 4H25.1048L17.3424 12.823L11.1472 4H4L13.3704 17.3433L4 28H6.1168L14.3088 18.6806L20.8528 28H28M6.8808 5.5619H10.1328L25.1032 26.5148H21.8504" fill="white"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 335 B After Width: | Height: | Size: 555 B |
@@ -194,20 +194,26 @@ class nsKeyShortcutModifiers {
|
||||
|
||||
toUserString() {
|
||||
let str = '';
|
||||
const separation = AppConstants.platform == 'macosx' ? ' ' : '+';
|
||||
if (this.#control && !this.#accel) {
|
||||
str += 'Ctrl+';
|
||||
str += AppConstants.platform == 'macosx' ? '⌃' : 'Ctrl';
|
||||
str += separation;
|
||||
}
|
||||
if (this.#alt) {
|
||||
str += AppConstants.platform == 'macosx' ? 'Option+' : 'Alt+';
|
||||
str += AppConstants.platform == 'macosx' ? '⌥' : 'Alt';
|
||||
str += separation;
|
||||
}
|
||||
if (this.#shift) {
|
||||
str += 'Shift+';
|
||||
str += '⇧';
|
||||
str += separation;
|
||||
}
|
||||
if (this.#meta) {
|
||||
str += AppConstants.platform == 'macosx' ? 'Cmd+' : 'Win+';
|
||||
str += AppConstants.platform == 'macosx' ? '⌘' : 'Win';
|
||||
str += separation;
|
||||
}
|
||||
if (this.#accel) {
|
||||
str += AppConstants.platform == 'macosx' ? 'Cmd+' : 'Ctrl+';
|
||||
str += AppConstants.platform == 'macosx' ? '⌘' : 'Ctrl';
|
||||
str += separation;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
@@ -546,7 +552,32 @@ class KeyShortcut {
|
||||
// Get the key from the value
|
||||
for (let [key, value] of Object.entries(KEYCODE_MAP)) {
|
||||
if (value == this.#keycode) {
|
||||
str += key.toLowerCase();
|
||||
const normalizedKey = key.toLowerCase();
|
||||
switch (normalizedKey) {
|
||||
case 'arrowleft':
|
||||
str += '←';
|
||||
break;
|
||||
case 'arrowright':
|
||||
str += '→';
|
||||
break;
|
||||
case 'arrowup':
|
||||
str += '↑';
|
||||
break;
|
||||
case 'arrowdown':
|
||||
str += '↓';
|
||||
break;
|
||||
case 'escape':
|
||||
str += AppConstants.platform == 'macosx' ? '⎋' : 'Esc';
|
||||
break;
|
||||
case 'enter':
|
||||
str += AppConstants.platform == 'macosx' ? '↩' : 'Enter';
|
||||
break;
|
||||
case 'space':
|
||||
str += AppConstants.platform == 'macosx' ? '␣' : 'Space';
|
||||
break;
|
||||
default:
|
||||
str += normalizedKey;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1315,6 +1346,28 @@ var gZenKeyboardShortcutsManager = {
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
getShortcutFromCommand(command) {
|
||||
for (let targetShortcut of this._currentShortcutList) {
|
||||
if (targetShortcut.getAction() == command) {
|
||||
return targetShortcut;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the shortcut as a display format for a given action/command.
|
||||
* @param {string} command The action/command to search for
|
||||
* @returns {string|null} The shortcut as a string or null if not found
|
||||
*/
|
||||
getShortcutDisplayFromCommand(command) {
|
||||
const shortcut = this.getShortcutFromCommand(command);
|
||||
if (shortcut) {
|
||||
return shortcut.toUserString();
|
||||
}
|
||||
return null;
|
||||
},
|
||||
};
|
||||
|
||||
document.addEventListener(
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#
|
||||
# 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/.
|
||||
@@ -8,5 +7,6 @@ DIRS += [
|
||||
"glance",
|
||||
"mods",
|
||||
"tests",
|
||||
"urlbar",
|
||||
"toolkit",
|
||||
]
|
||||
|
||||
@@ -513,7 +513,11 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
|
||||
const wrapper = this.overlay?.parentNode;
|
||||
if (!wrapper) return;
|
||||
|
||||
wrapper.setAttribute('hidden', !value);
|
||||
if (!value) {
|
||||
wrapper.setAttribute('hidden', 'true');
|
||||
} else {
|
||||
wrapper.removeAttribute('hidden');
|
||||
}
|
||||
}
|
||||
|
||||
enableTabRearrangeView(tabDrag = false) {
|
||||
@@ -896,9 +900,12 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature {
|
||||
tabCount: window.gBrowser.selectedTabs.length,
|
||||
});
|
||||
document.getElementById('context_zenSplitTabs').setAttribute('data-l10n-args', tabCountInfo);
|
||||
document
|
||||
.getElementById('context_zenSplitTabs')
|
||||
.setAttribute('hidden', !this.contextCanSplitTabs());
|
||||
const splitTabs = document.getElementById('context_zenSplitTabs');
|
||||
if (!this.contextCanSplitTabs()) {
|
||||
splitTabs.setAttribute('hidden', 'true');
|
||||
} else {
|
||||
splitTabs.removeAttribute('hidden');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
|
||||
@media (-moz-platform: macos) {
|
||||
--border-radius-medium: 12px;
|
||||
--tab-border-radius: 10px;
|
||||
--tab-border-radius: 8px;
|
||||
}
|
||||
|
||||
min-width: var(--zen-toolbox-min-width);
|
||||
|
||||
@@ -10,6 +10,7 @@ BROWSER_CHROME_MANIFESTS += [
|
||||
"pinned/browser.toml",
|
||||
"split_view/browser.toml",
|
||||
"tabs/browser.toml",
|
||||
"ub-actions/browser.toml",
|
||||
"urlbar/browser.toml",
|
||||
"welcome/browser.toml",
|
||||
"workspaces/browser.toml",
|
||||
|
||||
5
src/zen/tests/ub-actions/browser.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
# 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/.
|
||||
|
||||
["browser_ub_actions_search.js"]
|
||||
23
src/zen/tests/ub-actions/browser_ub_actions_search.js
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
https://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
ChromeUtils.defineESModuleGetters(this, {
|
||||
globalActions: 'resource:///modules/ZenUBGlobalActions.sys.mjs',
|
||||
UrlbarTestUtils: 'resource://testing-common/UrlbarTestUtils.sys.mjs',
|
||||
});
|
||||
|
||||
add_task(async function test_Ub_Actions_Search() {
|
||||
for (const action of globalActions) {
|
||||
const label = action.label;
|
||||
await UrlbarTestUtils.promiseAutocompleteResultPopup({
|
||||
window,
|
||||
waitForFocus,
|
||||
value: label,
|
||||
});
|
||||
let { result } = await UrlbarTestUtils.getRowAt(window, Math.min(action.suggestedIndex, 1));
|
||||
Assert.equal(result.providerName, 'ZenUrlbarProviderGlobalActions');
|
||||
Assert.equal(result.payload.title, label);
|
||||
}
|
||||
});
|
||||
270
src/zen/urlbar/ZenUBActionsProvider.sys.mjs
Normal file
@@ -0,0 +1,270 @@
|
||||
/* 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/. */
|
||||
|
||||
import { XPCOMUtils } from 'resource://gre/modules/XPCOMUtils.sys.mjs';
|
||||
import { UrlbarProvider, UrlbarUtils } from 'resource:///modules/UrlbarUtils.sys.mjs';
|
||||
import { globalActions } from 'resource:///modules/ZenUBGlobalActions.sys.mjs';
|
||||
|
||||
const lazy = {};
|
||||
|
||||
const DYNAMIC_TYPE_NAME = 'zen-actions';
|
||||
|
||||
// The suggestion index of the actions row within the urlbar results.
|
||||
const MAX_RECENT_ACTIONS = 5;
|
||||
const MINIMUM_QUERY_SCORE = 92;
|
||||
|
||||
const EN_LOCALE_MATCH = /^en(-.*)$/;
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
UrlbarResult: 'resource:///modules/UrlbarResult.sys.mjs',
|
||||
UrlbarTokenizer: 'resource:///modules/UrlbarTokenizer.sys.mjs',
|
||||
QueryScorer: 'resource:///modules/UrlbarProviderInterventions.sys.mjs',
|
||||
BrowserWindowTracker: 'resource:///modules/BrowserWindowTracker.sys.mjs',
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
'enabledPref',
|
||||
'zen.urlbar.suggestions.quick-actions',
|
||||
true
|
||||
);
|
||||
|
||||
/**
|
||||
* A provider that lets the user view all available global actions for a query.
|
||||
*/
|
||||
export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
|
||||
get name() {
|
||||
return 'ZenUrlbarProviderGlobalActions';
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Values<typeof UrlbarUtils.PROVIDER_TYPE>}
|
||||
*/
|
||||
get type() {
|
||||
return UrlbarUtils.PROVIDER_TYPE.HEURISTIC;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether this provider should be invoked for the given context.
|
||||
* If this method returns false, the providers manager won't start a query
|
||||
* with this provider, to save on resources.
|
||||
*
|
||||
* @param {UrlbarQueryContext} queryContext The query context object
|
||||
*/
|
||||
async isActive(queryContext) {
|
||||
return (
|
||||
lazy.enabledPref &&
|
||||
queryContext.searchString &&
|
||||
queryContext.searchString.length < UrlbarUtils.MAX_TEXT_LENGTH &&
|
||||
queryContext.searchString.length > 2 &&
|
||||
!lazy.UrlbarTokenizer.REGEXP_LIKE_PROTOCOL.test(queryContext.searchString) &&
|
||||
EN_LOCALE_MATCH.test(Services.locale.appLocaleAsBCP47)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns All the available global actions.
|
||||
*/
|
||||
get #availableActions() {
|
||||
return globalActions.filter((a) =>
|
||||
typeof a.isAvailable === 'function' ? a.isAvailable() : true
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a search query amongst the available global actions.
|
||||
*
|
||||
* @param {string} queryContext The query context object
|
||||
*/
|
||||
#findMatchingActions(query) {
|
||||
const actions = this.#availableActions;
|
||||
let results = [];
|
||||
for (let action of actions) {
|
||||
const label = action.label;
|
||||
const score = this.#calculateFuzzyScore(label, query);
|
||||
if (score > MINIMUM_QUERY_SCORE) {
|
||||
results.push({
|
||||
score,
|
||||
action,
|
||||
});
|
||||
}
|
||||
}
|
||||
results.sort((a, b) => b.score - a.score);
|
||||
return results.slice(0, MAX_RECENT_ACTIONS).map((r) => r.action);
|
||||
}
|
||||
|
||||
/**
|
||||
* A VS Code-style fuzzy scoring algorithm.
|
||||
* @param {string} target The string to score against.
|
||||
* @param {string} query The user's search query.
|
||||
* @returns {number} A score representing the match quality.
|
||||
*
|
||||
* @credits Thanks a lot @BibekBhusal0 on GitHub for this implementation!
|
||||
*/
|
||||
#calculateFuzzyScore(target, query) {
|
||||
if (!target || !query) return 0;
|
||||
const targetLower = target.toLowerCase();
|
||||
const queryLower = query.toLowerCase();
|
||||
const targetLen = target.length;
|
||||
const queryLen = query.length;
|
||||
if (queryLen > targetLen) return 0;
|
||||
if (queryLen === 0) return 0;
|
||||
// 1. Exact match gets the highest score.
|
||||
if (targetLower === queryLower) {
|
||||
return 200;
|
||||
}
|
||||
// 2. Exact prefix matches are heavily prioritized.
|
||||
if (targetLower.startsWith(queryLower)) {
|
||||
return 100 + queryLen;
|
||||
}
|
||||
let score = 0;
|
||||
let queryIndex = 0;
|
||||
let lastMatchIndex = -1;
|
||||
let consecutiveMatches = 0;
|
||||
for (let targetIndex = 0; targetIndex < targetLen; targetIndex++) {
|
||||
if (queryIndex < queryLen && targetLower[targetIndex] === queryLower[queryIndex]) {
|
||||
let bonus = 10;
|
||||
// Bonus for matching at the beginning of a word
|
||||
if (targetIndex === 0 || [' ', '-', '_'].includes(targetLower[targetIndex - 1])) {
|
||||
bonus += 15;
|
||||
}
|
||||
// Bonus for consecutive matches
|
||||
if (lastMatchIndex === targetIndex - 1) {
|
||||
consecutiveMatches++;
|
||||
bonus += 20 * consecutiveMatches;
|
||||
} else {
|
||||
consecutiveMatches = 0;
|
||||
}
|
||||
// Penalty for distance from the last match
|
||||
if (lastMatchIndex !== -1) {
|
||||
const distance = targetIndex - lastMatchIndex;
|
||||
bonus -= Math.min(distance - 1, 10); // Cap penalty
|
||||
}
|
||||
score += bonus;
|
||||
lastMatchIndex = targetIndex;
|
||||
queryIndex++;
|
||||
}
|
||||
}
|
||||
return queryIndex === queryLen ? score : 0;
|
||||
}
|
||||
|
||||
async startQuery(queryContext, addCallback) {
|
||||
const query = queryContext.searchString.trim().toLowerCase();
|
||||
if (!query) {
|
||||
return;
|
||||
}
|
||||
|
||||
const actionsResults = this.#findMatchingActions(query);
|
||||
if (!actionsResults.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ownerGlobal = lazy.BrowserWindowTracker.getTopWindow();
|
||||
for (const action of actionsResults) {
|
||||
const [payload, payloadHighlights] = lazy.UrlbarResult.payloadAndSimpleHighlights([], {
|
||||
suggestion: action.label,
|
||||
title: action.label,
|
||||
query: queryContext.searchString,
|
||||
zenCommand: action.command,
|
||||
dynamicType: DYNAMIC_TYPE_NAME,
|
||||
zenAction: true,
|
||||
icon: action.icon || 'chrome://browser/skin/trending.svg',
|
||||
shortcutContent: ownerGlobal.gZenKeyboardShortcutsManager.getShortcutDisplayFromCommand(
|
||||
action.command
|
||||
),
|
||||
});
|
||||
|
||||
let result = new lazy.UrlbarResult(
|
||||
UrlbarUtils.RESULT_TYPE.DYNAMIC,
|
||||
UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
|
||||
payload,
|
||||
payloadHighlights
|
||||
);
|
||||
if (typeof action.suggestedIndex === 'number') {
|
||||
result.suggestedIndex = action.suggestedIndex;
|
||||
}
|
||||
addCallback(this, result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the provider's priority.
|
||||
*
|
||||
* @returns {number} The provider's priority for the given query.
|
||||
*/
|
||||
getPriority() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is called only for dynamic result types, when the urlbar view updates
|
||||
* the view of one of the results of the provider. It should return an object
|
||||
* describing the view update.
|
||||
*
|
||||
* @param {UrlbarResult} result The result whose view will be updated.
|
||||
* @returns {object} An object describing the view update.
|
||||
*/
|
||||
getViewUpdate(result) {
|
||||
return {
|
||||
icon: {
|
||||
attributes: {
|
||||
src: result.payload.icon || 'chrome://browser/skin/trending.svg',
|
||||
},
|
||||
},
|
||||
titleStrong: {
|
||||
textContent: result.payload.title,
|
||||
attributes: { dir: 'ltr' },
|
||||
},
|
||||
shortcutContent: {
|
||||
textContent: result.payload.shortcutContent || '',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
getViewTemplate() {
|
||||
return {
|
||||
attributes: {
|
||||
selectable: true,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: 'icon',
|
||||
tag: 'img',
|
||||
classList: ['urlbarView-favicon'],
|
||||
},
|
||||
{
|
||||
name: 'title',
|
||||
tag: 'span',
|
||||
classList: ['urlbarView-title'],
|
||||
children: [
|
||||
{
|
||||
name: 'titleStrong',
|
||||
tag: 'strong',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'shortcutContent',
|
||||
tag: 'span',
|
||||
classList: ['urlbarView-shortcutContent'],
|
||||
},
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
onEngagement(queryContext, controller, details) {
|
||||
const result = details.result;
|
||||
const payload = result.payload;
|
||||
const command = payload.zenCommand;
|
||||
if (!command) {
|
||||
return;
|
||||
}
|
||||
const ownerGlobal = details.element.ownerGlobal;
|
||||
const commandToRun = ownerGlobal.document.getElementById(command);
|
||||
if (commandToRun) {
|
||||
ownerGlobal.gBrowser.selectedBrowser.focus();
|
||||
commandToRun.doCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
18
src/zen/urlbar/ZenUBGlobalActions.sys.mjs
Normal file
@@ -0,0 +1,18 @@
|
||||
/* 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/. */
|
||||
|
||||
export const globalActions = [
|
||||
{
|
||||
label: 'Toggle Compact Mode',
|
||||
command: 'cmd_zenCompactModeToggle',
|
||||
icon: 'chrome://browser/skin/zen-icons/sidebar.svg',
|
||||
suggestedIndex: 0,
|
||||
},
|
||||
{
|
||||
label: 'Open Theme Picker',
|
||||
command: 'cmd_zenOpenZenThemePicker',
|
||||
icon: 'chrome://browser/skin/zen-icons/edit-theme.svg',
|
||||
suggestedIndex: 4,
|
||||
},
|
||||
];
|
||||
20
src/zen/urlbar/ZenUBProvider.sys.mjs
Normal file
@@ -0,0 +1,20 @@
|
||||
/* 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/. */
|
||||
|
||||
import { UrlbarProvidersManager } from 'resource:///modules/UrlbarProvidersManager.sys.mjs';
|
||||
|
||||
const providers = {};
|
||||
ChromeUtils.defineESModuleGetters(providers, {
|
||||
ZenUrlbarProviderGlobalActions: 'resource:///modules/ZenUBActionsProvider.sys.mjs',
|
||||
});
|
||||
|
||||
export function registerZenUrlbarProviders() {
|
||||
for (let i = 0; i < Object.keys(providers).length; i++) {
|
||||
const provider = Object.values(providers)[i];
|
||||
const name = Object.keys(providers)[i];
|
||||
if (!UrlbarProvidersManager.getProvider(name)) {
|
||||
UrlbarProvidersManager.registerProvider(new provider());
|
||||
}
|
||||
}
|
||||
}
|
||||
9
src/zen/urlbar/moz.build
Normal file
@@ -0,0 +1,9 @@
|
||||
# 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/.
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
"ZenUBActionsProvider.sys.mjs",
|
||||
"ZenUBGlobalActions.sys.mjs",
|
||||
"ZenUBProvider.sys.mjs",
|
||||
]
|
||||
@@ -1089,7 +1089,10 @@
|
||||
return color.c;
|
||||
}
|
||||
let opacity = this.currentOpacity;
|
||||
if (forToolbar && !this.#allowTransparencyOnSidebar) {
|
||||
if (
|
||||
(forToolbar && !this.#allowTransparencyOnSidebar) ||
|
||||
(!forToolbar && !this.canBeTransparent)
|
||||
) {
|
||||
color = this.blendColors(
|
||||
color.c,
|
||||
this.getToolbarModifiedBaseRaw().slice(0, 3),
|
||||
@@ -1140,11 +1143,13 @@
|
||||
|
||||
const rotation = -45; // TODO: Detect rotation based on the accent color
|
||||
if (themedColors.length === 0) {
|
||||
return forToolbar
|
||||
? this.getToolbarModifiedBase()
|
||||
: this.isDarkMode
|
||||
? 'rgba(0, 0, 0, 0.4)'
|
||||
: 'transparent';
|
||||
const getBrowserBg = () => {
|
||||
if (this.canBeTransparent) {
|
||||
return this.isDarkMode ? 'rgba(0, 0, 0, 0.4)' : 'transparent';
|
||||
}
|
||||
return this.isDarkMode ? '#131313' : '#e9e9e9';
|
||||
};
|
||||
return forToolbar ? this.getToolbarModifiedBase() : getBrowserBg();
|
||||
} else if (themedColors.length === 1) {
|
||||
return this.getSingleRGBColor(themedColors[0], forToolbar);
|
||||
} else {
|
||||
@@ -1400,9 +1405,14 @@
|
||||
? workspaceTheme.gradientColors.length >= nsZenThemePicker.MAX_DOTS
|
||||
: false);
|
||||
}
|
||||
document
|
||||
.getElementById('PanelUI-zen-gradient-generator-color-click-to-add')
|
||||
.toggleAttribute('hidden', workspaceTheme.gradientColors.length > 0);
|
||||
const clickToAdd = browser.document.getElementById(
|
||||
'PanelUI-zen-gradient-generator-color-click-to-add'
|
||||
);
|
||||
if (workspaceTheme.gradientColors.length > 0) {
|
||||
clickToAdd.setAttribute('hidden', 'true');
|
||||
} else {
|
||||
clickToAdd.removeAttribute('hidden');
|
||||
}
|
||||
|
||||
opacitySlider.value = browser.gZenThemePicker.currentOpacity;
|
||||
const textureSelectWrapper = browser.document.getElementById(
|
||||
|
||||