diff --git a/.github/workflows/macos-release-build.yml b/.github/workflows/macos-release-build.yml index 66f2789f0..b3395f0f1 100644 --- a/.github/workflows/macos-release-build.yml +++ b/.github/workflows/macos-release-build.yml @@ -48,6 +48,12 @@ jobs: with: node-version-file: ".nvmrc" + - name: Log SDK versions + run: | + ls /Library/Developer/CommandLineTools/SDKs/ + xcrun --show-sdk-version + xcrun --show-sdk-path + - name: Run sccache-cache uses: mozilla-actions/sccache-action@main if: ${{ inputs.use-sccache }} diff --git a/README.md b/README.md index b79094c20..cb51a0f61 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne ### Firefox Versions -- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `150.0.3`! 🚀 -- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0`! +- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `151.0.2`! 🚀 +- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 151.0.2`! ### Contributing diff --git a/build/firefox-cache/l10n-last-commit-hash b/build/firefox-cache/l10n-last-commit-hash index 0439d0657..7bcc95dc3 100644 --- a/build/firefox-cache/l10n-last-commit-hash +++ b/build/firefox-cache/l10n-last-commit-hash @@ -1 +1 @@ -0c5fe3a13813ee9cee3324047c8f0294bb8f2aff \ No newline at end of file +05272df13c2e4f435b4e0a706715f302b09ef829 \ No newline at end of file diff --git a/configs/macos/mozconfig b/configs/macos/mozconfig index 4b2e503ea..c838095cd 100644 --- a/configs/macos/mozconfig +++ b/configs/macos/mozconfig @@ -8,7 +8,13 @@ ac_add_options --disable-dmd ac_add_options --enable-eme=widevine if test "$ZEN_RELEASE"; then - ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX26.4.sdk + ALLOWED_SDKS="26.5 26.4" + for SDK in $ALLOWED_SDKS; do + if [ -d "/Library/Developer/CommandLineTools/SDKs/MacOSX${SDK}.sdk" ]; then + ac_add_options --with-macos-sdk=/Library/Developer/CommandLineTools/SDKs/MacOSX${SDK}.sdk + break + fi + done fi if test "$ZEN_RELEASE"; then diff --git a/locales/ar/browser/browser/preferences/zen-preferences.ftl b/locales/ar/browser/browser/preferences/zen-preferences.ftl index c8d4332a5..a7b2acc92 100644 --- a/locales/ar/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ar/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = التبديل إلى مساحة العمل 9 zen-workspace-shortcut-switch-10 = التبديل إلى مساحة العمل 10 zen-workspace-shortcut-forward = إلى الأمام فضاء العمل zen-workspace-shortcut-backward = مساحة العمل الخلفية +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = تبديل عرض شريط العرض zen-pinned-tab-shortcut-reset = إعادة تعيين علامة التبويب المثبتة إلى عنوان URL المثبت zen-split-view-shortcut-grid = تبديل عرض تقسيم الشبكة @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = قلب إمكانية الوصول zen-close-all-unpinned-tabs-shortcut = إغلاق جميع علامات التبويب الغير مثبتة zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/ar/browser/browser/zen-boosts.ftl b/locales/ar/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/ar/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/bg/browser/browser/preferences/zen-preferences.ftl b/locales/bg/browser/browser/preferences/zen-preferences.ftl index ed26f72b8..a43ff8124 100644 --- a/locales/bg/browser/browser/preferences/zen-preferences.ftl +++ b/locales/bg/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/bg/browser/browser/zen-boosts.ftl b/locales/bg/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/bg/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/bs/browser/browser/preferences/zen-preferences.ftl b/locales/bs/browser/browser/preferences/zen-preferences.ftl index ed26f72b8..a43ff8124 100644 --- a/locales/bs/browser/browser/preferences/zen-preferences.ftl +++ b/locales/bs/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/bs/browser/browser/zen-boosts.ftl b/locales/bs/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/bs/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ca/browser/browser/preferences/zen-preferences.ftl b/locales/ca/browser/browser/preferences/zen-preferences.ftl index 4b9b2c758..853f16287 100644 --- a/locales/ca/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ca/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Canvia a l'espai de treball 9 zen-workspace-shortcut-switch-10 = Canvia a l'espai de treball 10 zen-workspace-shortcut-forward = Espai de treball següent zen-workspace-shortcut-backward = Espai de treball anterior +zen-workspace-shortcut-create = Crea un nou espai de treball zen-sidebar-shortcut-toggle = Commuta l'amplada de la barra lateral zen-pinned-tab-shortcut-reset = Restableix la pestanya fixada a l'URL fixat zen-split-view-shortcut-grid = Commuta la quadrícula de la vista dividida @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Commuta l'accessibilitat zen-close-all-unpinned-tabs-shortcut = Tanca totes les pestanyes no fixades zen-new-unsynced-window-shortcut = Nova finestra en blanc zen-duplicate-tab-shortcut = Duplica la pestanya +zen-key-find-selection = Cerca la selecció diff --git a/locales/ca/browser/browser/zen-boosts.ftl b/locales/ca/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..588c417b0 --- /dev/null +++ b/locales/ca/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Reanomena la millora +zen-boost-edit-shuffle = + .label = Barreja les vibracions +zen-boost-edit-reset = + .label = Restableix totes les edicions +zen-boost-edit-delete = + .label = Suprimeix la millora +zen-boost-size = Mida +zen-boost-case = Cas +zen-boost-zap = Amaga +zen-boost-code = Codi +zen-boost-back = Enrere +zen-boost-shuffle = + .tooltiptext = Barreja les configuracions de millora +zen-boost-invert = + .tooltiptext = Inversió intel·ligent dels colors +zen-boost-controls = + .tooltiptext = Controls de color avançats +zen-boost-disable = + .tooltiptext = Desactiva els ajustos de color +zen-boost-text-case-toggle = + .tooltiptext = Commuta majúscules/minúscules +zen-boost-css-picker = + .tooltiptext = Trieu el selector +zen-boost-css-inspector = + .tooltiptext = Obre l'inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brillantor +zen-bootst-color-original-saturation = Saturació original +zen-add-zap-helper = Feu clic als elements de la pàgina per amagar-los +zen-remove-zap-helper = ← Feu clic per mostrar +zen-select-this = Insereix un selector per a això +zen-select-related = Insereix un selector per a elements relacionats +zen-select-cancel = Cancel·la +zen-zap-this = Amaga això +zen-zap-related = Amaga tots els elements relacionats +zen-zap-cancel = Cancel·la +zen-zap-done = Fet +zen-unzap-tooltip = + { $elementCount -> + [0] No hi ha elements amagats + [1] { $elementCount } element amagat + *[other] { $elementCount } elements amagats + } +zen-boost-save = + .label = Exporta la millora +zen-boost-load = + .label = Importa la millora +zen-panel-ui-boosts-exported-message = S'ha exportat la millora! +zen-site-data-boosts = Millores +zen-site-data-create-boost = + .tooltiptext = Creu una nova millora +zen-boost-rename-boost-prompt = Voleu reanomenar la millora? diff --git a/locales/cs/browser/browser/preferences/zen-preferences.ftl b/locales/cs/browser/browser/preferences/zen-preferences.ftl index fdacf7348..b0194f747 100644 --- a/locales/cs/browser/browser/preferences/zen-preferences.ftl +++ b/locales/cs/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Přepnout na pracovní prostor 9 zen-workspace-shortcut-switch-10 = Přepnout do pracovního prostoru 10 zen-workspace-shortcut-forward = Přeposlat pracovní prostor zen-workspace-shortcut-backward = Zpětný pracovní prostor +zen-workspace-shortcut-create = Nový Workspace zen-sidebar-shortcut-toggle = Přepnout šířku postranního panelu zen-pinned-tab-shortcut-reset = Obnovit připnuté záložky na připnuté URL zen-split-view-shortcut-grid = Přepnout rozdělený pohled v mřížce @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Přepnout přístupnost zen-close-all-unpinned-tabs-shortcut = Zavřít všechny nepřipnuté panely zen-new-unsynced-window-shortcut = Nové nesynchronizované okno zen-duplicate-tab-shortcut = Duplikovat panel +zen-key-find-selection = Najít Část diff --git a/locales/cs/browser/browser/zen-boosts.ftl b/locales/cs/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/cs/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/cy/browser/browser/preferences/zen-preferences.ftl b/locales/cy/browser/browser/preferences/zen-preferences.ftl index 080a9aa69..2a24fed35 100644 --- a/locales/cy/browser/browser/preferences/zen-preferences.ftl +++ b/locales/cy/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Symud i Gofod Gwaith 9 zen-workspace-shortcut-switch-10 = Symud i Gofod Gwaith 10 zen-workspace-shortcut-forward = Gofod Gwaith Ymlaen zen-workspace-shortcut-backward = Gofod Gwaith Nôl +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toglo Lled y Bar Ochr zen-pinned-tab-shortcut-reset = Ailosod y Tab wedi'i Binio i URL wedi'i Binio zen-split-view-shortcut-grid = Toglo Grid Golwg Hollt @@ -317,4 +318,5 @@ zen-devtools-toggle-dom-shortcut = Toglo DOM zen-devtools-toggle-accessibility-shortcut = Toglo Hygyrchedd zen-close-all-unpinned-tabs-shortcut = Cau Pob Tab Heb ei Binio zen-new-unsynced-window-shortcut = Ffenestr Wag Newydd -zen-duplicate-tab-shortcut = Duplicate Tab +zen-duplicate-tab-shortcut = Tab Dyblyg +zen-key-find-selection = Find Selection diff --git a/locales/cy/browser/browser/zen-boosts.ftl b/locales/cy/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/cy/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/cy/browser/browser/zen-general.ftl b/locales/cy/browser/browser/zen-general.ftl index aa8a8074e..752f932a3 100644 --- a/locales/cy/browser/browser/zen-general.ftl +++ b/locales/cy/browser/browser/zen-general.ftl @@ -50,7 +50,7 @@ zen-pinned-tab-replaced = Mae URL y tab wedi'i binio wedi'i newid i'r URL gyfred zen-tabs-renamed = Mae'r tab wedi cael ei ailenwi'n llwyddiannus! zen-background-tab-opened-toast = Tab cefndir newydd wedi'i agor! zen-workspace-renamed-toast = Mae'r Man Gwaith wedi cael ei ailenwi'n llwyddiannus! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = Methu ychwanegu mwy o baneli at y golwg hollt! zen-toggle-compact-mode-button = .label = Modd Cryno .tooltiptext = Togglo Modd Cryno diff --git a/locales/cy/browser/browser/zen-split-view.ftl b/locales/cy/browser/browser/zen-split-view.ftl index e0aa8889e..34035ddca 100644 --- a/locales/cy/browser/browser/zen-split-view.ftl +++ b/locales/cy/browser/browser/zen-split-view.ftl @@ -5,9 +5,9 @@ tab-zen-split-tabs = .label = { $tabCount -> - [-1] Split out tab - [1] Add split view... - *[other] Join { $tabCount } Tabs + [-1] Rhannu tab + [1] Ychwanegu golwg hollt... + *[other] Uno { $tabCount } Tab } .accesskey = H zen-split-link = diff --git a/locales/cy/browser/browser/zen-vertical-tabs.ftl b/locales/cy/browser/browser/zen-vertical-tabs.ftl index 688e6aa86..b2e15ef5f 100644 --- a/locales/cy/browser/browser/zen-vertical-tabs.ftl +++ b/locales/cy/browser/browser/zen-vertical-tabs.ftl @@ -18,8 +18,8 @@ zen-toolbar-context-compact-mode-hide-both = .label = Cuddio'r ddau .accesskey = C zen-toolbar-context-move-to-folder = - .label = Move to Folder... - .accesskey = M + .label = Symud i Ffolder... + .accesskey = S zen-toolbar-context-new-folder = .label = Ffolder Newydd .accesskey = N diff --git a/locales/da/browser/browser/preferences/zen-preferences.ftl b/locales/da/browser/browser/preferences/zen-preferences.ftl index c710dc69c..9e90de776 100644 --- a/locales/da/browser/browser/preferences/zen-preferences.ftl +++ b/locales/da/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Skift til arbejdsområde 9 zen-workspace-shortcut-switch-10 = Skift til arbejdsområde 10 zen-workspace-shortcut-forward = Fremad Arbejdsområde zen-workspace-shortcut-backward = Bagudrettet Arbejdsrum +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Skift sidepanelets bredde zen-pinned-tab-shortcut-reset = Nulstil fastgjort fane til fastgjort URL zen-split-view-shortcut-grid = Opdelt visning i gitter til/fra @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Vis/skjul Tilgængelighed zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/da/browser/browser/zen-boosts.ftl b/locales/da/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/da/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/de/browser/browser/preferences/zen-preferences.ftl b/locales/de/browser/browser/preferences/zen-preferences.ftl index 86aff9c81..d58554d05 100644 --- a/locales/de/browser/browser/preferences/zen-preferences.ftl +++ b/locales/de/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Zu Arbeitsbereich 9 wechseln zen-workspace-shortcut-switch-10 = Zu Arbeitsbereich 10 wechseln zen-workspace-shortcut-forward = Zum nächsten Arbeitsbereich wechseln zen-workspace-shortcut-backward = Zum vorherigen Arbeitsbereich wechseln +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Seitenleisten-Breite umschalten zen-pinned-tab-shortcut-reset = Angehefteten Tab zurücksetzen zen-split-view-shortcut-grid = Raster-Layout für geteilte Ansicht umschalten @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Barrierefreiheit umschalten zen-close-all-unpinned-tabs-shortcut = Alle nicht angehefteten Tabs schließen zen-new-unsynced-window-shortcut = Neues leeres Fenster zen-duplicate-tab-shortcut = Tab duplizieren +zen-key-find-selection = Find Selection diff --git a/locales/de/browser/browser/zen-boosts.ftl b/locales/de/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..21d9907ab --- /dev/null +++ b/locales/de/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Boost umbenennen +zen-boost-edit-shuffle = + .label = Vibes mischen +zen-boost-edit-reset = + .label = Alle Änderungen zurücksetzen +zen-boost-edit-delete = + .label = Boost löschen +zen-boost-size = Größe +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Zurück +zen-boost-shuffle = + .tooltiptext = Boost-Einstellungen mischen +zen-boost-invert = + .tooltiptext = Farben intelligent invertieren +zen-boost-controls = + .tooltiptext = Erweiterte Farbeinstellungen +zen-boost-disable = + .tooltiptext = Farbanpassungen deaktivieren +zen-boost-text-case-toggle = + .tooltiptext = Schreibweise umschalten +zen-boost-css-picker = + .tooltiptext = Selektor auswählen +zen-boost-css-inspector = + .tooltiptext = Inspektor öffnen +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Helligkeit +zen-bootst-color-original-saturation = Ausgangssättigung +zen-add-zap-helper = Klicke auf Elemente auf der Seite, um sie mit Zap zu markieren +zen-remove-zap-helper = ← Erneut klicken zum Wiederherstellen +zen-select-this = Selektor für dieses Element einfügen +zen-select-related = Selektor für verwandte Elemente einfügen +zen-select-cancel = Abbrechen +zen-zap-this = Dieses entfernen +zen-zap-related = Alle verwandten Elemente entfernen +zen-zap-cancel = Abbrechen +zen-zap-done = Fertig +zen-unzap-tooltip = + { $elementCount -> + [0] Keine Elemente entfernt + [1] { $elementCount } Element entfernt + *[other] { $elementCount } Elemente entfernt + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exportiert! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Neuen Boost erstellen +zen-boost-rename-boost-prompt = Boost umbenennen? diff --git a/locales/el/browser/browser/preferences/zen-preferences.ftl b/locales/el/browser/browser/preferences/zen-preferences.ftl index d46b987d2..61e2f7bdd 100644 --- a/locales/el/browser/browser/preferences/zen-preferences.ftl +++ b/locales/el/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Εναλλαγή στο Χώρο Εργασί zen-workspace-shortcut-switch-10 = Εναλλαγή στο Χώρο Εργασίας 10 zen-workspace-shortcut-forward = Προώθηση Χώρου Εργασίας zen-workspace-shortcut-backward = Πίσω Χώρος Εργασίας +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Εναλλαγή Πλάτους Πλευρικής Μπάρας zen-pinned-tab-shortcut-reset = Επαναφορά Καρφιτσωμένης Καρτέλας στο Καρφιτσωμένο URL zen-split-view-shortcut-grid = Εναλλαγή Πλέγματος Διαιρεμένης Προβολής @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Εναλλαγή Προσβασιμ zen-close-all-unpinned-tabs-shortcut = Κλείσιμο όλων των μη καρφιτσωμένων καρτελών zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Διπλασιασμός Καρτέλας +zen-key-find-selection = Find Selection diff --git a/locales/el/browser/browser/zen-boosts.ftl b/locales/el/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/el/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/el/browser/browser/zen-general.ftl b/locales/el/browser/browser/zen-general.ftl index 2966c4ca8..7e9c8c2ff 100644 --- a/locales/el/browser/browser/zen-general.ftl +++ b/locales/el/browser/browser/zen-general.ftl @@ -7,7 +7,7 @@ unified-extensions-description = Οι επεκτάσεις χρησιμοποι tab-context-zen-reset-pinned-tab = .label = { $isEssential -> - [true] Επαναφορά Απαραίτητης Καρτέλας + [true] Επαναφορά Απαραίτητης Καρτέλας *[false] Επαναφορά Καρφιτσωμένης Καρτέλας } .accesskey = R @@ -21,7 +21,7 @@ tab-context-zen-remove-essential = tab-context-zen-replace-pinned-url-with-current = .label = { $isEssential -> - [true] Αντικατάσταση Απαραίτητης διεύθυνσής με την τωρινή + [true] Αντικατάσταση Απαραίτητης διεύθυνσής με την τωρινή *[false] Αντικατάσταση Καρφιτσωμένης διεύθυνσής με την τωρινή } .accesskey = C diff --git a/locales/en-GB/browser/browser/preferences/zen-preferences.ftl b/locales/en-GB/browser/browser/preferences/zen-preferences.ftl index a7e3f3c3f..295f8542e 100644 --- a/locales/en-GB/browser/browser/preferences/zen-preferences.ftl +++ b/locales/en-GB/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/en-GB/browser/browser/zen-boosts.ftl b/locales/en-GB/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/en-GB/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/en-US/browser/browser/preferences/zen-preferences.ftl b/locales/en-US/browser/browser/preferences/zen-preferences.ftl index 6ec2bcf30..b403bad5a 100644 --- a/locales/en-US/browser/browser/preferences/zen-preferences.ftl +++ b/locales/en-US/browser/browser/preferences/zen-preferences.ftl @@ -358,4 +358,5 @@ zen-devtools-toggle-dom-shortcut = Toggle DOM zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Blank Window -zen-duplicate-tab-shortcut = Duplicate Tab \ No newline at end of file +zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/es-ES/browser/browser/preferences/zen-preferences.ftl b/locales/es-ES/browser/browser/preferences/zen-preferences.ftl index 7e81a58a4..305e2f0b6 100644 --- a/locales/es-ES/browser/browser/preferences/zen-preferences.ftl +++ b/locales/es-ES/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Cambiar a espacio de trabajo 9 zen-workspace-shortcut-switch-10 = Cambiar a espacio de trabajo 10 zen-workspace-shortcut-forward = Espacio de trabajo siguiente zen-workspace-shortcut-backward = Espacio de trabajo anterior +zen-workspace-shortcut-create = Crear nuevo espacio de trabajo zen-sidebar-shortcut-toggle = Cambiar el ancho de la barra lateral zen-pinned-tab-shortcut-reset = Restablecer pestaña fijada a la URL fijada zen-split-view-shortcut-grid = Cambiar a vista dividida en cuadrícula @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Alternar accesibilidad zen-close-all-unpinned-tabs-shortcut = Cerrar todas las pestañas sin fijar zen-new-unsynced-window-shortcut = Nueva ventana no sincronizada zen-duplicate-tab-shortcut = Duplicar pestaña +zen-key-find-selection = Encontrar selección diff --git a/locales/es-ES/browser/browser/zen-boosts.ftl b/locales/es-ES/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..3af79691b --- /dev/null +++ b/locales/es-ES/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Renombrar Boost +zen-boost-edit-shuffle = + .label = Ambiente aleatorio +zen-boost-edit-reset = + .label = Restablecer todas las ediciones +zen-boost-edit-delete = + .label = Borrar Boost +zen-boost-size = Tamaño +zen-boost-case = Formato +zen-boost-zap = Borrar +zen-boost-code = Código +zen-boost-back = Atrás +zen-boost-shuffle = + .tooltiptext = Ajustes de Boost aleatorios +zen-boost-invert = + .tooltiptext = Invertir colores +zen-boost-controls = + .tooltiptext = Controles de color avanzados +zen-boost-disable = + .tooltiptext = Desactivar ajustes de color +zen-boost-text-case-toggle = + .tooltiptext = Alternar mayúsculas/minúsculas +zen-boost-css-picker = + .tooltiptext = Escoger selector +zen-boost-css-inspector = + .tooltiptext = Abrir inspector +zen-bootst-color-contrast = Contraste +zen-bootst-color-brightness = Brillo +zen-bootst-color-original-saturation = Saturación original +zen-add-zap-helper = Haga clic en los elementos de la página para borrarlos +zen-remove-zap-helper = ← Clic para deshacer +zen-select-this = Insertar selector para esto +zen-select-related = Insertar selector para relacionados +zen-select-cancel = Cancelar +zen-zap-this = Borrar esto +zen-zap-related = Borrar todos los elementos relacionados +zen-zap-cancel = Cancelar +zen-zap-done = Hecho +zen-unzap-tooltip = + { $elementCount -> + [0] Ningún elemento borrado + [1] { $elementCount } elemento borrado + *[other] { $elementCount } elementos borrados + } +zen-boost-save = + .label = Exportar Boost +zen-boost-load = + .label = Importar Boost +zen-panel-ui-boosts-exported-message = ¡Boost exportado! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Crear nuevo Boost +zen-boost-rename-boost-prompt = ¿Renombrar Boost? diff --git a/locales/et/browser/browser/preferences/zen-preferences.ftl b/locales/et/browser/browser/preferences/zen-preferences.ftl index c15f1b56d..9aa14af82 100644 --- a/locales/et/browser/browser/preferences/zen-preferences.ftl +++ b/locales/et/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Lülitu tööruumi 9 zen-workspace-shortcut-switch-10 = Lülitu tööruumi 10 zen-workspace-shortcut-forward = Järgmine tööruum zen-workspace-shortcut-backward = Eelmine tööruum +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Laienda/ahenda külgriba zen-pinned-tab-shortcut-reset = Lähtesta püsikaart algsele URL-ile zen-split-view-shortcut-grid = Lülita jaotatud vaate ruudustik sisse/välja @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Lülita ligipääsetavuse sektsioon zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/et/browser/browser/zen-boosts.ftl b/locales/et/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/et/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/eu/browser/browser/preferences/zen-preferences.ftl b/locales/eu/browser/browser/preferences/zen-preferences.ftl index 728fc5f2e..cc6082d37 100644 --- a/locales/eu/browser/browser/preferences/zen-preferences.ftl +++ b/locales/eu/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Blank Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/eu/browser/browser/zen-boosts.ftl b/locales/eu/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/eu/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/fa/browser/browser/preferences/zen-preferences.ftl b/locales/fa/browser/browser/preferences/zen-preferences.ftl index 8f63791ca..7ed3131a5 100644 --- a/locales/fa/browser/browser/preferences/zen-preferences.ftl +++ b/locales/fa/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/fa/browser/browser/zen-boosts.ftl b/locales/fa/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/fa/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/fi/browser/browser/preferences/zen-preferences.ftl b/locales/fi/browser/browser/preferences/zen-preferences.ftl index 7f518ecc6..08f86534f 100644 --- a/locales/fi/browser/browser/preferences/zen-preferences.ftl +++ b/locales/fi/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Vaihda työtilaan 9 zen-workspace-shortcut-switch-10 = Vaihda työtilaan 10 zen-workspace-shortcut-forward = Eteenpäin Työtila zen-workspace-shortcut-backward = Taaksepäin Työtila +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Vaihda Sivupalkin Leveys zen-pinned-tab-shortcut-reset = Nollaa kiinnitetty välilehti kiinnitettyyn URL-osoitteeseen zen-split-view-shortcut-grid = Vaihda Jaettu Näkymä ruudukkoon @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Vaihda Esteettömyystilaan zen-close-all-unpinned-tabs-shortcut = Sulje kaikki kiinnittämättömät välilehdet zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/fi/browser/browser/zen-boosts.ftl b/locales/fi/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/fi/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/fr/browser/browser/preferences/zen-preferences.ftl b/locales/fr/browser/browser/preferences/zen-preferences.ftl index f2deb00b8..d5828a59c 100644 --- a/locales/fr/browser/browser/preferences/zen-preferences.ftl +++ b/locales/fr/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Basculer vers l’espace de travail 9 zen-workspace-shortcut-switch-10 = Basculer vers l’espace de travail 10 zen-workspace-shortcut-forward = Espace de travail suivant zen-workspace-shortcut-backward = Espace de travail précédent +zen-workspace-shortcut-create = Créer un nouvel espace de travail zen-sidebar-shortcut-toggle = Afficher/Masquer la largeur de la barre latérale zen-pinned-tab-shortcut-reset = Réinitialiser l’onglet épinglé à l’URL d’origine zen-split-view-shortcut-grid = Activer/désactiver la vue fractionnée en grille @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Afficher l’onglet Accessibilité zen-close-all-unpinned-tabs-shortcut = Fermer tous les onglets non épinglés zen-new-unsynced-window-shortcut = Nouvelle fenêtre vierge zen-duplicate-tab-shortcut = Dupliquer l'onglet +zen-key-find-selection = Rechercher dans la sélection diff --git a/locales/fr/browser/browser/zen-boosts.ftl b/locales/fr/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..d06ad7610 --- /dev/null +++ b/locales/fr/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Renommer le Boost +zen-boost-edit-shuffle = + .label = Ambiances aléatoires +zen-boost-edit-reset = + .label = Réinitialiser toutes les modifications +zen-boost-edit-delete = + .label = Supprimer le Boost +zen-boost-size = Taille +zen-boost-case = Casse +zen-boost-zap = Masquer +zen-boost-code = Code +zen-boost-back = Retour +zen-boost-shuffle = + .tooltiptext = Mélanger les paramètres du Boost +zen-boost-invert = + .tooltiptext = Inversion intelligente des couleurs +zen-boost-controls = + .tooltiptext = Contrôles de couleurs avancés +zen-boost-disable = + .tooltiptext = Désactiver les ajustements de couleur +zen-boost-text-case-toggle = + .tooltiptext = Activer/désactiver la casse +zen-boost-css-picker = + .tooltiptext = Choisir le sélecteur +zen-boost-css-inspector = + .tooltiptext = Ouvrir l'inspecteur +zen-bootst-color-contrast = Contraste +zen-bootst-color-brightness = Luminosité +zen-bootst-color-original-saturation = Saturation originale +zen-add-zap-helper = Cliquez sur des éléments de la page pour les zapper +zen-remove-zap-helper = ← Cliquez pour démasquer +zen-select-this = Insérer un sélecteur pour ceci +zen-select-related = Insérer un sélecteur pour les correspondances +zen-select-cancel = Annuler +zen-zap-this = Masquer ceci +zen-zap-related = Masquer tous les éléments liés +zen-zap-cancel = Annuler +zen-zap-done = Terminé +zen-unzap-tooltip = + { $elementCount -> + [0] Aucun élément masqué + [1] { $elementCount } élément masqué + *[other] { $elementCount } éléments masqués + } +zen-boost-save = + .label = Exporter le Boost +zen-boost-load = + .label = Importer un Boost +zen-panel-ui-boosts-exported-message = Boost exporté ! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Créer un nouveau Boost +zen-boost-rename-boost-prompt = Renommer le Boost ? diff --git a/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl b/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl index 10f96fedd..e370988ce 100644 --- a/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ga-IE/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Athraigh go Spás Oibre 9 zen-workspace-shortcut-switch-10 = Athraigh go Spás Oibre 10 zen-workspace-shortcut-forward = Spás Oibre Ar Aghaidh zen-workspace-shortcut-backward = Spás Oibre Ar Ais +zen-workspace-shortcut-create = Cruthaigh Spás Oibre Nua zen-sidebar-shortcut-toggle = Leithead an Bharra Taoibh a Scoránaigh zen-pinned-tab-shortcut-reset = Athshocraigh an Cluaisín Prionáilte go dtí an URL Prionáilte zen-split-view-shortcut-grid = Eangach Radharc Scoilte a Athsholáthar @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Scoránaigh Inrochtaineacht zen-close-all-unpinned-tabs-shortcut = Dún Gach Cluaisín Gan Phionáil zen-new-unsynced-window-shortcut = Fuinneog Nua Neamhshioncrónaithe zen-duplicate-tab-shortcut = Cluaisín Dúblach +zen-key-find-selection = Aimsigh Rogha diff --git a/locales/ga-IE/browser/browser/zen-boosts.ftl b/locales/ga-IE/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..2491bae48 --- /dev/null +++ b/locales/ga-IE/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Athainmnigh an Treisiú +zen-boost-edit-shuffle = + .label = Vibes Measctha +zen-boost-edit-reset = + .label = Athshocraigh Gach Eagarthóireacht +zen-boost-edit-delete = + .label = Scrios an Treisiú +zen-boost-size = Méid +zen-boost-case = Cás +zen-boost-zap = Zapáil +zen-boost-code = Cód +zen-boost-back = Ar ais +zen-boost-shuffle = + .tooltiptext = Socruithe Treisithe Measctha +zen-boost-invert = + .tooltiptext = Dathanna Inbhéartaithe Cliste +zen-boost-controls = + .tooltiptext = Rialuithe Dath Ardleibhéil +zen-boost-disable = + .tooltiptext = Díchumasaigh Coigeartuithe Datha +zen-boost-text-case-toggle = + .tooltiptext = Cás Téacs a Athrú +zen-boost-css-picker = + .tooltiptext = Roghnóir Roghnaigh +zen-boost-css-inspector = + .tooltiptext = Oscail an Cigire +zen-bootst-color-contrast = Codarsnacht +zen-bootst-color-brightness = Gile +zen-bootst-color-original-saturation = Sáithiú Bunaidh +zen-add-zap-helper = Cliceáil ar eilimintí ar an leathanach chun iad a Zapáil +zen-remove-zap-helper = ← Cliceáil chun Dízipáil +zen-select-this = Cuir roghnóir isteach don seo +zen-select-related = Cuir isteach roghnóir le haghaidh gaolmhar +zen-select-cancel = Cealaigh +zen-zap-this = Zapáil seo +zen-zap-related = Zapáil gach eilimint ghaolmhar +zen-zap-cancel = Cealaigh +zen-zap-done = Déanta +zen-unzap-tooltip = + { $elementCount -> + [0] Gan aon eilimintí Zapáilte + [1] { $elementCount } eilimint Zapáilte + *[other] { $elementCount } eilimintí Zapáilte + } +zen-boost-save = + .label = Borradh Easpórtála +zen-boost-load = + .label = Borradh Iompórtála +zen-panel-ui-boosts-exported-message = Borradh easpórtáilte! +zen-site-data-boosts = Borradh +zen-site-data-create-boost = + .tooltiptext = Cruthaigh borradh nua +zen-boost-rename-boost-prompt = Athainmnigh Borradh? diff --git a/locales/he/browser/browser/preferences/zen-preferences.ftl b/locales/he/browser/browser/preferences/zen-preferences.ftl index fc21b7eb8..974be8fd7 100644 --- a/locales/he/browser/browser/preferences/zen-preferences.ftl +++ b/locales/he/browser/browser/preferences/zen-preferences.ftl @@ -47,7 +47,7 @@ zen-tabs-select-recently-used-on-close = zen-tabs-close-on-back-with-no-history = .label = סגירת הלשונית ומעבר ללשונית האם שלה (או ללשונית שהכי נמצאת בשימוש) בעת לחיצה על כפתור החזרה כשאין היסטוריית גלישה zen-settings-workspaces-sync-unpinned-tabs = - .label = Sync only pinned tabs in workspaces + .label = סנכרון הלשוניות המוצמדות של מרחבי העבודה בלבד zen-tabs-cycle-by-attribute = .label = הקיצור Ctrl+Tab מחליף בין לשוניות חיוניות ולשוניות במרחב העבודה בלבד zen-tabs-cycle-ignore-pending-tabs = @@ -139,7 +139,7 @@ zen-themes-auto-update = zen-settings-workspaces-force-container-tabs-to-workspace = .label = העברה למרחב עבודה שבו מוגדרת מגירת ברירת מחדל לפתיחת לשוניות במגירה zen-theme-marketplace-link = כניסה לחנות -zen-dark-theme-styles-header = עיצובים כהים +zen-dark-theme-styles-header = ערכות נושא בסגנון כ zen-dark-theme-styles-description = אפשר לשנות את העיצוב הכהה לטעמך zen-dark-theme-styles-amoled = עיצוב לילה zen-dark-theme-styles-default = עיצוב לילה ברירת מחדל @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = מעבר למרחב עבודה 9 zen-workspace-shortcut-switch-10 = מעבר למרחב עבודה 10 zen-workspace-shortcut-forward = העברת מרחב העבודה קדימה zen-workspace-shortcut-backward = העברת מרחב העבודה אחורה +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = הפעל/כבה עובי של סרגל צד zen-pinned-tab-shortcut-reset = איפוס הלשונית המוצמדת לכתובת המוצמדת zen-split-view-shortcut-grid = הפעל/כבה תצוגה מפוצלת רשת @@ -304,7 +305,7 @@ zen-bookmark-show-sidebar-shortcut = הצג סרגל צד סימניות zen-bookmark-show-toolbar-shortcut = הצג סרגל סימניות zen-devtools-toggle-shortcut = הפעל/כבה DevTools zen-devtools-toggle-browser-toolbox-shortcut = הפעל/כבה את ארגז הכלים של הדפדפן -zen-devtools-toggle-browser-console-shortcut = הפעל/כבה קונסולת דפדפן +zen-devtools-toggle-browser-console-shortcut = הפעלת/כיבוי מסוף דפדפן zen-devtools-toggle-responsive-design-mode-shortcut = הפעלת/כיבוי מצב עיצוב מסתגל zen-devtools-toggle-inspector-shortcut = הפעל/כבה בודק zen-devtools-toggle-web-console-shortcut = הפעל/כבה קונסולת אתר @@ -317,4 +318,5 @@ zen-devtools-toggle-dom-shortcut = הפעל/כבה DOM zen-devtools-toggle-accessibility-shortcut = הפעל/כבה נגישות zen-close-all-unpinned-tabs-shortcut = סגירת כל הלשוניות שאינן מוצמדות zen-new-unsynced-window-shortcut = חלון לא מסונכרן חדש -zen-duplicate-tab-shortcut = Duplicate Tab +zen-duplicate-tab-shortcut = שכפול לשונית +zen-key-find-selection = Find Selection diff --git a/locales/he/browser/browser/zen-boosts.ftl b/locales/he/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..3f9d31f62 --- /dev/null +++ b/locales/he/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = צבעים הפוכים חכמים +zen-boost-controls = + .tooltiptext = בקרת צבע מתקדמת +zen-boost-disable = + .tooltiptext = השבתת התאמות צבע +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = ניגודיות +zen-bootst-color-brightness = בהירות +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = ביטול +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = ביטול +zen-zap-done = סיום +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/he/browser/browser/zen-general.ftl b/locales/he/browser/browser/zen-general.ftl index 0cf72f91c..dd85f9dc0 100644 --- a/locales/he/browser/browser/zen-general.ftl +++ b/locales/he/browser/browser/zen-general.ftl @@ -39,7 +39,7 @@ pictureinpicture-minimize-btn = .tooltip = מזעור zen-panel-ui-gradient-generator-custom-color = צבע מותאם אישית zen-copy-current-url-confirmation = הכתובת הנוכחית הועתקה! -zen-copy-current-url-as-markdown-confirmation = Copied current URL as Markdown! +zen-copy-current-url-as-markdown-confirmation = הכתובת הנוכחית הועתקה בתור Markdown! zen-general-cancel-label = .label = ביטול zen-general-confirm = @@ -48,7 +48,7 @@ zen-pinned-tab-replaced = כתובת הלשונית המוצמדת הוחלפה zen-tabs-renamed = שם הלשונית השתנה בהצלחה! zen-background-tab-opened-toast = לשונית נפתחה ברקע! zen-workspace-renamed-toast = שם מרחב העבודה השתנה בהצלחה! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = אי אפשר להוסיף עוד לוחיות לתצוגה המפוצלת! zen-toggle-compact-mode-button = .label = מצב חסכוני .tooltiptext = הפעלת/כיבוי מצב חסכוני @@ -122,4 +122,4 @@ zen-window-sync-migration-dialog-message = Zen עכשיו מסנכרן חלונ zen-window-sync-migration-dialog-learn-more = מידע נוסף zen-window-sync-migration-dialog-accept = הבנתי zen-appmenu-new-blank-window = - .label = New blank window + .label = חלון ריק חדש diff --git a/locales/he/browser/browser/zen-menubar.ftl b/locales/he/browser/browser/zen-menubar.ftl index fbf94053c..298dec51b 100644 --- a/locales/he/browser/browser/zen-menubar.ftl +++ b/locales/he/browser/browser/zen-menubar.ftl @@ -19,4 +19,4 @@ zen-menubar-appearance-light = zen-menubar-appearance-dark = .label = כהה zen-menubar-new-blank-window = - .label = New Blank Window + .label = חלון ריק חדש diff --git a/locales/he/browser/browser/zen-vertical-tabs.ftl b/locales/he/browser/browser/zen-vertical-tabs.ftl index 28121137b..2ee834f31 100644 --- a/locales/he/browser/browser/zen-vertical-tabs.ftl +++ b/locales/he/browser/browser/zen-vertical-tabs.ftl @@ -18,8 +18,8 @@ zen-toolbar-context-compact-mode-hide-both = .label = הסתרת שני הסרגלים .accesskey = י zen-toolbar-context-move-to-folder = - .label = Move to Folder... - .accesskey = M + .label = העברה לתיקייה... + .accesskey = צ zen-toolbar-context-new-folder = .label = תיקייה חדשה .accesskey = מ diff --git a/locales/he/browser/browser/zen-workspaces.ftl b/locales/he/browser/browser/zen-workspaces.ftl index 57e9ce821..e35618442 100644 --- a/locales/he/browser/browser/zen-workspaces.ftl +++ b/locales/he/browser/browser/zen-workspaces.ftl @@ -10,7 +10,7 @@ zen-panel-ui-workspaces-create = zen-panel-ui-folder-create = .label = יצירת תיקייה zen-panel-ui-live-folder-create = - .label = Live Folder + .label = תיקייה חיה zen-panel-ui-new-empty-split = .label = פיצול חדש zen-workspaces-panel-context-delete = diff --git a/locales/hu/browser/browser/preferences/zen-preferences.ftl b/locales/hu/browser/browser/preferences/zen-preferences.ftl index 02da4b7a0..d0cc5bbce 100644 --- a/locales/hu/browser/browser/preferences/zen-preferences.ftl +++ b/locales/hu/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Kilencedik munkakörnyezetre váltás zen-workspace-shortcut-switch-10 = Tizedik munkakörnyezetre váltás zen-workspace-shortcut-forward = Következő munkakörnyezet zen-workspace-shortcut-backward = Előző munkakörnyezet +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Oldalsáv szélességének váltása zen-pinned-tab-shortcut-reset = Rögzített lap visszaállítása rögzítéskori URL-re zen-split-view-shortcut-grid = Osztott nézet grid ki-/bekapcsolása @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Hozzáférhetőség kapcsolása zen-close-all-unpinned-tabs-shortcut = Összes rögzítetlen lap bezárása zen-new-unsynced-window-shortcut = Új szinkronizálatlan ablak zen-duplicate-tab-shortcut = Lap duplikálása +zen-key-find-selection = Find Selection diff --git a/locales/hu/browser/browser/zen-boosts.ftl b/locales/hu/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..0437ff86a --- /dev/null +++ b/locales/hu/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Boost átnevezése +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Minden módosítás visszaállítása +zen-boost-edit-delete = + .label = Boost törlése +zen-boost-size = Méret +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Kód +zen-boost-back = Vissza +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Színek intelligens invertálása +zen-boost-controls = + .tooltiptext = Speciális színbeállítások +zen-boost-disable = + .tooltiptext = Színbeállítások letiltása +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Vizsgáló megnyitása +zen-bootst-color-contrast = Kontraszt +zen-bootst-color-brightness = Fényerő +zen-bootst-color-original-saturation = Eredeti szaturáció +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Mégse +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Mégse +zen-zap-done = Kész +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Boost exportálása +zen-boost-load = + .label = Boost importálása +zen-panel-ui-boosts-exported-message = Boostok exportálva! +zen-site-data-boosts = Boostok +zen-site-data-create-boost = + .tooltiptext = Új boost létrehozása +zen-boost-rename-boost-prompt = Boost átnevezése? diff --git a/locales/id/browser/browser/preferences/zen-preferences.ftl b/locales/id/browser/browser/preferences/zen-preferences.ftl index 7f5e29879..61fb563cf 100644 --- a/locales/id/browser/browser/preferences/zen-preferences.ftl +++ b/locales/id/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Beralih ke Ruang Kerja 9 zen-workspace-shortcut-switch-10 = Beralih ke Ruang Kerja 10 zen-workspace-shortcut-forward = Ruang Kerja setelahnya zen-workspace-shortcut-backward = Ruang Kerja sebelumnya +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Peralihan lebar Bilah sisi zen-pinned-tab-shortcut-reset = Setel ulang Tab yang Disematkan ke URL awal zen-split-view-shortcut-grid = Beralih ke Panel terbagi @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Ubah Aksesibilitas zen-close-all-unpinned-tabs-shortcut = Tutup Semua Tab yang Tidak Disematkan zen-new-unsynced-window-shortcut = Jendela Kosong Baru zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/id/browser/browser/zen-boosts.ftl b/locales/id/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/id/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/is/browser/browser/preferences/zen-preferences.ftl b/locales/is/browser/browser/preferences/zen-preferences.ftl index db2e11183..11ac037c8 100644 --- a/locales/is/browser/browser/preferences/zen-preferences.ftl +++ b/locales/is/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Skipta yfir á vinnusvæði 9 zen-workspace-shortcut-switch-10 = Skipta yfir á vinnusvæði 10 zen-workspace-shortcut-forward = Vinnusvæði áfram zen-workspace-shortcut-backward = Vinnusvæði afturábak +zen-workspace-shortcut-create = Búa til nýtt vinnusvæði zen-sidebar-shortcut-toggle = Víxla breidd hliðarspjalds zen-pinned-tab-shortcut-reset = Endursetja festan flipa á festa slóð zen-split-view-shortcut-grid = Víxla reitaskiptu klofnu yfirliti @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Víxla auðvelduðu aðgengi af/á zen-close-all-unpinned-tabs-shortcut = Loka öllum ófestum flipum zen-new-unsynced-window-shortcut = Nýr auður gluggi zen-duplicate-tab-shortcut = Tvítaka flipa +zen-key-find-selection = Finna valið diff --git a/locales/is/browser/browser/zen-boosts.ftl b/locales/is/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..52a18cd59 --- /dev/null +++ b/locales/is/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Endurnefna endurhönnun +zen-boost-edit-shuffle = + .label = Stokka áhrif +zen-boost-edit-reset = + .label = Frumstilla allar breytingar +zen-boost-edit-delete = + .label = Eyða endurhönnun +zen-boost-size = Stærð +zen-boost-case = Stafstaða +zen-boost-zap = Einangra (zap) +zen-boost-code = Kóði +zen-boost-back = Til baka +zen-boost-shuffle = + .tooltiptext = Stokka endurhönnunarstillingum +zen-boost-invert = + .tooltiptext = Snjall umsnúningur lita +zen-boost-controls = + .tooltiptext = Ítarlegar litastýringar +zen-boost-disable = + .tooltiptext = Gera litabreytingar óvirkar +zen-boost-text-case-toggle = + .tooltiptext = Víxla stafstöðu texta +zen-boost-css-picker = + .tooltiptext = Veljari +zen-boost-css-inspector = + .tooltiptext = Opna rýni +zen-bootst-color-contrast = Birtuskil +zen-bootst-color-brightness = Birtustig +zen-bootst-color-original-saturation = Upprunaleg litmettun +zen-add-zap-helper = Smelltu á atriði á síðunni til að einangra þau (zap) +zen-remove-zap-helper = ← Smelltu til að taka úr einangrun +zen-select-this = Setja inn veljara fyrir þetta +zen-select-related = Setja inn veljara fyrir skyld atriði +zen-select-cancel = Hætta við +zen-zap-this = Einangra þetta +zen-zap-related = Einangra öll skyld atriði +zen-zap-cancel = Hætta við +zen-zap-done = Lokið +zen-unzap-tooltip = + { $elementCount -> + [0] Engin einindi einangruð + [1] { $elementCount } einindi einangrað + *[other] { $elementCount } einindi einangruð + } +zen-boost-save = + .label = Flytja út endurhönnun +zen-boost-load = + .label = Flytja inn endurhönnun +zen-panel-ui-boosts-exported-message = Endurhönnun flutt út! +zen-site-data-boosts = Endurhannanir (boosts) +zen-site-data-create-boost = + .tooltiptext = Búa til nýja endurhönnun (boost) +zen-boost-rename-boost-prompt = Endurnefna endurhönnun? diff --git a/locales/it/browser/browser/preferences/zen-preferences.ftl b/locales/it/browser/browser/preferences/zen-preferences.ftl index 91ddbba1b..36a85b054 100644 --- a/locales/it/browser/browser/preferences/zen-preferences.ftl +++ b/locales/it/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Passa allo spazio di lavoro 9 zen-workspace-shortcut-switch-10 = Passa allo spazio di lavoro 10 zen-workspace-shortcut-forward = Spazio Successivo zen-workspace-shortcut-backward = Spazio Precedente +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Attiva/Disattiva Larghezza Barra Laterale zen-pinned-tab-shortcut-reset = Reimposta la scheda bloccata all'URL bloccata zen-split-view-shortcut-grid = Attiva/Disattiva Griglia Visualizzazione Dividi @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Attiva/Disattiva Accessibilità zen-close-all-unpinned-tabs-shortcut = Chiudi Tutte Le Schede Non Bloccate zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/it/browser/browser/zen-boosts.ftl b/locales/it/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/it/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ja/browser/browser/preferences/zen-preferences.ftl b/locales/ja/browser/browser/preferences/zen-preferences.ftl index feab7607a..63a8186a9 100644 --- a/locales/ja/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ja/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = ワークスペース9に切り替える zen-workspace-shortcut-switch-10 = ワークスペース10に切り替える zen-workspace-shortcut-forward = 次のワークスペースに移動 zen-workspace-shortcut-backward = 前のワークスペースへ移動 +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = サイドバーの幅を切り替える zen-pinned-tab-shortcut-reset = ピン留めされたタブをピン留めしたURLにリセット zen-split-view-shortcut-grid = 分割表示グリッドの切り替え @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = アクセシビリティの切り zen-close-all-unpinned-tabs-shortcut = ピン留めされていないすべてのタブを閉じる zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = タブを複製 +zen-key-find-selection = Find Selection diff --git a/locales/ja/browser/browser/zen-boosts.ftl b/locales/ja/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..5a5586994 --- /dev/null +++ b/locales/ja/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = ブーストの名前を変更 +zen-boost-edit-shuffle = + .label = バイブをシャッフル +zen-boost-edit-reset = + .label = すべての編集をリセット +zen-boost-edit-delete = + .label = ブーストを削除 +zen-boost-size = サイズ +zen-boost-case = Case +zen-boost-zap = ザップ +zen-boost-code = コード +zen-boost-back = 戻る +zen-boost-shuffle = + .tooltiptext = ブースト設定をシャッフル +zen-boost-invert = + .tooltiptext = スマートな色の反転 +zen-boost-controls = + .tooltiptext = 高度なカラーコントロール +zen-boost-disable = + .tooltiptext = 色の調整を無効にする +zen-boost-text-case-toggle = + .tooltiptext = テキストケースの切り替え +zen-boost-css-picker = + .tooltiptext = セレクターを選択 +zen-boost-css-inspector = + .tooltiptext = インスペクタを開く +zen-bootst-color-contrast = コントラスト +zen-bootst-color-brightness = 明るさ +zen-bootst-color-original-saturation = 元の彩度 +zen-add-zap-helper = Zap にページ上の要素をクリックします +zen-remove-zap-helper = ←クリックして解除 +zen-select-this = このセレクターを挿入 +zen-select-related = 関連するセレクターを挿入 +zen-select-cancel = キャンセル +zen-zap-this = これをZap +zen-zap-related = 関連するすべての要素をZap +zen-zap-cancel = キャンセル +zen-zap-done = 完了 +zen-unzap-tooltip = + { $elementCount -> + [0] 要素なし zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = ブーストがエクスポートされました! +zen-site-data-boosts = ブースト +zen-site-data-create-boost = + .tooltiptext = 新しいブーストを作成 +zen-boost-rename-boost-prompt = ブーストの名前を変更しますか? diff --git a/locales/ko/browser/browser/preferences/zen-preferences.ftl b/locales/ko/browser/browser/preferences/zen-preferences.ftl index a1f34396e..1a5b6544a 100644 --- a/locales/ko/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ko/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = 워크스페이스 9로 전환 zen-workspace-shortcut-switch-10 = 워크스페이스 10으로 전환 zen-workspace-shortcut-forward = 다음 워크스페이스로 zen-workspace-shortcut-backward = 이전 워크스페이스로 +zen-workspace-shortcut-create = 새 워크스페이스 생성 zen-sidebar-shortcut-toggle = 사이드바 넓이 켜기/끄기 zen-pinned-tab-shortcut-reset = 고정된 탭 URL 초기화 zen-split-view-shortcut-grid = 그리드 스플릿 뷰 전환 @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = 접근성 탭 전환 zen-close-all-unpinned-tabs-shortcut = 모든 고정되지 않은 탭 닫기 zen-new-unsynced-window-shortcut = 새 비동기화 창 zen-duplicate-tab-shortcut = 탭 복제 +zen-key-find-selection = 선택된 부분 찾기 diff --git a/locales/ko/browser/browser/zen-boosts.ftl b/locales/ko/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..1b49b35d9 --- /dev/null +++ b/locales/ko/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = 부스트 이름 변경 +zen-boost-edit-shuffle = + .label = 느낌 바꾸기 +zen-boost-edit-reset = + .label = 모든 수정 초기화 +zen-boost-edit-delete = + .label = 부스트 삭제 +zen-boost-size = 크기 +zen-boost-case = 케이스 +zen-boost-zap = 날리기 +zen-boost-code = 코드 +zen-boost-back = 뒤로 +zen-boost-shuffle = + .tooltiptext = 부스트 무작위 설정 +zen-boost-invert = + .tooltiptext = 자동 색 반전 +zen-boost-controls = + .tooltiptext = 고급 색 설정 +zen-boost-disable = + .tooltiptext = 색 변경 비활성화 +zen-boost-text-case-toggle = + .tooltiptext = 대문자 설정 전환 +zen-boost-css-picker = + .tooltiptext = 선택자 선택 +zen-boost-css-inspector = + .tooltiptext = 검사기 열기 +zen-bootst-color-contrast = 대비 +zen-bootst-color-brightness = 밝기 +zen-bootst-color-original-saturation = 원본 채도 +zen-add-zap-helper = 페이지 내의 요소를 클릭해서 날려버리세요 +zen-remove-zap-helper = ← 클릭하여 되살리기 +zen-select-this = 이 요소의 선택자 삽입 +zen-select-related = 연관된 요소의 선택자 삽입 +zen-select-cancel = 취소 +zen-zap-this = 이 요소 날리기 +zen-zap-related = 모든 관련된 요소 날리기 +zen-zap-cancel = 취소 +zen-zap-done = 완료 +zen-unzap-tooltip = + { $elementCount -> + [0] 요소가 날려지지 않았습니다 + [1] { $elementCount }개의 요소가 날아갔습니다 + *[other] { $elementCount }개의 요소가 날아갔습니다 + } +zen-boost-save = + .label = 부스트 내보내기 +zen-boost-load = + .label = 부스트 불러오기 +zen-panel-ui-boosts-exported-message = 부스트를 내보냈습니다! +zen-site-data-boosts = 부스트 +zen-site-data-create-boost = + .tooltiptext = 새 부스트 생성 +zen-boost-rename-boost-prompt = 부스트 이름을 수정하시겠습니까? diff --git a/locales/lt/browser/browser/preferences/zen-preferences.ftl b/locales/lt/browser/browser/preferences/zen-preferences.ftl index 47df9d551..e156f4da5 100644 --- a/locales/lt/browser/browser/preferences/zen-preferences.ftl +++ b/locales/lt/browser/browser/preferences/zen-preferences.ftl @@ -16,12 +16,12 @@ sync-engine-workspaces = .label = Darbo sritys .tooltiptext = Sinchronizuokite savo darbo sritis tarp įrenginių .accesskey = W -zen-glance-title = Spartusis pažiūrėjimas -zen-glance-header = Bendrieji sparčiojo pažiūrėjimo nustatymai +zen-glance-title = „Glance“ +zen-glance-header = Bendrieji „Glance“ nustatymai zen-glance-description = Gaukite sparčią savo nuorodų apžvalgą neatverdami jų naujoje kortelėje. zen-glance-trigger-label = Paleidimo būdas zen-glance-enabled = - .label = Įjungti spartų pažiūrėjimą + .label = Įjungti „Glance“ zen-glance-trigger-ctrl-click = .label = Vald + spausti zen-glance-trigger-alt-click = @@ -268,7 +268,7 @@ zen-close-tab-shortcut = Užverti kortelę zen-compact-mode-shortcut-show-sidebar = Perjungti slankančią šoninę juostą zen-compact-mode-shortcut-show-toolbar = Perjungti slankančią įrankių juostą zen-compact-mode-shortcut-toggle = Perjungti kompaktinį režimą -zen-glance-expand = Išskleisti spartų pažiūrėjimą +zen-glance-expand = Išskleisti „Glance“ zen-workspace-shortcut-switch-1 = Perjungti į 1 darbo sritį zen-workspace-shortcut-switch-2 = Perjungti į 2 darbo sritį zen-workspace-shortcut-switch-3 = Perjungti į 3 darbo sritį @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Perjungti į 9 darbo sritį zen-workspace-shortcut-switch-10 = Perjungti į 10 darbo sritį zen-workspace-shortcut-forward = Pirmyn darbo sritį zen-workspace-shortcut-backward = Atgal darbo sritį +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Perjungti šoninės juostos plotį zen-pinned-tab-shortcut-reset = Atkurti prisegtą kortelę į prisegtą URL zen-split-view-shortcut-grid = Perjungti skaidymo rodinį tinkleliu @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Perjungti prieinamumą zen-close-all-unpinned-tabs-shortcut = Užverti visas neprisegtas korteles zen-new-unsynced-window-shortcut = Naujas tuščias langas zen-duplicate-tab-shortcut = Dubliuoti kortelę +zen-key-find-selection = Find Selection diff --git a/locales/lt/browser/browser/zen-boosts.ftl b/locales/lt/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..8a1c758ec --- /dev/null +++ b/locales/lt/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Atkurti visus redagavimus +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Dydis +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Kodas +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Kontrastas +zen-bootst-color-brightness = Šviesumas +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Atsisakyti +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/lt/browser/browser/zen-general.ftl b/locales/lt/browser/browser/zen-general.ftl index 17f8c20b2..5f91e697b 100644 --- a/locales/lt/browser/browser/zen-general.ftl +++ b/locales/lt/browser/browser/zen-general.ftl @@ -107,7 +107,7 @@ zen-site-data-setting-site-protection = Stebėjimo apsauga zen-site-data-panel-feature-callout-title = Nauji namai priedams, leidimams ir daugiau zen-site-data-panel-feature-callout-subtitle = Spustelėkite piktogramą, kad tvarkytumėte svetainės nustatymus, peržiūrėtumėte saugumo informaciją, pasiektumėte plėtinius ir atliktumėte įprastus veiksmus. zen-open-link-in-glance = - .label = Atverti nuorodą spartiuojame pažiūrėjime + .label = Atverti nuorodą rodinyje „Glance“ .accesskey = G zen-sidebar-notification-updated-heading = Naujinimas baigtas. @@ -116,7 +116,7 @@ zen-sidebar-notification-updated-heading = Naujinimas baigtas. zen-sidebar-notification-updated-label = Kas naujo naršyklėje „{ -brand-short-name }“ zen-sidebar-notification-updated-tooltip = .title = Peržiūrėti leidimo pastabas -zen-sidebar-notification-restart-safe-mode-label = Kažkas sugedo? +zen-sidebar-notification-restart-safe-mode-label = Kažkas neveikia? zen-sidebar-notification-restart-safe-mode-tooltip = .title = Paleisti iš naujo saugioje režime zen-window-sync-migration-dialog-title = Išlaikykite savo langus sinchronizuotus diff --git a/locales/nb/browser/browser/preferences/zen-preferences.ftl b/locales/nb/browser/browser/preferences/zen-preferences.ftl index 0feb70cca..38868994a 100644 --- a/locales/nb/browser/browser/preferences/zen-preferences.ftl +++ b/locales/nb/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Bytt til arbeidsområde 9 zen-workspace-shortcut-switch-10 = Bytt til arbeidsområde 10 zen-workspace-shortcut-forward = Fremover arbeidsområde zen-workspace-shortcut-backward = Bakover arbeidsområde +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Veksle sidepanelets bredde zen-pinned-tab-shortcut-reset = Tilbakestill festet fane til festet nettadresse zen-split-view-shortcut-grid = Veksle splittet visnings-nett @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Veksle Tilgjengelighet zen-close-all-unpinned-tabs-shortcut = Lukk alle ufestede faner zen-new-unsynced-window-shortcut = Nytt tomt vindu zen-duplicate-tab-shortcut = Dupliser fane +zen-key-find-selection = Find Selection diff --git a/locales/nb/browser/browser/zen-boosts.ftl b/locales/nb/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..658411d08 --- /dev/null +++ b/locales/nb/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Endre navnet på Boost +zen-boost-edit-shuffle = + .label = Bland Vibes +zen-boost-edit-reset = + .label = Tilbakestill redigeringer +zen-boost-edit-delete = + .label = Slett Boost +zen-boost-size = Størrelse +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Kode +zen-boost-back = Tilbake +zen-boost-shuffle = + .tooltiptext = Bland Boost-innstillinger +zen-boost-invert = + .tooltiptext = Smart-inverter farger +zen-boost-controls = + .tooltiptext = Avanserte fargeinnstillinger +zen-boost-disable = + .tooltiptext = Deaktiver fargejusteringer +zen-boost-text-case-toggle = + .tooltiptext = Veksle stor/liten bokstav i skrift +zen-boost-css-picker = + .tooltiptext = Velgselektor +zen-boost-css-inspector = + .tooltiptext = Åpne inspektør +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Lysstyrke +zen-bootst-color-original-saturation = Opprinnelig fargemetning +zen-add-zap-helper = Klikk elementer på siden for å Zappe dem +zen-remove-zap-helper = ← Klikk for å avzappe +zen-select-this = Sett inn slektor for dette +zen-select-related = Sett inn selektor for relaterte +zen-select-cancel = Avbryt +zen-zap-this = Zap dette +zen-zap-related = Zap alle relaterte elementer +zen-zap-cancel = Avbryt +zen-zap-done = Ferdig +zen-unzap-tooltip = + { $elementCount -> + [0] Ingen elementer zappet + [1] { $elementCount } elementer zappet + *[other] { $elementCount } elementer zappet + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Booster eksportert! +zen-site-data-boosts = Booster +zen-site-data-create-boost = + .tooltiptext = Lag ny Boost +zen-boost-rename-boost-prompt = Endre navn på Boost? diff --git a/locales/nl/browser/browser/preferences/zen-preferences.ftl b/locales/nl/browser/browser/preferences/zen-preferences.ftl index 1db60e73f..ac7e8ac4b 100644 --- a/locales/nl/browser/browser/preferences/zen-preferences.ftl +++ b/locales/nl/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Schakelen naar werkruimte 9 zen-workspace-shortcut-switch-10 = Schakelen naar werkruimte 10 zen-workspace-shortcut-forward = Volgende werkruimte zen-workspace-shortcut-backward = Vorige werkruimte +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Zijbalk breedte togglen zen-pinned-tab-shortcut-reset = Vastgezette tab resetten naar vastgezette URL zen-split-view-shortcut-grid = Gesplitste weergave raster togglen @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toegankelijkheid togglen zen-close-all-unpinned-tabs-shortcut = Alle niet-vastgezette tabbladen sluiten zen-new-unsynced-window-shortcut = Nieuw leeg venster zen-duplicate-tab-shortcut = Tabblad dupliceren +zen-key-find-selection = Find Selection diff --git a/locales/nl/browser/browser/zen-boosts.ftl b/locales/nl/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/nl/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl b/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl index 61552982c..3b6670d6d 100644 --- a/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl +++ b/locales/nn-NO/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/nn-NO/browser/browser/zen-boosts.ftl b/locales/nn-NO/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/nn-NO/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/pl/browser/browser/preferences/zen-preferences.ftl b/locales/pl/browser/browser/preferences/zen-preferences.ftl index 32fb99b1b..bb0b0f05e 100644 --- a/locales/pl/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pl/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Przełącz na obszar roboczy 9 zen-workspace-shortcut-switch-10 = Przełącz na obszar roboczy 10 zen-workspace-shortcut-forward = Następny obszar roboczy zen-workspace-shortcut-backward = Poprzedni obszar roboczy +zen-workspace-shortcut-create = Stwórz nową przestrzeń roboczą zen-sidebar-shortcut-toggle = Przełącz szerokość panelu bocznego zen-pinned-tab-shortcut-reset = Przywróć przypiętą kartę do przypiętego adresu URL zen-split-view-shortcut-grid = Przełącz widok podziału na siatkę @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Włącz Dostępność zen-close-all-unpinned-tabs-shortcut = Zamknij wszystkie nieprzypięte karty zen-new-unsynced-window-shortcut = Nowe niesynchronizowane okno zen-duplicate-tab-shortcut = Duplikuj kartę +zen-key-find-selection = Znajdź zaznaczenie diff --git a/locales/pl/browser/browser/zen-boosts.ftl b/locales/pl/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7d1e3f33a --- /dev/null +++ b/locales/pl/browser/browser/zen-boosts.ftl @@ -0,0 +1,59 @@ +# 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/. + +zen-boost-edit-rename = + .label = Zmień nazwę Boosta +zen-boost-edit-shuffle = + .label = Losuj styl +zen-boost-edit-reset = + .label = Zresetuj wszystkie zmiany +zen-boost-edit-delete = + .label = Usuń Boost +zen-boost-size = Rozmiar +zen-boost-case = Wielkość liter +zen-boost-zap = Ukryj +zen-boost-code = Kod +zen-boost-back = Cofnij +zen-boost-shuffle = + .tooltiptext = Losuj ustawienia Boosta +zen-boost-invert = + .tooltiptext = Inteligentne odwrócenie kolorów +zen-boost-controls = + .tooltiptext = Zaawansowane ustawienia kolorów +zen-boost-disable = + .tooltiptext = Wyłącz dostosowanie kolorów +zen-boost-text-case-toggle = + .tooltiptext = Przełącz wielkość liter +zen-boost-css-picker = + .tooltiptext = Wybierz selektor +zen-boost-css-inspector = + .tooltiptext = Otwórz Inspektor +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Jasność +zen-bootst-color-original-saturation = Oryginalne nasycenie +zen-add-zap-helper = Kliknij elementy na stronie, aby je ukryć +zen-remove-zap-helper = ← Kliknij, aby cofnąć ukrycie +zen-select-this = Wstaw selektor dla tego elementu +zen-select-related = Wstaw selektor dla powiązanych elementów +zen-select-cancel = Anuluj +zen-zap-this = Ukryj to +zen-zap-related = Ukryj wszystkie powiązane elementy +zen-zap-cancel = Anuluj +zen-zap-done = Gotowe +zen-unzap-tooltip = + { $elementCount -> + [0] Nie ukryto żadnych elementów + [1] Ukryto {$elementCount} element + [few] Ukryto {$elementCount} elementy + *[other] Ukryto {$elementCount} elementów + } +zen-boost-save = + .label = Eksportuj Boosta +zen-boost-load = + .label = Importuj Boosta +zen-panel-ui-boosts-exported-message = Boost został wyeksportowany! +zen-site-data-boosts = Boosty +zen-site-data-create-boost = + .tooltiptext = Utwórz nowy Boost +zen-boost-rename-boost-prompt = Zmienić nazwę Boosta? diff --git a/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl b/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl index 8bc0fee98..63e8299c6 100644 --- a/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl @@ -33,7 +33,7 @@ zen-glance-trigger-meta-click = zen-look-and-feel-compact-view-header = Exibir em modo compacto zen-look-and-feel-compact-view-description = Apenas mostre as barras de ferramentas que você usa! zen-look-and-feel-compact-view-enabled = - .label = Ativar modo compacto de { -brand-short-name }'s + .label = Ativar modo compacto de { -brand-short-name }s zen-look-and-feel-compact-view-top-toolbar = .label = Ocultar também a barra de ferramentas superior no modo compacto zen-look-and-feel-compact-toolbar-flash-popup = @@ -98,17 +98,17 @@ zen-vertical-tabs-newtab-top-button-up = .label = Mover o botão de nova aba para o topo zen-vertical-tabs-expand-tabs-by-default = Expandir abas por padrão zen-vertical-tabs-dont-expand-tabs-by-default = Não expandir abas por padrão -zen-vertical-tabs-expand-tabs-on-hover = Expandir Abas no Aerobarco (não funciona no modo compacto) +zen-vertical-tabs-expand-tabs-on-hover = Expandir abas ao passar o mouse (não vai funcionar no modo compacto) zen-vertical-tabs-expand-tabs-header = Como expandir abas zen-vertical-tabs-expand-tabs-description = Escolha como expandir abas na barra lateral zen-theme-marketplace-header = Zen Mods zen-theme-disable-all-enabled = - .title = Desativar todos os temas + .title = Desativar todos os mods zen-theme-disable-all-disabled = - .title = Ativar todos os temas -zen-theme-marketplace-description = Encontre e instale temas da loja. + .title = Ativar todos os mods +zen-theme-marketplace-description = Encontre e instale mods da loja. zen-theme-marketplace-remove-button = - .label = Remover tema + .label = Remover mod zen-theme-marketplace-check-for-updates-button = .label = Procurar por atualizações zen-theme-marketplace-import-button = @@ -119,14 +119,14 @@ zen-theme-marketplace-import-success = Mods importados com sucesso zen-theme-marketplace-import-failure = Ocorreu um erro ao importar os mods zen-theme-marketplace-export-success = Mods exportados com sucesso zen-theme-marketplace-export-failure = Ocorreu um erro ao exportar os mods -zen-theme-marketplace-updates-success = Tema atualizado com sucesso +zen-theme-marketplace-updates-success = Mods atualizados com sucesso zen-theme-marketplace-updates-failure = Nenhuma atualização encontrada! zen-theme-marketplace-toggle-enabled-button = - .title = Desativar tema + .title = Desabilitar mod zen-theme-marketplace-toggle-disabled-button = - .title = Ativar tema + .title = Habilitar mod zen-theme-marketplace-remove-confirmation = Tem certeza que deseja remover este mod? -zen-theme-marketplace-close-modal = FECHAR +zen-theme-marketplace-close-modal = Fechar zen-theme-marketplace-theme-header-title = .title = Seletor CSS: { $name } zen-theme-marketplace-dropdown-default-label = @@ -162,7 +162,7 @@ category-zen-CKS = .tooltiptext = { pane-zen-CKS-title } pane-settings-CKS-title = Atalhos { -brand-short-name } category-zen-marketplace = - .tooltiptext = Mods do Zen + .tooltiptext = Zen Mods zen-settings-CKS-header = Personalize seus atalhos de teclado zen-settings-CKS-description = Altere os atalhos de teclado padrão ao seu gosto e melhore a sua experiência de navegação zen-settings-CKS-disable-firefox = @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Mudar para Área de Trabalho 9 zen-workspace-shortcut-switch-10 = Mudar para Área de Trabalho 10 zen-workspace-shortcut-forward = Encaminhar espaço de trabalho zen-workspace-shortcut-backward = Workspace Anterior +zen-workspace-shortcut-create = Criar novo Espaço zen-sidebar-shortcut-toggle = Alternar Largura do painel zen-pinned-tab-shortcut-reset = Restaurar a Guia Fixado para a URL fixada zen-split-view-shortcut-grid = Alternar grade de visualização dividida @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Ativar/Desativar Acessibilidade zen-close-all-unpinned-tabs-shortcut = Fechar Todas as Abas Não Fixadas zen-new-unsynced-window-shortcut = Nova Janela Dessincronizada zen-duplicate-tab-shortcut = Duplicar Aba +zen-key-find-selection = Encontrar Selecionado diff --git a/locales/pt-BR/browser/browser/zen-boosts.ftl b/locales/pt-BR/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..6ae7e53e6 --- /dev/null +++ b/locales/pt-BR/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Renomear Boost +zen-boost-edit-shuffle = + .label = Misturar Vibes +zen-boost-edit-reset = + .label = Redefinir Todas as Edições +zen-boost-edit-delete = + .label = Excluir Boost +zen-boost-size = Tamanho +zen-boost-case = Caixa +zen-boost-zap = Zap +zen-boost-code = Código +zen-boost-back = Voltar +zen-boost-shuffle = + .tooltiptext = Misturar Configurações do Boost +zen-boost-invert = + .tooltiptext = Inversão Inteligente de Cores +zen-boost-controls = + .tooltiptext = Controles Avançados de Cores +zen-boost-disable = + .tooltiptext = Desativar Ajusta de Cores +zen-boost-text-case-toggle = + .tooltiptext = Ativar Caixa de Texto +zen-boost-css-picker = + .tooltiptext = Ferramenta de Seleção +zen-boost-css-inspector = + .tooltiptext = Abrir Inspetor +zen-bootst-color-contrast = Contraste +zen-bootst-color-brightness = Brilho +zen-bootst-color-original-saturation = Saturação Original +zen-add-zap-helper = Clique em elementos da página para dar um Zap neles +zen-remove-zap-helper = Clique para Deszapar +zen-select-this = Inserir seletor para isto +zen-select-related = Inserir seletor para relacionados +zen-select-cancel = Cancelar +zen-zap-this = Zap isso +zen-zap-related = Zap em todos os elementos relacionados +zen-zap-cancel = Cancelar +zen-zap-done = Pronto +zen-unzap-tooltip = + { $elementCount -> + [0] Nenhum elemento zapeado + [1] { $elementCount } elemento zapeado + *[other] { $elementCount } elementos zapeados + } +zen-boost-save = + .label = Exportar Boost +zen-boost-load = + .label = Importar Boost +zen-panel-ui-boosts-exported-message = Boost exportado! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Criar novo boost +zen-boost-rename-boost-prompt = Renomear Boost? diff --git a/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl b/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl index 8ed17f431..a501737b7 100644 --- a/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Mudar para o Espaço de Trabalho 9 zen-workspace-shortcut-switch-10 = Mudar para o Espaço de Trabalho 10 zen-workspace-shortcut-forward = Espaço de Trabalho Seguinte zen-workspace-shortcut-backward = Espaço de Trabalho Anterior +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Alternar largura da Barra Lateral zen-pinned-tab-shortcut-reset = Repor o Separador Fixado para a URL Fixada zen-split-view-shortcut-grid = Ativar Vista Dividida em Grelha @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Alternar Acessibilidade zen-close-all-unpinned-tabs-shortcut = Fechar Todos os Separadores Não Fixados zen-new-unsynced-window-shortcut = Nova janela sem sincronização zen-duplicate-tab-shortcut = Duplicar Separador +zen-key-find-selection = Find Selection diff --git a/locales/pt-PT/browser/browser/zen-boosts.ftl b/locales/pt-PT/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/pt-PT/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ro/browser/browser/preferences/zen-preferences.ftl b/locales/ro/browser/browser/preferences/zen-preferences.ftl index ed26f72b8..a43ff8124 100644 --- a/locales/ro/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ro/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Switch to Workspace 9 zen-workspace-shortcut-switch-10 = Switch to Workspace 10 zen-workspace-shortcut-forward = Forward Workspace zen-workspace-shortcut-backward = Backward Workspace +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/ro/browser/browser/zen-boosts.ftl b/locales/ro/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/ro/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ru/browser/browser/preferences/zen-preferences.ftl b/locales/ru/browser/browser/preferences/zen-preferences.ftl index 4942900e9..bd2d72876 100644 --- a/locales/ru/browser/browser/preferences/zen-preferences.ftl +++ b/locales/ru/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Переключиться на простра zen-workspace-shortcut-switch-10 = Переключиться на пространство 10 zen-workspace-shortcut-forward = Следующее пространство zen-workspace-shortcut-backward = Предыдущее пространство +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Ширина боковой панели zen-pinned-tab-shortcut-reset = Восстановить адрес закрепленной вкладки zen-split-view-shortcut-grid = Переключить разделение сетки вида @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Включить/выключить zen-close-all-unpinned-tabs-shortcut = Закрыть все не закреплённые вкладки zen-new-unsynced-window-shortcut = Новое пустое окно zen-duplicate-tab-shortcut = Дублировать вкладку +zen-key-find-selection = Find Selection diff --git a/locales/ru/browser/browser/zen-boosts.ftl b/locales/ru/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/ru/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/ru/browser/browser/zen-general.ftl b/locales/ru/browser/browser/zen-general.ftl index af51df15e..d5d80ae37 100644 --- a/locales/ru/browser/browser/zen-general.ftl +++ b/locales/ru/browser/browser/zen-general.ftl @@ -50,7 +50,7 @@ zen-pinned-tab-replaced = Адрес закреплённой вкладки з zen-tabs-renamed = Вкладка успешно переименована! zen-background-tab-opened-toast = Открыта новая фоновая вкладка! zen-workspace-renamed-toast = Пространство успешно переименовано! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = Невозможно добавить больше панелей в раздельный вид! zen-toggle-compact-mode-button = .label = Компактный режим .tooltiptext = Переключить компактный режим diff --git a/locales/sk/browser/browser/preferences/zen-preferences.ftl b/locales/sk/browser/browser/preferences/zen-preferences.ftl index 91d5cd501..ba3976eb2 100644 --- a/locales/sk/browser/browser/preferences/zen-preferences.ftl +++ b/locales/sk/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Prepnúť na pracovnú plochu 9 zen-workspace-shortcut-switch-10 = Prepnúť na pracovnú plochu 10 zen-workspace-shortcut-forward = Nasledujúca pracovná plocha zen-workspace-shortcut-backward = Predchádzajúca pracovná plocha +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Prepnúť šírku bočného panela zen-pinned-tab-shortcut-reset = Obnoviť pripnutú kartu na pôvodnú URL zen-split-view-shortcut-grid = Prepnúť mriežku rozdeleného zobrazenia @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Prepnúť prístupnosť zen-close-all-unpinned-tabs-shortcut = Zatvoriť všetky nepripnuté karty zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/sk/browser/browser/zen-boosts.ftl b/locales/sk/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/sk/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl b/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl index 5734cbcc6..fca5ef3b3 100644 --- a/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl +++ b/locales/sv-SE/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Växla till arbetsyta 9 zen-workspace-shortcut-switch-10 = Växla till arbetsyta 10 zen-workspace-shortcut-forward = Vidarebefordra arbetsyta zen-workspace-shortcut-backward = Bakåt arbetsyta +zen-workspace-shortcut-create = Skapa ny arbetsyta zen-sidebar-shortcut-toggle = Växla sidofältets bredd zen-pinned-tab-shortcut-reset = Återställ Fäst flik till Pinned URL zen-split-view-shortcut-grid = Växla delad vy rutnät @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Växla tillgänglighetsinställning zen-close-all-unpinned-tabs-shortcut = Stäng alla flikar som inte är fästa zen-new-unsynced-window-shortcut = Nytt tomt fönster zen-duplicate-tab-shortcut = Duplicera flik +zen-key-find-selection = Hitta val diff --git a/locales/sv-SE/browser/browser/zen-boosts.ftl b/locales/sv-SE/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..c010d0a98 --- /dev/null +++ b/locales/sv-SE/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Byt namn på förändring +zen-boost-edit-shuffle = + .label = Blanda vibbar +zen-boost-edit-reset = + .label = Återställ alla redigeringar +zen-boost-edit-delete = + .label = Ta bort förändring +zen-boost-size = Storlek +zen-boost-case = Fall +zen-boost-zap = Zappa +zen-boost-code = Kod +zen-boost-back = Tillbaka +zen-boost-shuffle = + .tooltiptext = Inställningar för blandningsförändring +zen-boost-invert = + .tooltiptext = Smart invertera färger +zen-boost-controls = + .tooltiptext = Avancerade färgkontroller +zen-boost-disable = + .tooltiptext = Inaktivera färgjusteringar +zen-boost-text-case-toggle = + .tooltiptext = Växla textfall +zen-boost-css-picker = + .tooltiptext = Välj väljare +zen-boost-css-inspector = + .tooltiptext = Öppna inspektör +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Ljusstyrka +zen-bootst-color-original-saturation = Ursprunglig mättnad +zen-add-zap-helper = Klicka på element på sidan för att zappa dem +zen-remove-zap-helper = ← Klicka för att avzappa +zen-select-this = Infoga väljare för detta +zen-select-related = Infoga väljare för relaterade +zen-select-cancel = Avbryt +zen-zap-this = Zappa detta +zen-zap-related = Zappa alla relaterade element +zen-zap-cancel = Avbryt +zen-zap-done = Klart +zen-unzap-tooltip = + { $elementCount -> + [0] Inga element zappade + [1] { $elementCount } element zappade + *[other] { $elementCount } flera element zappade + } +zen-boost-save = + .label = Exportera förändring +zen-boost-load = + .label = Importera förändring +zen-panel-ui-boosts-exported-message = Förändring exporterad! +zen-site-data-boosts = Förändringar +zen-site-data-create-boost = + .tooltiptext = Skapa ny förändring +zen-boost-rename-boost-prompt = Byt namn på förändring? diff --git a/locales/th/browser/browser/preferences/zen-preferences.ftl b/locales/th/browser/browser/preferences/zen-preferences.ftl index 809b5601a..4a8417a09 100644 --- a/locales/th/browser/browser/preferences/zen-preferences.ftl +++ b/locales/th/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = สลับไปใช้พื้นที zen-workspace-shortcut-switch-10 = สลับไปใช้พื้นที่ทำงานที่ 10 zen-workspace-shortcut-forward = ไปยังพื้นที่ทำงานก่อนหน้า zen-workspace-shortcut-backward = ไปยังพื้นที่ทำงานด้านหลัง +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Toggle Sidebar's Width zen-pinned-tab-shortcut-reset = Reset Pinned Tab to Pinned URL zen-split-view-shortcut-grid = Toggle Split View Grid @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Toggle Accessibility zen-close-all-unpinned-tabs-shortcut = Close All Unpinned Tabs zen-new-unsynced-window-shortcut = New Unsynced Window zen-duplicate-tab-shortcut = Duplicate Tab +zen-key-find-selection = Find Selection diff --git a/locales/th/browser/browser/zen-boosts.ftl b/locales/th/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7211fa124 --- /dev/null +++ b/locales/th/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Rename Boost +zen-boost-edit-shuffle = + .label = Shuffle Vibes +zen-boost-edit-reset = + .label = Reset All Edits +zen-boost-edit-delete = + .label = Delete Boost +zen-boost-size = Size +zen-boost-case = Case +zen-boost-zap = Zap +zen-boost-code = Code +zen-boost-back = Back +zen-boost-shuffle = + .tooltiptext = Shuffle Boost Settings +zen-boost-invert = + .tooltiptext = Smart Invert Colors +zen-boost-controls = + .tooltiptext = Advanced Color Controls +zen-boost-disable = + .tooltiptext = Disable Color Adjustments +zen-boost-text-case-toggle = + .tooltiptext = Toggle Text Case +zen-boost-css-picker = + .tooltiptext = Pick Selector +zen-boost-css-inspector = + .tooltiptext = Open Inspector +zen-bootst-color-contrast = Contrast +zen-bootst-color-brightness = Brightness +zen-bootst-color-original-saturation = Original Saturation +zen-add-zap-helper = Click elements on the page to Zap them +zen-remove-zap-helper = ← Click to Unzap +zen-select-this = Insert selector for this +zen-select-related = Insert selector for related +zen-select-cancel = Cancel +zen-zap-this = Zap this +zen-zap-related = Zap all related elements +zen-zap-cancel = Cancel +zen-zap-done = Done +zen-unzap-tooltip = + { $elementCount -> + [0] No elements zapped + [1] { $elementCount } element zapped + *[other] { $elementCount } elements zapped + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost exported! +zen-site-data-boosts = Boosts +zen-site-data-create-boost = + .tooltiptext = Create new boost +zen-boost-rename-boost-prompt = Rename Boost? diff --git a/locales/tr/browser/browser/preferences/zen-preferences.ftl b/locales/tr/browser/browser/preferences/zen-preferences.ftl index 9fe0debf3..44f39df3c 100644 --- a/locales/tr/browser/browser/preferences/zen-preferences.ftl +++ b/locales/tr/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = 9. çalışma alanına geç zen-workspace-shortcut-switch-10 = 10. çalışma alanına geç zen-workspace-shortcut-forward = Sonraki çalışma alanı zen-workspace-shortcut-backward = Önceki çalışma alanı +zen-workspace-shortcut-create = Yeni çalışma alanı oluştur zen-sidebar-shortcut-toggle = Kenar çubuğu genişliğini değiştir zen-pinned-tab-shortcut-reset = Sabitlenen sekmeyi sabitlenen URL'ye sıfırla zen-split-view-shortcut-grid = Izgaralı bölünmüş görünümü aç/kapat @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Erişilebilirliği aç/kapat zen-close-all-unpinned-tabs-shortcut = Sabitlenmemiş tüm sekmeleri kapat zen-new-unsynced-window-shortcut = Yeni boş pencere zen-duplicate-tab-shortcut = Sekmeyi çoğalt +zen-key-find-selection = Seçimi bul diff --git a/locales/tr/browser/browser/zen-boosts.ftl b/locales/tr/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..7c78e7c03 --- /dev/null +++ b/locales/tr/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Boost’u yeniden adlandır +zen-boost-edit-shuffle = + .label = Vibe'ları karıştır +zen-boost-edit-reset = + .label = Tüm düzenlemeleri sıfırla +zen-boost-edit-delete = + .label = Boost’u sil +zen-boost-size = Boyut +zen-boost-case = Büyük/küçük harf +zen-boost-zap = Zap +zen-boost-code = Kod +zen-boost-back = Geri +zen-boost-shuffle = + .tooltiptext = Boost ayarlarını karıştır +zen-boost-invert = + .tooltiptext = Renkleri ters çevir +zen-boost-controls = + .tooltiptext = Gelişmiş renk kontrolleri +zen-boost-disable = + .tooltiptext = Renk ayarlarını devre dışı bırak +zen-boost-text-case-toggle = + .tooltiptext = Metin büyük/küçük harf değişimini aç/kapat +zen-boost-css-picker = + .tooltiptext = Seçici seç +zen-boost-css-inspector = + .tooltiptext = Denetleyiciyi aç +zen-bootst-color-contrast = Kontrast +zen-bootst-color-brightness = Parlaklık +zen-bootst-color-original-saturation = Orijinal doygunluk +zen-add-zap-helper = Sayfadaki ögelere tıklayarak onları Zap ile kaldırın +zen-remove-zap-helper = ← Unzap için tıklayın +zen-select-this = Bu öge için seçici ekle +zen-select-related = İlgili ögeler için seçici ekle +zen-select-cancel = İptal +zen-zap-this = Bunu Zap ile kaldır +zen-zap-related = İlgili tüm ögeleri Zap ile kaldır +zen-zap-cancel = İptal +zen-zap-done = Bitti +zen-unzap-tooltip = + { $elementCount -> + [0] Hiç öge Zap’lenmedi + [1] { $elementCount } öge Zap’lenmiş + *[other] { $elementCount } öge Zap’lenmiş + } +zen-boost-save = + .label = Boost’u dışa aktar +zen-boost-load = + .label = Boost’u içe aktar +zen-panel-ui-boosts-exported-message = Boost dışa aktarıldı! +zen-site-data-boosts = Boost'lar +zen-site-data-create-boost = + .tooltiptext = Yeni Boost oluştur +zen-boost-rename-boost-prompt = Boost yeniden adlandırılsın mı? diff --git a/locales/uk/browser/browser/preferences/zen-preferences.ftl b/locales/uk/browser/browser/preferences/zen-preferences.ftl index 3dcce31ba..c2860504c 100644 --- a/locales/uk/browser/browser/preferences/zen-preferences.ftl +++ b/locales/uk/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Перейти на робочу област zen-workspace-shortcut-switch-10 = Перейти на робочу область 10 zen-workspace-shortcut-forward = Наступний робочий простір zen-workspace-shortcut-backward = Попередній робочий простір +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Перемкнути ширину бічної панелі zen-pinned-tab-shortcut-reset = Скинути прикріплену вкладку до закріпленої URL-адреси zen-split-view-shortcut-grid = Перемкнути розділену сітку @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = Увімк. / Вимк. досту zen-close-all-unpinned-tabs-shortcut = Закрити всі відкріплені вкладки zen-new-unsynced-window-shortcut = Нове несинхронізоване вікно zen-duplicate-tab-shortcut = Дублювати вкладку +zen-key-find-selection = Find Selection diff --git a/locales/uk/browser/browser/zen-boosts.ftl b/locales/uk/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..3e5c35c98 --- /dev/null +++ b/locales/uk/browser/browser/zen-boosts.ftl @@ -0,0 +1,59 @@ +# 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/. + +zen-boost-edit-rename = + .label = Перейменувати підсилення +zen-boost-edit-shuffle = + .label = Змінити стиль +zen-boost-edit-reset = + .label = Скинути всі зміни +zen-boost-edit-delete = + .label = Видалити підсилення +zen-boost-size = Розмір +zen-boost-case = Case +zen-boost-zap = Сховати +zen-boost-code = Код +zen-boost-back = Назад +zen-boost-shuffle = + .tooltiptext = Налаштування зміни стилю +zen-boost-invert = + .tooltiptext = Розумна інверсія кольорів +zen-boost-controls = + .tooltiptext = Розширені налаштування кольору +zen-boost-disable = + .tooltiptext = Вимкнути налаштування кольору +zen-boost-text-case-toggle = + .tooltiptext = Змінити регістр тексту +zen-boost-css-picker = + .tooltiptext = Вибір селектора +zen-boost-css-inspector = + .tooltiptext = Відкрити інспектора +zen-bootst-color-contrast = Контраст +zen-bootst-color-brightness = Яскравість +zen-bootst-color-original-saturation = Оригінальна насиченість +zen-add-zap-helper = Клацніть на елементи на сторінці, щоби сховати їх +zen-remove-zap-helper = ← Клацніть, аби знову показати +zen-select-this = Вставити селектор для цього +zen-select-related = Вставити селектор для пов’язаних елементів +zen-select-cancel = Скасувати +zen-zap-this = Сховати їх +zen-zap-related = Сховати всі пов’язані елементи +zen-zap-cancel = Скасувати +zen-zap-done = Готово +zen-unzap-tooltip = + { $elementCount -> + [0] Жоден елемент не сховано + [1] Сховано {$elementCount} елемент + [few] Сховано {$elementCount} елементи + *[other] Сховано {$elementCount} елементів + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Підсилення експортовано! +zen-site-data-boosts = Підсилення +zen-site-data-create-boost = + .tooltiptext = Створити нове підсилення +zen-boost-rename-boost-prompt = Перейменувати підсилення? diff --git a/locales/uk/browser/browser/zen-split-view.ftl b/locales/uk/browser/browser/zen-split-view.ftl index 77ea3247f..4a6b7ca9b 100644 --- a/locales/uk/browser/browser/zen-split-view.ftl +++ b/locales/uk/browser/browser/zen-split-view.ftl @@ -7,8 +7,8 @@ tab-zen-split-tabs = { $tabCount -> [-1] Відокремити вкладку [1] Додати розділений перегляд... - [few] Об’єднати { $tabCount } вкладки - *[other] Об’єднати { $tabCount } вкладок + [few] Об’єднати { $tabCount } вкладки + *[other] Об’єднати { $tabCount } вкладок } .accesskey = S zen-split-link = diff --git a/locales/vi/browser/browser/preferences/zen-preferences.ftl b/locales/vi/browser/browser/preferences/zen-preferences.ftl index cc89ed45d..1158ff2aa 100644 --- a/locales/vi/browser/browser/preferences/zen-preferences.ftl +++ b/locales/vi/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = Chuyển sang không gian làm việc 9 zen-workspace-shortcut-switch-10 = Chuyển sang không gian làm việc 10 zen-workspace-shortcut-forward = Không gian làm việc tiếp theo zen-workspace-shortcut-backward = Không gian làm việc trước +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = Điều chỉnh độ rộng thanh bên zen-pinned-tab-shortcut-reset = Đặt lại thẻ đã ghim về địa chỉ gốc zen-split-view-shortcut-grid = Bật/Tắt chia lưới @@ -317,4 +318,5 @@ zen-devtools-toggle-dom-shortcut = Bật/Tắt DOM zen-devtools-toggle-accessibility-shortcut = Bật/Tắt trợ năng zen-close-all-unpinned-tabs-shortcut = Đóng tất cả thẻ chưa ghim zen-new-unsynced-window-shortcut = Cửa sổ trống mới -zen-duplicate-tab-shortcut = Duplicate Tab +zen-duplicate-tab-shortcut = Nhân đôi tab +zen-key-find-selection = Find Selection diff --git a/locales/vi/browser/browser/zen-boosts.ftl b/locales/vi/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..734f49741 --- /dev/null +++ b/locales/vi/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = Đổi tên cải tiến +zen-boost-edit-shuffle = + .label = Trộn Vibe +zen-boost-edit-reset = + .label = Đặt lại tất cả chỉnh sửa +zen-boost-edit-delete = + .label = Xóa cải tiến +zen-boost-size = Kích thước +zen-boost-case = Case +zen-boost-zap = Khử +zen-boost-code = Code +zen-boost-back = Quay lại +zen-boost-shuffle = + .tooltiptext = Xáo trộn cài đặt cải tiến +zen-boost-invert = + .tooltiptext = Đảo ngược màu thông minh +zen-boost-controls = + .tooltiptext = Chỉnh màu nâng cao +zen-boost-disable = + .tooltiptext = Tắt điều chỉnh màu +zen-boost-text-case-toggle = + .tooltiptext = Chuyển đổi kiểu chữ +zen-boost-css-picker = + .tooltiptext = Chọn phần tử +zen-boost-css-inspector = + .tooltiptext = Mở trình kiểm tra +zen-bootst-color-contrast = Độ tương phản +zen-bootst-color-brightness = Độ sáng +zen-bootst-color-original-saturation = Độ bão hòa gốc +zen-add-zap-helper = Nhấp vào các phần tử trên trang để Khử chúng +zen-remove-zap-helper = ← Nhấp để khôi phục +zen-select-this = Nhập bộ chọn cho phần tử này +zen-select-related = Nhập bộ chọn cho các phần tử liên quan +zen-select-cancel = Hủy +zen-zap-this = Khử phần tử này +zen-zap-related = Khử tất cả phần tử liên quan +zen-zap-cancel = Hủy +zen-zap-done = Xong +zen-unzap-tooltip = + { $elementCount -> + [0] Chưa khử phần tử nào + [1] Đã khử { $elementCount } phần tử + *[other] Đã khử { $elementCount } phần tử + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Đã xuất cải tiến! +zen-site-data-boosts = Cải tiến +zen-site-data-create-boost = + .tooltiptext = Tạo cải tiến mới +zen-boost-rename-boost-prompt = Đổi tên cải tiến? diff --git a/locales/vi/browser/browser/zen-general.ftl b/locales/vi/browser/browser/zen-general.ftl index 71e6413c8..405d42a21 100644 --- a/locales/vi/browser/browser/zen-general.ftl +++ b/locales/vi/browser/browser/zen-general.ftl @@ -2,7 +2,7 @@ # 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/. -zen-panel-ui-current-profile-text = Hồ sơ hiện tại +zen-panel-ui-current-profile-text = hồ sơ hiện tại unified-extensions-description = Các tiện ích mở rộng được sử dụng để mang thêm tính năng vào { -brand-short-name }. tab-context-zen-reset-pinned-tab = .label = @@ -14,7 +14,7 @@ tab-context-zen-reset-pinned-tab = tab-context-zen-add-essential = .label = Thêm vào thẻ chính .accesskey = E -tab-context-zen-add-essential-badge = Đã dùng { $num } / { $max } vị trí +tab-context-zen-add-essential-badge = { $num } / { $max } tab-context-zen-remove-essential = .label = Gỡ khỏi thẻ chính .accesskey = R @@ -48,7 +48,7 @@ zen-pinned-tab-replaced = URL của thẻ đã ghim đã được thay thế b zen-tabs-renamed = Thẻ đã được đổi tên! zen-background-tab-opened-toast = Một thẻ mới đã được mở dưới nền! zen-workspace-renamed-toast = Không gian làm việc đã được đổi tên! -zen-split-view-limit-toast = Can't add more panels to the split view! +zen-split-view-limit-toast = Không thể chia thêm màn hình! zen-toggle-compact-mode-button = .label = Chế độ thu gọn .tooltiptext = Bật Chế độ thu gọn diff --git a/locales/vi/browser/browser/zen-split-view.ftl b/locales/vi/browser/browser/zen-split-view.ftl index ec563698d..8487bb03e 100644 --- a/locales/vi/browser/browser/zen-split-view.ftl +++ b/locales/vi/browser/browser/zen-split-view.ftl @@ -5,9 +5,9 @@ tab-zen-split-tabs = .label = { $tabCount -> - [-1] Split out tab - [1] Add split view... - *[other] Join { $tabCount } Tabs + [-1] Tách thẻ + [1] Chia đôi màn hình... + *[other] Gộp { $tabCount } thẻ } .accesskey = S zen-split-link = diff --git a/locales/vi/browser/browser/zen-vertical-tabs.ftl b/locales/vi/browser/browser/zen-vertical-tabs.ftl index ae63b8b3b..6d07a6796 100644 --- a/locales/vi/browser/browser/zen-vertical-tabs.ftl +++ b/locales/vi/browser/browser/zen-vertical-tabs.ftl @@ -18,7 +18,7 @@ zen-toolbar-context-compact-mode-hide-both = .label = Ẩn cả hai .accesskey = H zen-toolbar-context-move-to-folder = - .label = Move to Folder... + .label = Chuyển vào thư mục... .accesskey = M zen-toolbar-context-new-folder = .label = Thư mục mới diff --git a/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl b/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl index da82d2771..cc5014b4f 100644 --- a/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl +++ b/locales/zh-CN/browser/browser/preferences/zen-preferences.ftl @@ -281,6 +281,7 @@ zen-workspace-shortcut-switch-9 = 切换到工作区 9 zen-workspace-shortcut-switch-10 = 切换到工作区 10 zen-workspace-shortcut-forward = 下一个工作区 zen-workspace-shortcut-backward = 上一个工作区 +zen-workspace-shortcut-create = Create New Workspace zen-sidebar-shortcut-toggle = 折叠/展开侧边栏 zen-pinned-tab-shortcut-reset = 重置固定标签页至其固定的 URL zen-split-view-shortcut-grid = 切换网格分屏视图 @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = 切换无障碍环境 zen-close-all-unpinned-tabs-shortcut = 关闭所有未固定的标签页 zen-new-unsynced-window-shortcut = 新建空白窗口 zen-duplicate-tab-shortcut = 克隆标签页 +zen-key-find-selection = Find Selection diff --git a/locales/zh-CN/browser/browser/zen-boosts.ftl b/locales/zh-CN/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..be617b8c7 --- /dev/null +++ b/locales/zh-CN/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = 重命名 Boost +zen-boost-edit-shuffle = + .label = 随机氛围 +zen-boost-edit-reset = + .label = 重置所有编辑 +zen-boost-edit-delete = + .label = 删除 Boost +zen-boost-size = 尺寸 +zen-boost-case = Case +zen-boost-zap = 屏蔽 +zen-boost-code = 代码 +zen-boost-back = 返回 +zen-boost-shuffle = + .tooltiptext = 随机 Boost 设置 +zen-boost-invert = + .tooltiptext = 智能反转颜色 +zen-boost-controls = + .tooltiptext = 高级颜色控制 +zen-boost-disable = + .tooltiptext = 禁用颜色调整 +zen-boost-text-case-toggle = + .tooltiptext = 切换文本大小写 +zen-boost-css-picker = + .tooltiptext = 选取选择器 +zen-boost-css-inspector = + .tooltiptext = 打开查看器 +zen-bootst-color-contrast = 对比度 +zen-bootst-color-brightness = 亮度 +zen-bootst-color-original-saturation = 初始饱和度 +zen-add-zap-helper = 点击页面上的元素以将其屏蔽 +zen-remove-zap-helper = ← 点击以取消屏蔽 +zen-select-this = 插入此元素的选择器 +zen-select-related = 插入相关元素的选择器 +zen-select-cancel = 取消 +zen-zap-this = 屏蔽此元素 +zen-zap-related = 屏蔽所有相关元素 +zen-zap-cancel = 取消 +zen-zap-done = 完成 +zen-unzap-tooltip = + { $elementCount -> + [0] 没有已屏蔽的元素 + [1] 已屏蔽 { $elementCount } 个元素 + *[other] 已屏蔽 { $elementCount } 个元素 + } +zen-boost-save = + .label = Export Boost +zen-boost-load = + .label = Import Boost +zen-panel-ui-boosts-exported-message = Boost 已导出! +zen-site-data-boosts = Boost +zen-site-data-create-boost = + .tooltiptext = 新建 Boost +zen-boost-rename-boost-prompt = 重命名 Boost 吗? diff --git a/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl b/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl index 0b7a4eb24..e47b873db 100644 --- a/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl +++ b/locales/zh-TW/browser/browser/preferences/zen-preferences.ftl @@ -52,11 +52,11 @@ zen-tabs-cycle-by-attribute = .label = Ctrl+Tab 僅會在 Essential 分頁或是 Workspace 分頁之間切換 zen-tabs-cycle-ignore-pending-tabs = .label = 使用 Ctrl+Tab 切換分頁時,忽略卸載的分頁 -zen-tabs-cycle-by-attribute-warning = Ctrl+Tab 將按最近使用順序循環,因為該設定已啟用 +zen-tabs-cycle-by-attribute-warning = 依當前設定,Ctrl+Tab 將按最近使用順序循環 zen-look-and-feel-compact-toolbar-themed = - .label = 將主題顏色套用至緊湊模式時的工具欄 + .label = 將主題顏色套用至緊湊模式下的工具欄 zen-workspace-continue-where-left-off = - .label = 從上次最後造訪的分頁繼續開始 + .label = 從上次離開時的分頁繼續開始 pane-zen-pinned-tab-manager-title = 釘選分頁 zen-pinned-tab-manager-header = 釘選分頁的一般設定 zen-pinned-tab-manager-description = 釘選分頁的額外行為 @@ -89,7 +89,7 @@ zen-key-conflict = 與 { $group } -> { $shortcut } 衝突 pane-zen-theme-title = 主題設定 zen-vertical-tabs-title = 側邊欄與分頁排版 zen-vertical-tabs-header = 垂直分頁 -zen-vertical-tabs-description = 用垂直的排版來管理你的分頁 +zen-vertical-tabs-description = 用垂直列表來管理你的分頁 zen-vertical-tabs-show-expand-button = .label = 顯示擴展按鈕 zen-vertical-tabs-newtab-on-tab-list = @@ -122,9 +122,9 @@ zen-theme-marketplace-export-failure = 匯出模組時發生錯誤 zen-theme-marketplace-updates-success = 主題更新成功 zen-theme-marketplace-updates-failure = 找不到任何更新! zen-theme-marketplace-toggle-enabled-button = - .title = 關閉佈景主題 + .title = 關閉模組 zen-theme-marketplace-toggle-disabled-button = - .title = 啟用佈景主題 + .title = 啟用模組 zen-theme-marketplace-remove-confirmation = 您確定要移除此模組? zen-theme-marketplace-close-modal = 關閉 zen-theme-marketplace-theme-header-title = @@ -145,9 +145,9 @@ zen-dark-theme-styles-amoled = 夜間主題 zen-dark-theme-styles-default = 預設深色主題 zen-dark-theme-styles-colorful = 有趣的深色主題 zen-compact-mode-styles-left = 隱藏分頁欄 -zen-compact-mode-styles-top = 隱藏功能列 +zen-compact-mode-styles-top = 隱藏頂端列 zen-compact-mode-styles-both = 隱藏兩者 -zen-urlbar-title = Zen 網址欄 +zen-urlbar-title = Zen 網址列 zen-urlbar-header = 網址列一般設定 zen-urlbar-description = 自訂義您喜歡的網址列 zen-urlbar-behavior-label = 行為 @@ -164,7 +164,7 @@ pane-settings-CKS-title = { -brand-short-name } 快捷鍵 category-zen-marketplace = .tooltiptext = Zen 模組 zen-settings-CKS-header = 自定義您的快捷鍵 -zen-settings-CKS-description = 依據您的愛好來更改預設的快捷鍵以進一步改善瀏覽體驗 +zen-settings-CKS-description = 依您喜好來更改預設的快捷鍵以進一步改善瀏覽體驗 zen-settings-CKS-disable-firefox = .label = 停用 { -brand-short-name } 的預設快捷鍵 zen-settings-CKS-duplicate-shortcut = @@ -281,9 +281,10 @@ zen-workspace-shortcut-switch-9 = 切換至工作區 9 zen-workspace-shortcut-switch-10 = 切換至工作區 10 zen-workspace-shortcut-forward = 下一個工作區 zen-workspace-shortcut-backward = 上一個工作區 +zen-workspace-shortcut-create = 新增工作區 zen-sidebar-shortcut-toggle = 切換側邊欄寬度 zen-pinned-tab-shortcut-reset = 重置釘選分頁至其初始的網址 -zen-split-view-shortcut-grid = 切換分割畫面 +zen-split-view-shortcut-grid = 切換分割畫面排列 zen-split-view-shortcut-vertical = 切換垂直分割畫面 zen-split-view-shortcut-horizontal = 切換水平分割畫面 zen-split-view-shortcut-unsplit = 關閉分割畫面 @@ -318,3 +319,4 @@ zen-devtools-toggle-accessibility-shortcut = 開啟輔助功能 zen-close-all-unpinned-tabs-shortcut = 關閉所有未釘選的分頁 zen-new-unsynced-window-shortcut = 開新簡白視窗 zen-duplicate-tab-shortcut = 複製分頁 +zen-key-find-selection = 尋找選取文字 diff --git a/locales/zh-TW/browser/browser/zen-boosts.ftl b/locales/zh-TW/browser/browser/zen-boosts.ftl new file mode 100644 index 000000000..d9fefbb04 --- /dev/null +++ b/locales/zh-TW/browser/browser/zen-boosts.ftl @@ -0,0 +1,58 @@ +# 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/. + +zen-boost-edit-rename = + .label = 重新命名 +zen-boost-edit-shuffle = + .label = 換個感覺 +zen-boost-edit-reset = + .label = 回復原狀 +zen-boost-edit-delete = + .label = 刪除樣式 +zen-boost-size = 縮放 +zen-boost-case = 大小寫 +zen-boost-zap = Zap +zen-boost-code = 樣式表 +zen-boost-back = 返回 +zen-boost-shuffle = + .tooltiptext = 重骰設定 +zen-boost-invert = + .tooltiptext = 反轉色調 +zen-boost-controls = + .tooltiptext = 色調進階調整 +zen-boost-disable = + .tooltiptext = 禁用色調變動 +zen-boost-text-case-toggle = + .tooltiptext = 切換文字大小寫 +zen-boost-css-picker = + .tooltiptext = 汲取選擇器 +zen-boost-css-inspector = + .tooltiptext = 開啟檢測器 +zen-bootst-color-contrast = 對比 +zen-bootst-color-brightness = 亮度 +zen-bootst-color-original-saturation = 飽和度 +zen-add-zap-helper = 選擇要 Zap的元素 +zen-remove-zap-helper = ← 按此取消zap +zen-select-this = 加入此元素的選擇器 +zen-select-related = 加入關連元素的選擇器 +zen-select-cancel = 取消 +zen-zap-this = Zap +zen-zap-related = Zap關連元素 +zen-zap-cancel = 取消 +zen-zap-done = 完成 +zen-unzap-tooltip = + { $elementCount -> + [0] 沒有被Zap的元素 + [1] { $elementCount } 個元素已Zap + *[other] { $elementCount } 個元素已Zap + } +zen-boost-save = + .label = 匯出 Boost +zen-boost-load = + .label = 匯入 Boost +zen-panel-ui-boosts-exported-message = Boost已匯出! +zen-site-data-boosts = Boost +zen-site-data-create-boost = + .tooltiptext = 建立新Boost +zen-boost-rename-boost-prompt = 重新命名為? diff --git a/locales/zh-TW/browser/browser/zen-general.ftl b/locales/zh-TW/browser/browser/zen-general.ftl index 2f32fe5eb..99476e47b 100644 --- a/locales/zh-TW/browser/browser/zen-general.ftl +++ b/locales/zh-TW/browser/browser/zen-general.ftl @@ -45,9 +45,9 @@ zen-general-cancel-label = zen-general-confirm = .label = 確認 zen-pinned-tab-replaced = 釘選分頁網址已替換為當前網址! -zen-tabs-renamed = 已成功重新命名分頁! -zen-background-tab-opened-toast = 已在背景開啟新分頁! -zen-workspace-renamed-toast = 已成功重新命名工作區! +zen-tabs-renamed = 成功重新命名分頁! +zen-background-tab-opened-toast = 新分頁已在背景開啟! +zen-workspace-renamed-toast = 成功重新命名工作區! zen-split-view-limit-toast = 無法加入更多分頁至分割畫面! zen-toggle-compact-mode-button = .label = 緊湊模式 @@ -122,4 +122,4 @@ zen-window-sync-migration-dialog-message = Zen現在能同步同裝置上的各 zen-window-sync-migration-dialog-learn-more = 了解更多 zen-window-sync-migration-dialog-accept = 明白了 zen-appmenu-new-blank-window = - .label = 新簡白視窗 + .label = 開新簡白視窗 diff --git a/package.json b/package.json index 0ebf49c20..6e7fd8fd0 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "surfer": "surfer", "test": "python3 scripts/run_tests.py", "test:dbg": "python3 scripts/run_tests.py --jsdebugger --debug-on-failure", + "test:gtest": "cd engine && ./mach gtest", "ffprefs": "cd tools/ffprefs && cargo run --bin ffprefs -- ../../", "lc": "surfer license-check", "lc:fix": "surfer license-check --fix", diff --git a/prefs/firefox/browser.yaml b/prefs/firefox/browser.yaml index 23db6a4e4..341577cac 100644 --- a/prefs/firefox/browser.yaml +++ b/prefs/firefox/browser.yaml @@ -87,6 +87,10 @@ value: false locked: true +# See gh-13853 for details on why we should disable this preference +- name: browser.privatebrowsing.resetPBM.enabled + value: false + # See gh-12985 for details on the following preferences - name: browser.search.widget.new value: true diff --git a/prefs/privatefox/disablemozilla.yaml b/prefs/privatefox/disablemozilla.yaml index 41b7d06e7..e974e977b 100644 --- a/prefs/privatefox/disablemozilla.yaml +++ b/prefs/privatefox/disablemozilla.yaml @@ -44,3 +44,10 @@ - name: browser.taskbarTabs.enabled value: false + +- name: browser.contentblocking.report.hide_vpn_banner + value: true + locked: true + +- name: browser.vpn_promo.enabled + value: false diff --git a/prefs/zen/boosts.yaml b/prefs/zen/boosts.yaml index b0de3d3fa..b9ab5b473 100644 --- a/prefs/zen/boosts.yaml +++ b/prefs/zen/boosts.yaml @@ -3,7 +3,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. - name: zen.boosts.enabled - value: "@IS_TWILIGHT@" + value: true - name: zen.boosts.dissolve-on-zap value: true diff --git a/prefs/zen/mods.yaml b/prefs/zen/mods.yaml index 207c7e074..86f1f00c0 100644 --- a/prefs/zen/mods.yaml +++ b/prefs/zen/mods.yaml @@ -12,9 +12,6 @@ value: "@cond" condition: "defined(MOZILLA_OFFICIAL)" -- name: zen.rice.share.notice.accepted - value: false - # === Mark: Site Injection === - name: zen.injections.match-urls diff --git a/prefs/zen/view.yaml b/prefs/zen/view.yaml index 5a94673a4..69066e600 100644 --- a/prefs/zen/view.yaml +++ b/prefs/zen/view.yaml @@ -59,10 +59,10 @@ value: true - name: zen.view.overflow-webext-toolbar - value: "@IS_TWILIGHT@" + value: true - name: zen.view.overflow-webext-toolbar-threshold - value: 50 + value: 55 - name: zen.view.enable-loading-indicator value: true diff --git a/src/accessible/base/TextAttrs-cpp.patch b/src/accessible/base/TextAttrs-cpp.patch new file mode 100644 index 000000000..b88ca20d4 --- /dev/null +++ b/src/accessible/base/TextAttrs-cpp.patch @@ -0,0 +1,18 @@ +diff --git a/accessible/base/TextAttrs.cpp b/accessible/base/TextAttrs.cpp +index d2ce06bef67ecb6d6ccb798a62d7f2759dd9da18..fb4952df9aa54d4085a282dc269a48ad72979b8b 100644 +--- a/accessible/base/TextAttrs.cpp ++++ b/accessible/base/TextAttrs.cpp +@@ -237,11 +237,11 @@ bool TextAttrsMgr::BGColorTextAttr::GetColor(nsIFrame* aFrame, + TextAttrsMgr::ColorTextAttr::ColorTextAttr(nsIFrame* aRootFrame, + nsIFrame* aFrame) + : TTextAttr(!aFrame) { +- mRootNativeValue = aRootFrame->StyleText()->mColor.ToColor(); ++ mRootNativeValue = aRootFrame->StyleText()->mColor.ToColor(aRootFrame); + mIsRootDefined = true; + + if (aFrame) { +- mNativeValue = aFrame->StyleText()->mColor.ToColor(); ++ mNativeValue = aFrame->StyleText()->mColor.ToColor(aFrame); + mIsDefined = true; + } + } diff --git a/src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch b/src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch new file mode 100644 index 000000000..d751fa9b8 --- /dev/null +++ b/src/accessible/windows/ia2/ia2AccessibleComponent-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/accessible/windows/ia2/ia2AccessibleComponent.cpp b/accessible/windows/ia2/ia2AccessibleComponent.cpp +index 7837fdee3db339543f8b3d95dcb23ebe99aed8dc..207adf3ded9848b84ec89e94f80e8e02f161923c 100644 +--- a/accessible/windows/ia2/ia2AccessibleComponent.cpp ++++ b/accessible/windows/ia2/ia2AccessibleComponent.cpp +@@ -81,7 +81,7 @@ ia2AccessibleComponent::get_foreground(IA2Color* aForeground) { + if (!acc) return CO_E_OBJNOTCONNECTED; + + nsIFrame* frame = acc->GetFrame(); +- if (frame) *aForeground = frame->StyleText()->mColor.ToColor(); ++ if (frame) *aForeground = frame->StyleText()->mColor.ToColor(frame); + + return S_OK; + } diff --git a/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch b/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch index 4b057e3d2..861ba1f81 100644 --- a/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch +++ b/src/browser/components/customizableui/CustomizableUI-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs -index 5905271a3343efa04b45f5d1a63bfca3de342755..af76922c1ba0b35a0072ec044f7d0860f9295d9d 100644 +index 5905271a3343efa04b45f5d1a63bfca3de342755..37f57de0ad72271d4c6e188ab9841b23b95f08d0 100644 --- a/browser/components/customizableui/CustomizableUI.sys.mjs +++ b/browser/components/customizableui/CustomizableUI.sys.mjs @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, { @@ -195,7 +195,7 @@ index 5905271a3343efa04b45f5d1a63bfca3de342755..af76922c1ba0b35a0072ec044f7d0860 + win.gZenVerticalTabsManager._hasSetSingleToolbar && + Services.prefs.getBoolPref("zen.view.overflow-webext-toolbar", true) && + !win.gURLBar.hasAttribute("breakout-extend")) { -+ const availSelectors = ":is(#page-action-buttons, #zen-copy-url-button, .unified-extensions-item)"; ++ const availSelectors = ":is(#page-action-buttons, #zen-copy-url-button, .unified-extensions-item, .urlbar-addon-page-action)"; + const width = [ + ...win.gURLBar._inputContainer.querySelectorAll(availSelectors), + ...win.document.getElementById("zen-overflow-extensions-list").querySelectorAll(availSelectors) diff --git a/src/browser/components/preferences/zen-settings.js b/src/browser/components/preferences/zen-settings.js index 16ddcbc63..2d6bef1a8 100644 --- a/src/browser/components/preferences/zen-settings.js +++ b/src/browser/components/preferences/zen-settings.js @@ -793,6 +793,7 @@ const zenMissingKeyboardShortcutL10n = { key_selectTab7: "zen-key-select-tab-7", key_selectTab8: "zen-key-select-tab-8", key_selectLastTab: "zen-key-select-tab-last", + key_duplicateTab: "customkeys-file-duplicate-tab", key_showAllTabs: "zen-key-show-all-tabs", key_gotoHistory: "zen-key-goto-history", @@ -801,6 +802,7 @@ const zenMissingKeyboardShortcutL10n = { key_redo: "zen-key-redo", key_inspectorMac: "zen-key-inspector-mac", + key_findSelection: "zen-key-find-selection", // Devtools key_toggleToolbox: "zen-devtools-toggle-shortcut", @@ -1124,7 +1126,7 @@ var gZenCKSSettings = { this._hasSafed = false; input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-invalid`); input.classList.remove(`${ZEN_CKS_INPUT_FIELD_CLASS}-not-set`); - input.value = modifiers.toDisplayString() + shortcut; + input.value = modifiers.toDisplayString() + gZenKeyboardShortcutsManager.getKeyDisplay(shortcut); this._latestValidKey = shortcut; }, }; diff --git a/src/browser/components/tabbrowser/content/tabgroup-js.patch b/src/browser/components/tabbrowser/content/tabgroup-js.patch index 5b242496c..60b9eafae 100644 --- a/src/browser/components/tabbrowser/content/tabgroup-js.patch +++ b/src/browser/components/tabbrowser/content/tabgroup-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js -index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c1a15b335 100644 +index d1be14df27d76a191eaff05502c030fd68c46738..e9b5e90e39b594a6119081c8d707fb4a064fea9b 100644 --- a/browser/components/tabbrowser/content/tabgroup.js +++ b/browser/components/tabbrowser/content/tabgroup.js @@ -14,11 +14,11 @@ @@ -147,7 +147,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c }); } -@@ -478,13 +511,65 @@ +@@ -478,13 +511,68 @@ * @returns {MozTabbrowserTab[]} */ get tabs() { @@ -162,8 +162,9 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c + tabsCollect.push(item); + if (gBrowser.isTabGroup(item)) { + tabsCollect.push(...item.tabs); -+ } -+ } + } + } +- return childrenArray.filter(node => node.matches("tab")); + return tabsCollect.filter(node => node.matches("tab")); + } + @@ -189,9 +190,8 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c + result.push(labelContainer); + } + result.push(...item.childGroupsAndTabs); - } - } -- return childrenArray.filter(node => node.matches("tab")); ++ } ++ } + return result; + } + @@ -210,6 +210,9 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c + return false; + } + } ++ if (this.pinned && gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs) { ++ return false; ++ } + return true; + } + @@ -218,7 +221,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c } /** -@@ -592,7 +677,6 @@ +@@ -592,7 +680,6 @@ ); } else { if (tabOrSplitView.pinned) { @@ -226,7 +229,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c } let tabToMove = this.ownerGlobal === tabOrSplitView.ownerGlobal -@@ -661,7 +745,7 @@ +@@ -661,7 +748,7 @@ */ on_click(event) { let isToggleElement = @@ -235,7 +238,7 @@ index d1be14df27d76a191eaff05502c030fd68c46738..30e8dda663df8e96dbed5fe5f12f828c event.target === this.#overflowCountLabel; if (isToggleElement && event.button === 0) { event.preventDefault(); -@@ -740,5 +824,6 @@ +@@ -740,5 +827,6 @@ } } diff --git a/src/browser/modules/URILoadingHelper-sys-mjs.patch b/src/browser/modules/URILoadingHelper-sys-mjs.patch index a804e232a..82ac3592b 100644 --- a/src/browser/modules/URILoadingHelper-sys-mjs.patch +++ b/src/browser/modules/URILoadingHelper-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs -index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202e12a6f39 100644 +index bd2e54e914b171df9b8bcc7dcbc2388e9641f6c6..8b3cb6542bea3fb89e47adc93cb13f94447450e2 100644 --- a/browser/modules/URILoadingHelper.sys.mjs +++ b/browser/modules/URILoadingHelper.sys.mjs -@@ -224,6 +224,7 @@ function openInWindow(url, params, sourceWindow) { +@@ -228,6 +228,7 @@ function openInWindow(url, params, sourceWindow) { features, sa ); @@ -10,7 +10,7 @@ index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202 } function openInCurrentTab(targetBrowser, url, uriObj, params) { -@@ -541,7 +542,7 @@ export const URILoadingHelper = { +@@ -545,7 +546,7 @@ export const URILoadingHelper = { // page. If a load request bounces off for the currently selected tab, // we'll open a new tab instead. let tab = w.gBrowser.getTabForBrowser(targetBrowser); @@ -19,7 +19,7 @@ index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202 where = "tab"; targetBrowser = null; } else if ( -@@ -974,7 +975,7 @@ export const URILoadingHelper = { +@@ -978,7 +979,7 @@ export const URILoadingHelper = { ignoreQueryString || replaceQueryString, ignoreFragmentWhenComparing ); @@ -28,8 +28,8 @@ index ed6b9fda700b2b4b35836a77a4da953377a72f4b..22acedcf1006f994ec8b6bf8991b4202 for (let i = 0; i < browsers.length; i++) { let browser = browsers[i]; let browserCompare = cleanURL( -@@ -1026,7 +1027,7 @@ export const URILoadingHelper = { - aSplitView.replaceTab(tabToReplace, tabToMove); +@@ -1034,7 +1035,7 @@ export const URILoadingHelper = { + } aSplitView.ownerGlobal.focus(); } else { - aWindow.gBrowser.tabContainer.selectedIndex = i; diff --git a/src/browser/themes/shared/zen-icons/icons.css b/src/browser/themes/shared/zen-icons/icons.css index f265d890d..0c45bc216 100644 --- a/src/browser/themes/shared/zen-icons/icons.css +++ b/src/browser/themes/shared/zen-icons/icons.css @@ -436,6 +436,7 @@ } #zen-copy-current-url-button, +#share-tab-button, #zen-site-data-header-share { list-style-image: url("share.svg"); } @@ -925,7 +926,7 @@ position: relative; - list-style-image: url("paintbrush.svg"); + list-style-image: url("boost.svg"); & .toolbarbutton-text { display: none; @@ -938,6 +939,8 @@ & image { -moz-context-properties: fill, fill-opacity; fill: currentColor; + width: 14px; + fill-opacity: 0.7; } } @@ -1067,7 +1070,7 @@ } #zen-boost-shuffle { - list-style-image: url("arrow-rotate-anticlockwise.svg"); + list-style-image: url("dice.svg"); } #zen-boost-css-picker { diff --git a/src/browser/themes/shared/zen-icons/jar.inc.mn b/src/browser/themes/shared/zen-icons/jar.inc.mn index 431db3c6f..243cb317a 100644 --- a/src/browser/themes/shared/zen-icons/jar.inc.mn +++ b/src/browser/themes/shared/zen-icons/jar.inc.mn @@ -13,6 +13,7 @@ * skin/classic/browser/zen-icons/autoplay-media-fill.svg (../shared/zen-icons/nucleo/autoplay-media-fill.svg) * skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/nucleo/autoplay-media.svg) * skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/nucleo/back.svg) +* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/block.svg (../shared/zen-icons/nucleo/block.svg) * skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/bolt.svg (../shared/zen-icons/nucleo/bolt.svg) @@ -37,6 +38,7 @@ * skin/classic/browser/zen-icons/desktop-notification-fill.svg (../shared/zen-icons/nucleo/desktop-notification-fill.svg) * skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/nucleo/desktop-notification.svg) * skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/nucleo/developer.svg) +* skin/classic/browser/zen-icons/dice.svg (../shared/zen-icons/nucleo/dice.svg) * skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/nucleo/downloads.svg) * skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/nucleo/drag-indicator.svg) * skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/nucleo/duplicate-tab.svg) @@ -102,26 +104,26 @@ * skin/classic/browser/zen-icons/popup-fill.svg (../shared/zen-icons/nucleo/popup-fill.svg) * skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/nucleo/popup.svg) * skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/nucleo/print.svg) -* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/nucleo/privateBrowsing.svg) +* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/nucleo/reader-mode.svg) * skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/nucleo/reload.svg) * skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/nucleo/save.svg) * skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/nucleo/screen-blocked.svg) -* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/nucleo/screenshot.svg) +* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/nucleo/search-glass.svg) * skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/nucleo/search-page.svg) * skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/nucleo/security-broken.svg) -* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/nucleo/security.svg) +* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/nucleo/send-to-device.svg) * skin/classic/browser/zen-icons/settings-fill.svg (../shared/zen-icons/nucleo/settings-fill.svg) * skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/nucleo/settings.svg) * skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/nucleo/share.svg) * skin/classic/browser/zen-icons/sidebar-right.svg (../shared/zen-icons/nucleo/sidebar-right.svg) -* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/nucleo/sidebars-right.svg) +* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sliders.svg (../shared/zen-icons/nucleo/sliders.svg) * skin/classic/browser/zen-icons/sparkles.svg (../shared/zen-icons/nucleo/sparkles.svg) * skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/nucleo/spell-check.svg) @@ -161,6 +163,7 @@ * skin/classic/browser/zen-icons/autoplay-media-fill.svg (../shared/zen-icons/nucleo/autoplay-media-fill.svg) * skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/nucleo/autoplay-media.svg) * skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/nucleo/back.svg) +* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/block.svg (../shared/zen-icons/nucleo/block.svg) * skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/bolt.svg (../shared/zen-icons/nucleo/bolt.svg) @@ -185,6 +188,7 @@ * skin/classic/browser/zen-icons/desktop-notification-fill.svg (../shared/zen-icons/nucleo/desktop-notification-fill.svg) * skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/nucleo/desktop-notification.svg) * skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/nucleo/developer.svg) +* skin/classic/browser/zen-icons/dice.svg (../shared/zen-icons/nucleo/dice.svg) * skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/nucleo/downloads.svg) * skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/nucleo/drag-indicator.svg) * skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/nucleo/duplicate-tab.svg) @@ -250,26 +254,26 @@ * skin/classic/browser/zen-icons/popup-fill.svg (../shared/zen-icons/nucleo/popup-fill.svg) * skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/nucleo/popup.svg) * skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/nucleo/print.svg) -* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/nucleo/privateBrowsing.svg) +* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/nucleo/reader-mode.svg) * skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/nucleo/reload.svg) * skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/nucleo/save.svg) * skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/nucleo/screen-blocked.svg) -* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/nucleo/screenshot.svg) +* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/nucleo/search-glass.svg) * skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/nucleo/search-page.svg) * skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/nucleo/security-broken.svg) -* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/nucleo/security.svg) +* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/nucleo/send-to-device.svg) * skin/classic/browser/zen-icons/settings-fill.svg (../shared/zen-icons/nucleo/settings-fill.svg) * skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/nucleo/settings.svg) * skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/nucleo/share.svg) * skin/classic/browser/zen-icons/sidebar-right.svg (../shared/zen-icons/nucleo/sidebar-right.svg) -* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/nucleo/sidebars-right.svg) +* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sliders.svg (../shared/zen-icons/nucleo/sliders.svg) * skin/classic/browser/zen-icons/sparkles.svg (../shared/zen-icons/nucleo/sparkles.svg) * skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/nucleo/spell-check.svg) @@ -309,6 +313,7 @@ * skin/classic/browser/zen-icons/autoplay-media-fill.svg (../shared/zen-icons/nucleo/autoplay-media-fill.svg) * skin/classic/browser/zen-icons/autoplay-media.svg (../shared/zen-icons/nucleo/autoplay-media.svg) * skin/classic/browser/zen-icons/back.svg (../shared/zen-icons/nucleo/back.svg) +* skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/block.svg (../shared/zen-icons/nucleo/block.svg) * skin/classic/browser/zen-icons/blocked-element.svg (../shared/zen-icons/nucleo/blocked-element.svg) * skin/classic/browser/zen-icons/bolt.svg (../shared/zen-icons/nucleo/bolt.svg) @@ -333,6 +338,7 @@ * skin/classic/browser/zen-icons/desktop-notification-fill.svg (../shared/zen-icons/nucleo/desktop-notification-fill.svg) * skin/classic/browser/zen-icons/desktop-notification.svg (../shared/zen-icons/nucleo/desktop-notification.svg) * skin/classic/browser/zen-icons/developer.svg (../shared/zen-icons/nucleo/developer.svg) +* skin/classic/browser/zen-icons/dice.svg (../shared/zen-icons/nucleo/dice.svg) * skin/classic/browser/zen-icons/downloads.svg (../shared/zen-icons/nucleo/downloads.svg) * skin/classic/browser/zen-icons/drag-indicator.svg (../shared/zen-icons/nucleo/drag-indicator.svg) * skin/classic/browser/zen-icons/duplicate-tab.svg (../shared/zen-icons/nucleo/duplicate-tab.svg) @@ -398,26 +404,26 @@ * skin/classic/browser/zen-icons/popup-fill.svg (../shared/zen-icons/nucleo/popup-fill.svg) * skin/classic/browser/zen-icons/popup.svg (../shared/zen-icons/nucleo/popup.svg) * skin/classic/browser/zen-icons/print.svg (../shared/zen-icons/nucleo/print.svg) -* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/privateBrowsing.svg (../shared/zen-icons/nucleo/privateBrowsing.svg) +* skin/classic/browser/zen-icons/private-window.svg (../shared/zen-icons/nucleo/private-window.svg) * skin/classic/browser/zen-icons/reader-mode.svg (../shared/zen-icons/nucleo/reader-mode.svg) * skin/classic/browser/zen-icons/reload.svg (../shared/zen-icons/nucleo/reload.svg) * skin/classic/browser/zen-icons/save.svg (../shared/zen-icons/nucleo/save.svg) * skin/classic/browser/zen-icons/screen-blocked.svg (../shared/zen-icons/nucleo/screen-blocked.svg) -* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/screenshot.svg (../shared/zen-icons/nucleo/screenshot.svg) +* skin/classic/browser/zen-icons/screen.svg (../shared/zen-icons/nucleo/screen.svg) * skin/classic/browser/zen-icons/search-glass.svg (../shared/zen-icons/nucleo/search-glass.svg) * skin/classic/browser/zen-icons/search-page.svg (../shared/zen-icons/nucleo/search-page.svg) * skin/classic/browser/zen-icons/security-broken.svg (../shared/zen-icons/nucleo/security-broken.svg) -* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/security.svg (../shared/zen-icons/nucleo/security.svg) +* skin/classic/browser/zen-icons/security-warning.svg (../shared/zen-icons/nucleo/security-warning.svg) * skin/classic/browser/zen-icons/send-to-device.svg (../shared/zen-icons/nucleo/send-to-device.svg) * skin/classic/browser/zen-icons/settings-fill.svg (../shared/zen-icons/nucleo/settings-fill.svg) * skin/classic/browser/zen-icons/settings.svg (../shared/zen-icons/nucleo/settings.svg) * skin/classic/browser/zen-icons/share.svg (../shared/zen-icons/nucleo/share.svg) * skin/classic/browser/zen-icons/sidebar-right.svg (../shared/zen-icons/nucleo/sidebar-right.svg) -* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sidebars-right.svg (../shared/zen-icons/nucleo/sidebars-right.svg) +* skin/classic/browser/zen-icons/sidebar.svg (../shared/zen-icons/nucleo/sidebar.svg) * skin/classic/browser/zen-icons/sliders.svg (../shared/zen-icons/nucleo/sliders.svg) * skin/classic/browser/zen-icons/sparkles.svg (../shared/zen-icons/nucleo/sparkles.svg) * skin/classic/browser/zen-icons/spell-check.svg (../shared/zen-icons/nucleo/spell-check.svg) @@ -456,8 +462,8 @@ * skin/classic/browser/zen-icons/selectable/basket.svg (../shared/zen-icons/common/selectable/basket.svg) * skin/classic/browser/zen-icons/selectable/bed.svg (../shared/zen-icons/common/selectable/bed.svg) * skin/classic/browser/zen-icons/selectable/bell.svg (../shared/zen-icons/common/selectable/bell.svg) -* skin/classic/browser/zen-icons/selectable/book.svg (../shared/zen-icons/common/selectable/book.svg) * skin/classic/browser/zen-icons/selectable/bookmark.svg (../shared/zen-icons/common/selectable/bookmark.svg) +* skin/classic/browser/zen-icons/selectable/book.svg (../shared/zen-icons/common/selectable/book.svg) * skin/classic/browser/zen-icons/selectable/briefcase.svg (../shared/zen-icons/common/selectable/briefcase.svg) * skin/classic/browser/zen-icons/selectable/brush.svg (../shared/zen-icons/common/selectable/brush.svg) * skin/classic/browser/zen-icons/selectable/bug.svg (../shared/zen-icons/common/selectable/bug.svg) @@ -519,8 +525,8 @@ * skin/classic/browser/zen-icons/selectable/shapes.svg (../shared/zen-icons/common/selectable/shapes.svg) * skin/classic/browser/zen-icons/selectable/shirt.svg (../shared/zen-icons/common/selectable/shirt.svg) * skin/classic/browser/zen-icons/selectable/skull.svg (../shared/zen-icons/common/selectable/skull.svg) -* skin/classic/browser/zen-icons/selectable/square.svg (../shared/zen-icons/common/selectable/square.svg) * skin/classic/browser/zen-icons/selectable/squares.svg (../shared/zen-icons/common/selectable/squares.svg) +* skin/classic/browser/zen-icons/selectable/square.svg (../shared/zen-icons/common/selectable/square.svg) * skin/classic/browser/zen-icons/selectable/star-1.svg (../shared/zen-icons/common/selectable/star-1.svg) * skin/classic/browser/zen-icons/selectable/star.svg (../shared/zen-icons/common/selectable/star.svg) * skin/classic/browser/zen-icons/selectable/stats-chart.svg (../shared/zen-icons/common/selectable/stats-chart.svg) diff --git a/src/browser/themes/shared/zen-icons/nucleo/dice.svg b/src/browser/themes/shared/zen-icons/nucleo/dice.svg new file mode 100644 index 000000000..7a6197e79 --- /dev/null +++ b/src/browser/themes/shared/zen-icons/nucleo/dice.svg @@ -0,0 +1,5 @@ +#filter dumbComments emptyLines substitution +# 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/. + diff --git a/src/dom/canvas/CanvasRenderingContext2D-cpp.patch b/src/dom/canvas/CanvasRenderingContext2D-cpp.patch new file mode 100644 index 000000000..5a4821efc --- /dev/null +++ b/src/dom/canvas/CanvasRenderingContext2D-cpp.patch @@ -0,0 +1,14 @@ +diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp +index ca400d3aed179ebef8e005206f29b419ae56afc4..4d4e56f4a222bd61dea82638f3e0b30fbe56a176 100644 +--- a/dom/canvas/CanvasRenderingContext2D.cpp ++++ b/dom/canvas/CanvasRenderingContext2D.cpp +@@ -1326,7 +1326,8 @@ Maybe CanvasRenderingContext2D::ParseColor( + RefPtr canvasStyle = + nsComputedDOMStyle::GetComputedStyle(mCanvasElement); + if (canvasStyle) { +- return Some(canvasStyle->StyleText()->mColor.ToColor()); ++ return Some(canvasStyle->StyleText()->mColor.ToColor( ++ mCanvasElement->GetPrimaryFrame())); + } + } + return data.mColor; diff --git a/src/dom/html/HTMLInputElement-cpp.patch b/src/dom/html/HTMLInputElement-cpp.patch new file mode 100644 index 000000000..cae2a6ce0 --- /dev/null +++ b/src/dom/html/HTMLInputElement-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp +index 3374a88b9335de1659df548fe8c18610f675b336..540f22697e7b85bca2fd6d3fe952ed3944216e17 100644 +--- a/dom/html/HTMLInputElement.cpp ++++ b/dom/html/HTMLInputElement.cpp +@@ -768,7 +768,7 @@ static void SerializeColorForHTMLCompatibility(const StyleAbsoluteColor& aColor, + // Raw StyleAbsoluteColor can have floats outside of 0-1 range e.g. when + // display-p3 color is converted to srgb, and ToColor guarantees to fit the + // values within the range. +- nscolor color = aColor.ToColor(); ++ nscolor color = aColor.ToColor(nullptr); + aResult.Truncate(); + aResult.AppendPrintf("#%02x%02x%02x", NS_GET_R(color), NS_GET_G(color), + NS_GET_B(color)); diff --git a/src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch b/src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch new file mode 100644 index 000000000..919f7a30c --- /dev/null +++ b/src/editor/libeditor/HTMLAbsPositionEditor-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/editor/libeditor/HTMLAbsPositionEditor.cpp b/editor/libeditor/HTMLAbsPositionEditor.cpp +index 44bd8ba90e9828423742d768e64ad6204b3cf134..49d5c9512137ce28ac463223098515f6912452b1 100644 +--- a/editor/libeditor/HTMLAbsPositionEditor.cpp ++++ b/editor/libeditor/HTMLAbsPositionEditor.cpp +@@ -1001,7 +1001,7 @@ nsresult HTMLEditor::GetTemporaryStyleForFocusedPositionedElement( + + static const uint8_t kBlackBgTrigger = 0xd0; + +- auto color = style->StyleText()->mColor.ToColor(); ++ auto color = style->StyleText()->mColor.ToColor(aElement.GetPrimaryFrame()); + if (NS_GET_R(color) >= kBlackBgTrigger && + NS_GET_G(color) >= kBlackBgTrigger && + NS_GET_B(color) >= kBlackBgTrigger) { diff --git a/src/gfx/layers/AnimationInfo-cpp.patch b/src/gfx/layers/AnimationInfo-cpp.patch index e9779a101..7a91671c6 100644 --- a/src/gfx/layers/AnimationInfo-cpp.patch +++ b/src/gfx/layers/AnimationInfo-cpp.patch @@ -1,5 +1,5 @@ diff --git a/gfx/layers/AnimationInfo.cpp b/gfx/layers/AnimationInfo.cpp -index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..ef112715580b6bb7238e8f37bbe3133e187685dc 100644 +index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..629fbdd748310c31aeb16b0a8d8e862a99314cc9 100644 --- a/gfx/layers/AnimationInfo.cpp +++ b/gfx/layers/AnimationInfo.cpp @@ -14,6 +14,7 @@ @@ -10,12 +10,20 @@ index 1d330056bd7a4e89aac5e5296a3c164fb42b5c42..ef112715580b6bb7238e8f37bbe3133e #include "nsIContent.h" #include "nsLayoutUtils.h" #include "nsRefreshDriver.h" -@@ -343,7 +344,7 @@ static void SetAnimatable(NonCustomCSSPropertyId aProperty, +@@ -341,9 +342,13 @@ static void SetAnimatable(NonCustomCSSPropertyId aProperty, + case eCSSProperty_background_color: { + // We don't support color animation on the compositor yet so that we can // resolve currentColor at this moment. - nscolor foreground = - aFrame->Style()->GetVisitedDependentColor(&nsStyleText::mColor); +- nscolor foreground = +- aFrame->Style()->GetVisitedDependentColor(&nsStyleText::mColor); - aAnimatable = aAnimationValue.GetColor(foreground); -+ aAnimatable = zen::nsZenBoostsBackend::FilterColorFromPresContext(aAnimationValue.GetColor(foreground), aFrame->PresContext()); ++ nscolor foreground = aFrame->Style()->GetVisitedDependentColor( ++ &nsStyleText::mColor, nullptr); ++ nscolor resolved = aAnimationValue.GetColor(foreground); ++ aAnimatable = aAnimationValue.IsCurrentColor() ++ ? resolved ++ : zen::nsZenBoostsBackend::ResolveStyleColor(resolved, ++ aFrame); break; } case eCSSProperty_opacity: diff --git a/src/gfx/thebes/gfxUtils-cpp.patch b/src/gfx/thebes/gfxUtils-cpp.patch new file mode 100644 index 000000000..4227df26d --- /dev/null +++ b/src/gfx/thebes/gfxUtils-cpp.patch @@ -0,0 +1,16 @@ +diff --git a/gfx/thebes/gfxUtils.cpp b/gfx/thebes/gfxUtils.cpp +index 6c19c572f06e8c4c97ce3f9dd390a32832e2f527..d11cbad2ee32a1507316809893e9c42a883e6c12 100644 +--- a/gfx/thebes/gfxUtils.cpp ++++ b/gfx/thebes/gfxUtils.cpp +@@ -1743,8 +1743,9 @@ DeviceColor ToDeviceColor(nscolor aColor) { + return ToDeviceColor(sRGBColor::FromABGR(aColor)); + } + +-DeviceColor ToDeviceColor(const StyleAbsoluteColor& aColor) { +- return ToDeviceColor(aColor.ToColor()); ++DeviceColor ToDeviceColor(const StyleAbsoluteColor& aColor, ++ const nsIFrame* aFrame) { ++ return ToDeviceColor(aColor.ToColor(aFrame)); + } + + sRGBColor ToSRGBColor(const StyleAbsoluteColor& aColor) { diff --git a/src/gfx/thebes/gfxUtils-h.patch b/src/gfx/thebes/gfxUtils-h.patch new file mode 100644 index 000000000..548a9875a --- /dev/null +++ b/src/gfx/thebes/gfxUtils-h.patch @@ -0,0 +1,23 @@ +diff --git a/gfx/thebes/gfxUtils.h b/gfx/thebes/gfxUtils.h +index 55f874429fd8cbb7a0a469eba33f6c777a5bc5f7..8cf0567d81fcae7413cee6df9471d1fa1738fc4a 100644 +--- a/gfx/thebes/gfxUtils.h ++++ b/gfx/thebes/gfxUtils.h +@@ -598,6 +598,9 @@ class ElementOrArray { + }; + + struct StyleAbsoluteColor; ++} // namespace mozilla ++class nsIFrame; ++namespace mozilla { + + namespace gfx { + +@@ -609,7 +612,7 @@ namespace gfx { + * applicable). + */ + DeviceColor ToDeviceColor(const sRGBColor&); +-DeviceColor ToDeviceColor(const StyleAbsoluteColor&); ++DeviceColor ToDeviceColor(const StyleAbsoluteColor&, const nsIFrame*); + DeviceColor ToDeviceColor(nscolor); + + sRGBColor ToSRGBColor(const StyleAbsoluteColor&); diff --git a/src/image/AutoRestoreSVGState-h.patch b/src/image/AutoRestoreSVGState-h.patch new file mode 100644 index 000000000..bd6502135 --- /dev/null +++ b/src/image/AutoRestoreSVGState-h.patch @@ -0,0 +1,14 @@ +diff --git a/image/AutoRestoreSVGState.h b/image/AutoRestoreSVGState.h +index be639a7b78c13c2d56be49a9690bf711ccaf0a8f..28bea58034ead1206d77521934e92d3a69bfd84b 100644 +--- a/image/AutoRestoreSVGState.h ++++ b/image/AutoRestoreSVGState.h +@@ -47,6 +47,9 @@ class MOZ_STACK_CLASS AutoRestoreSVGState final { + } + return dom::PrefersColorSchemeOverride::None; + }()); ++ pc->SetZenBoostsOverride(aSVGContext.GetZenBoostsAccent(), ++ aSVGContext.GetZenBoostsComplementaryRotation(), ++ aSVGContext.GetZenBoostsInverted()); + } + + aSVGDocumentWrapper->mIsDrawing = true; diff --git a/src/layout/base/PresShell-cpp.patch b/src/layout/base/PresShell-cpp.patch index c24995ca5..3ec1da1b6 100644 --- a/src/layout/base/PresShell-cpp.patch +++ b/src/layout/base/PresShell-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp -index b5930f71e362eb78f74888e1b33b2a6f9dbb4ea4..dc1ba0b462402f62e47fcb32e2d7cd1a671a7fd8 100644 +index b5930f71e362eb78f74888e1b33b2a6f9dbb4ea4..2105911a18b64e210d3125fec1bfa8058ca07d4e 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -135,6 +135,7 @@ @@ -10,12 +10,13 @@ index b5930f71e362eb78f74888e1b33b2a6f9dbb4ea4..dc1ba0b462402f62e47fcb32e2d7cd1a #include "nsAnimationManager.h" #include "nsAutoLayoutPhase.h" #include "nsCOMArray.h" -@@ -5572,7 +5573,7 @@ nscolor PresShell::GetDefaultBackgroundColorToDraw() const { +@@ -5572,7 +5573,8 @@ nscolor PresShell::GetDefaultBackgroundColorToDraw() const { if (!mPresContext) { return NS_RGB(255, 255, 255); } - return mPresContext->DefaultBackgroundColor(); -+ return zen::nsZenBoostsBackend::FilterColorFromPresContext(mPresContext->DefaultBackgroundColor(), mPresContext); ++ return zen::nsZenBoostsBackend::ResolveStyleColor( ++ mPresContext->DefaultBackgroundColor(), GetRootFrame()); } void PresShell::UpdateCanvasBackground() { diff --git a/src/layout/base/nsPresContext-h.patch b/src/layout/base/nsPresContext-h.patch new file mode 100644 index 000000000..f408114e4 --- /dev/null +++ b/src/layout/base/nsPresContext-h.patch @@ -0,0 +1,39 @@ +diff --git a/layout/base/nsPresContext.h b/layout/base/nsPresContext.h +index 13aa7141c8e5297d0dd6aa9bd78fd32f050e8123..149a89e928d354f116c54f71605830f5ec6b7f8a 100644 +--- a/layout/base/nsPresContext.h ++++ b/layout/base/nsPresContext.h +@@ -594,6 +594,22 @@ class nsPresContext : public nsISupports, + */ + void SetColorSchemeOverride(mozilla::dom::PrefersColorSchemeOverride); + ++ // Zen boosts override. SVG images render in their own document, which has no ++ // BrowsingContext to carry the page's boost, so the host propagates it here. ++ void SetZenBoostsOverride(nscolor aAccent, float aComplementaryRotation, ++ bool aInverted) { ++ mZenBoostsOverrideAccent = aAccent; ++ mZenBoostsOverrideComplementaryRotation = aComplementaryRotation; ++ mZenBoostsOverrideInverted = aInverted; ++ mHasZenBoostsOverride = true; ++ } ++ bool HasZenBoostsOverride() const { return mHasZenBoostsOverride; } ++ nscolor ZenBoostsOverrideAccent() const { return mZenBoostsOverrideAccent; } ++ float ZenBoostsOverrideComplementaryRotation() const { ++ return mZenBoostsOverrideComplementaryRotation; ++ } ++ bool ZenBoostsOverrideInverted() const { return mZenBoostsOverrideInverted; } ++ + /** + * Return the device's screen size in inches, for font size + * inflation. +@@ -1441,6 +1457,11 @@ class nsPresContext : public nsISupports, + mozilla::dom::PrefersColorSchemeOverride mOverriddenOrEmbedderColorScheme; + mozilla::StyleForcedColors mForcedColors; + ++ nscolor mZenBoostsOverrideAccent = 0; ++ float mZenBoostsOverrideComplementaryRotation = 0.0f; ++ bool mZenBoostsOverrideInverted = false; ++ bool mHasZenBoostsOverride = false; ++ + protected: + virtual ~nsPresContext(); + diff --git a/src/layout/generic/ViewportFrame-cpp.patch b/src/layout/generic/ViewportFrame-cpp.patch deleted file mode 100644 index 5f5e0294d..000000000 --- a/src/layout/generic/ViewportFrame-cpp.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/layout/generic/ViewportFrame.cpp b/layout/generic/ViewportFrame.cpp -index 9d1c25c3834da50fd7dfa3a9583144f5817ee231..08b69a63ea3a8067861984fa2fcd25435c921c0d 100644 ---- a/layout/generic/ViewportFrame.cpp -+++ b/layout/generic/ViewportFrame.cpp -@@ -23,6 +23,7 @@ - #include "nsLayoutUtils.h" - #include "nsPlaceholderFrame.h" - #include "nsSubDocumentFrame.h" -+#include "mozilla/nsZenBoostsBackend.h" - - using namespace mozilla; - -@@ -291,15 +292,20 @@ ViewportFrame::BuildDisplayListForViewTransitionsAndNACTopLayer( - } - } - -+ bool isAnonContent = false; - if (dom::Element* container = doc->GetCustomContentContainer()) { - if (nsIFrame* frame = container->GetPrimaryFrame()) { - MOZ_ASSERT(frame->StyleDisplay()->mTopLayer != StyleTopLayer::None, - "ua.css should ensure this"); - MOZ_ASSERT(frame->HasAnyStateBits(NS_FRAME_OUT_OF_FLOW)); -+ isAnonContent = frame->ContentIsRootOfNativeAnonymousSubtree(); - BuildDisplayListForTopLayerFrame(aBuilder, frame, &topLayerList); - } - } - -+ if (auto zenBackend = zen::nsZenBoostsBackend::GetInstance()) { -+ zenBackend->mCurrentFrameIsAnonymousContent = isAnonContent; -+ } - return MaybeWrapTopLayerList( - aBuilder, uint16_t(TopLayerIndex::ViewTransitionsAndAnonymousContent), - topLayerList); diff --git a/src/layout/generic/nsContainerFrame-cpp.patch b/src/layout/generic/nsContainerFrame-cpp.patch new file mode 100644 index 000000000..e8d69b552 --- /dev/null +++ b/src/layout/generic/nsContainerFrame-cpp.patch @@ -0,0 +1,47 @@ +diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp +index c27fec39f9e32e61f0e335e5880ce3e97074965b..7b4f7760dcf92ead74c9f89cfc7a067892af9e34 100644 +--- a/layout/generic/nsContainerFrame.cpp ++++ b/layout/generic/nsContainerFrame.cpp +@@ -349,7 +349,8 @@ class nsDisplaySelectionOverlay final : public nsPaintedDisplayItem { + nsDisplayListBuilder* aDisplayListBuilder) override; + NS_DISPLAY_DECL_NAME("SelectionOverlay", TYPE_SELECTION_OVERLAY) + +- static DeviceColor ComputeColorFromSelectionStyle(const ComputedStyle&); ++ static DeviceColor ComputeColorFromSelectionStyle(const ComputedStyle&, ++ const nsIFrame*); + static DeviceColor ApplyTransparencyIfNecessary(nscolor); + + private: +@@ -371,9 +372,9 @@ DeviceColor nsDisplaySelectionOverlay::ApplyTransparencyIfNecessary( + } + + DeviceColor nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle( +- const ComputedStyle& aStyle) { +- return ApplyTransparencyIfNecessary( +- aStyle.GetVisitedDependentColor(&nsStyleBackground::mBackgroundColor)); ++ const ComputedStyle& aStyle, const nsIFrame* aFrame) { ++ return ApplyTransparencyIfNecessary(aStyle.GetVisitedDependentColor( ++ &nsStyleBackground::mBackgroundColor, aFrame)); + } + + void nsDisplaySelectionOverlay::Paint(nsDisplayListBuilder* aBuilder, +@@ -472,7 +473,8 @@ void nsContainerFrame::DisplaySelectionOverlay(nsDisplayListBuilder* aBuilder, + ComputeHighlightSelectionStyle(sd->mHighlightData.mHighlightName)) { + aList->AppendNewToTopWithIndex( + aBuilder, this, index++, +- nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style)); ++ nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style, ++ this)); + } + } + +@@ -480,7 +482,8 @@ void nsContainerFrame::DisplaySelectionOverlay(nsDisplayListBuilder* aBuilder, + if (normal) { + DeviceColor color; + if (RefPtr style = ComputeSelectionStyle(selectionValue)) { +- color = nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style); ++ color = nsDisplaySelectionOverlay::ComputeColorFromSelectionStyle(*style, ++ this); + } else { + LookAndFeel::ColorID colorID; + if (selectionValue == nsISelectionController::SELECTION_ON) { diff --git a/src/layout/generic/nsIFrame-h.patch b/src/layout/generic/nsIFrame-h.patch new file mode 100644 index 000000000..be0b97926 --- /dev/null +++ b/src/layout/generic/nsIFrame-h.patch @@ -0,0 +1,13 @@ +diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h +index 588b00d7ee115f0a7513e357af7ab5eee28311c1..bf07b69c7e7957e6e558403e069f16e2dec3cad0 100644 +--- a/layout/generic/nsIFrame.h ++++ b/layout/generic/nsIFrame.h +@@ -1008,7 +1008,7 @@ class nsIFrame : public nsQueryFrame { + /** Also forward GetVisitedDependentColor to the style */ + template + nscolor GetVisitedDependentColor(T S::* aField) { +- return mComputedStyle->GetVisitedDependentColor(aField); ++ return mComputedStyle->GetVisitedDependentColor(aField, this); + } + + /** diff --git a/src/layout/generic/nsImageFrame-cpp.patch b/src/layout/generic/nsImageFrame-cpp.patch new file mode 100644 index 000000000..d64f3fd46 --- /dev/null +++ b/src/layout/generic/nsImageFrame-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp +index c4ff60477e3061aeeecbdedb5ad8054d3808ab6e..40857d430eda576c4fca613857860f32abb39e2d 100644 +--- a/layout/generic/nsImageFrame.cpp ++++ b/layout/generic/nsImageFrame.cpp +@@ -1764,7 +1764,7 @@ void nsImageFrame::DisplayAltText(nsPresContext* aPresContext, + const nsRect& aRect) { + // Set font and color + aRenderingContext.SetColor( +- sRGBColor::FromABGR(StyleText()->mColor.ToColor())); ++ sRGBColor::FromABGR(StyleText()->mColor.ToColor(this))); + RefPtr fm = + nsLayoutUtils::GetInflatedFontMetricsForFrame(this); + diff --git a/src/layout/generic/nsTextFrame-cpp.patch b/src/layout/generic/nsTextFrame-cpp.patch new file mode 100644 index 000000000..0c8afe005 --- /dev/null +++ b/src/layout/generic/nsTextFrame-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp +index e7f7943a19d3ac71872d0a8439b6ed90e8fd423d..eb3e84fabc67d95b6d194b5aaf3aaef7c38480c0 100644 +--- a/layout/generic/nsTextFrame.cpp ++++ b/layout/generic/nsTextFrame.cpp +@@ -6381,7 +6381,7 @@ void nsTextFrame::DrawSelectionDecorations( + computedStyleFromPseudo->StyleTextReset()->mTextDecorationStyle; + params.color = + computedStyleFromPseudo->StyleTextReset() +- ->mTextDecorationColor.CalcColor(*computedStyleFromPseudo); ++ ->mTextDecorationColor.CalcColor(*computedStyleFromPseudo, this); + params.decoration = + computedStyleFromPseudo->StyleTextReset()->mTextDecorationLine; + params.descentLimit = -1.f; diff --git a/src/layout/generic/nsTextPaintStyle-cpp.patch b/src/layout/generic/nsTextPaintStyle-cpp.patch new file mode 100644 index 000000000..9ff579abb --- /dev/null +++ b/src/layout/generic/nsTextPaintStyle-cpp.patch @@ -0,0 +1,67 @@ +diff --git a/layout/generic/nsTextPaintStyle.cpp b/layout/generic/nsTextPaintStyle.cpp +index 5d1bf44687e925aff67f44c8e0629f7f06e84e98..1fa60a4d91edc60ba733cefc5f73ab8b7684d02a 100644 +--- a/layout/generic/nsTextPaintStyle.cpp ++++ b/layout/generic/nsTextPaintStyle.cpp +@@ -240,7 +240,7 @@ bool nsTextPaintStyle::GetTargetTextColor(nscolor* aForeColor) { + (mTargetTextPseudoStyle->HasAuthorSpecifiedTextColor() || + mTargetTextPseudoStyle->HasAuthorSpecifiedBorderOrBackground())) { + *aForeColor = mTargetTextPseudoStyle->GetVisitedDependentColor( +- &nsStyleText::mWebkitTextFillColor); ++ &nsStyleText::mWebkitTextFillColor, mFrame); + return mTargetTextPseudoStyle->HasAuthorSpecifiedTextColor(); + } + *aForeColor = LookAndFeel::Color( +@@ -257,7 +257,7 @@ bool nsTextPaintStyle::GetTargetTextBackgroundColor(nscolor* aBackColor) { + (mTargetTextPseudoStyle->HasAuthorSpecifiedTextColor() || + mTargetTextPseudoStyle->HasAuthorSpecifiedBorderOrBackground())) { + *aBackColor = mTargetTextPseudoStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); + return NS_GET_A(*aBackColor) != 0; + } + *aBackColor = LookAndFeel::Color( +@@ -295,7 +295,8 @@ bool nsTextPaintStyle::GetCustomHighlightTextColor(nsAtom* aHighlightName, + return false; + } + +- *aForeColor = highlightStyle->GetVisitedDependentColor(&nsStyleText::mColor); ++ *aForeColor = ++ highlightStyle->GetVisitedDependentColor(&nsStyleText::mColor, mFrame); + + return highlightStyle->HasAuthorSpecifiedTextColor(); + } +@@ -317,7 +318,7 @@ bool nsTextPaintStyle::GetCustomHighlightBackgroundColor(nsAtom* aHighlightName, + } + + *aBackColor = highlightStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); + return NS_GET_A(*aBackColor) != 0; + } + +@@ -466,19 +467,19 @@ bool nsTextPaintStyle::InitSelectionColorsAndShadow() { + // this is web content or chrome content. See bug 2029839. + if (!mFrame->PresContext()->Document()->ChromeRulesEnabled()) { + mSelectionBGColor = mSelectionPseudoStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); +- mSelectionTextColor = +- mSelectionPseudoStyle->GetVisitedDependentColor(&nsStyleText::mColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); ++ mSelectionTextColor = mSelectionPseudoStyle->GetVisitedDependentColor( ++ &nsStyleText::mColor, mFrame); + return true; + } + + if (nscolor bgColor = mSelectionPseudoStyle->GetVisitedDependentColor( +- &nsStyleBackground::mBackgroundColor); ++ &nsStyleBackground::mBackgroundColor, mFrame); + mSelectionPseudoStyle->HasAuthorSpecifiedTextColor() || + NS_GET_A(bgColor) > 0) { + mSelectionBGColor = bgColor; +- mSelectionTextColor = +- mSelectionPseudoStyle->GetVisitedDependentColor(&nsStyleText::mColor); ++ mSelectionTextColor = mSelectionPseudoStyle->GetVisitedDependentColor( ++ &nsStyleText::mColor, mFrame); + return true; + } + } diff --git a/src/layout/mathml/nsMathMLChar-cpp.patch b/src/layout/mathml/nsMathMLChar-cpp.patch new file mode 100644 index 000000000..a541b1a68 --- /dev/null +++ b/src/layout/mathml/nsMathMLChar-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/mathml/nsMathMLChar.cpp b/layout/mathml/nsMathMLChar.cpp +index befaf7fed81a486f61e1186775c138ce5473a057..c7eb36dc9fcd06f8641d2d1a974e75eb24e07669 100644 +--- a/layout/mathml/nsMathMLChar.cpp ++++ b/layout/mathml/nsMathMLChar.cpp +@@ -1686,7 +1686,7 @@ void nsMathMLChar::PaintForeground(nsIFrame* aForFrame, + + // Set color ... + nscolor fgColor = computedStyle->GetVisitedDependentColor( +- &nsStyleText::mWebkitTextFillColor); ++ &nsStyleText::mWebkitTextFillColor, aForFrame); + if (aIsSelected) { + // get color to use for selection from the look&feel object + fgColor = LookAndFeel::Color(LookAndFeel::ColorID::Highlighttext, aForFrame, diff --git a/src/layout/painting/nsCSSRendering-cpp.patch b/src/layout/painting/nsCSSRendering-cpp.patch new file mode 100644 index 000000000..3adf1e693 --- /dev/null +++ b/src/layout/painting/nsCSSRendering-cpp.patch @@ -0,0 +1,87 @@ +diff --git a/layout/painting/nsCSSRendering.cpp b/layout/painting/nsCSSRendering.cpp +index a581b039a8681f7d8191edfad100d287af38592e..4cd3d6695a04a42d806c36f8d5a324cac9efda34 100644 +--- a/layout/painting/nsCSSRendering.cpp ++++ b/layout/painting/nsCSSRendering.cpp +@@ -598,7 +598,8 @@ void nsCSSRendering::ComputePixelRadii(const nsRectCornerRadii& aRadii, + } + } + +-static Maybe GetBorderIfVisited(const ComputedStyle& aStyle) { ++static Maybe GetBorderIfVisited(const ComputedStyle& aStyle, ++ const nsIFrame* aFrame) { + Maybe result; + // Don't check RelevantLinkVisited here, since we want to take the + // same amount of time whether or not it's true. +@@ -611,7 +612,7 @@ static Maybe GetBorderIfVisited(const ComputedStyle& aStyle) { + auto& newBorder = result.ref(); + for (const auto side : mozilla::AllPhysicalSides()) { + nscolor color = aStyle.GetVisitedDependentColor( +- nsStyleBorder::BorderColorFieldFor(side)); ++ nsStyleBorder::BorderColorFieldFor(side), aFrame); + newBorder.BorderColorFor(side) = StyleColor::FromColor(color); + } + +@@ -624,7 +625,7 @@ ImgDrawResult nsCSSRendering::PaintBorder( + ComputedStyle* aStyle, PaintBorderFlags aFlags, Sides aSkipSides) { + AUTO_PROFILER_LABEL("nsCSSRendering::PaintBorder", GRAPHICS); + +- Maybe visitedBorder = GetBorderIfVisited(*aStyle); ++ Maybe visitedBorder = GetBorderIfVisited(*aStyle, aForFrame); + return PaintBorderWithStyleBorder( + aPresContext, aRenderingContext, aForFrame, aDirtyRect, aBorderArea, + visitedBorder.refOr(*aStyle->StyleBorder()), aStyle, aFlags, aSkipSides); +@@ -634,7 +635,7 @@ Maybe nsCSSRendering::CreateBorderRenderer( + nsPresContext* aPresContext, DrawTarget* aDrawTarget, nsIFrame* aForFrame, + const nsRect& aDirtyRect, const nsRect& aBorderArea, ComputedStyle* aStyle, + bool* aOutBorderIsEmpty, Sides aSkipSides) { +- Maybe visitedBorder = GetBorderIfVisited(*aStyle); ++ Maybe visitedBorder = GetBorderIfVisited(*aStyle, aForFrame); + return CreateBorderRendererWithStyleBorder( + aPresContext, aDrawTarget, aForFrame, aDirtyRect, aBorderArea, + visitedBorder.refOr(*aStyle->StyleBorder()), aStyle, aOutBorderIsEmpty, +@@ -649,7 +650,7 @@ ImgDrawResult nsCSSRendering::CreateWebRenderCommandsForBorder( + mozilla::layers::RenderRootStateManager* aManager, + nsDisplayListBuilder* aDisplayListBuilder) { + const auto* style = aForFrame->Style(); +- Maybe visitedBorder = GetBorderIfVisited(*style); ++ Maybe visitedBorder = GetBorderIfVisited(*style, aForFrame); + return nsCSSRendering::CreateWebRenderCommandsForBorderWithStyleBorder( + aItem, aForFrame, aBorderArea, aBuilder, aResources, aSc, aManager, + aDisplayListBuilder, visitedBorder.refOr(*style->StyleBorder())); +@@ -785,7 +786,7 @@ static nsCSSBorderRenderer ConstructBorderRenderer( + // pull out styles, colors + for (const auto i : mozilla::AllPhysicalSides()) { + borderStyles[i] = aStyleBorder.GetBorderStyle(i); +- borderColors[i] = aStyleBorder.BorderColorFor(i).CalcColor(*aStyle); ++ borderColors[i] = aStyleBorder.BorderColorFor(i).CalcColor(*aStyle, aForFrame); + } + + PrintAsFormatString( +@@ -1005,7 +1006,7 @@ nsCSSRendering::CreateBorderRendererForNonThemedOutline( + // This handles treating the initial color as 'currentColor'; if we + // ever want 'invert' back we'll need to do a bit of work here too. + nscolor outlineColor = +- aStyle->GetVisitedDependentColor(&nsStyleOutline::mOutlineColor); ++ aStyle->GetVisitedDependentColor(&nsStyleOutline::mOutlineColor, aForFrame); + nscolor outlineColors[4] = {outlineColor, outlineColor, outlineColor, + outlineColor}; + +@@ -2341,7 +2342,7 @@ static Maybe CalcScrollbarColor(nsIFrame* aFrame, + const auto& color = aKind == ScrollbarColorKind::Thumb + ? colors.AsColors().thumb + : colors.AsColors().track; +- return Some(color.CalcColor(*scrollbarStyle)); ++ return Some(color.CalcColor(*scrollbarStyle, aFrame)); + } + + static nscolor GetBackgroundColor(nsIFrame* aFrame, +@@ -2367,7 +2368,8 @@ static nscolor GetBackgroundColor(nsIFrame* aFrame, + default: + break; + } +- return aStyle->GetVisitedDependentColor(&nsStyleBackground::mBackgroundColor); ++ return aStyle->GetVisitedDependentColor(&nsStyleBackground::mBackgroundColor, ++ aFrame); + } + + nscolor nsCSSRendering::DetermineBackgroundColor(nsPresContext* aPresContext, diff --git a/src/layout/painting/nsCSSRenderingBorders-cpp.patch b/src/layout/painting/nsCSSRenderingBorders-cpp.patch new file mode 100644 index 000000000..8837c1382 --- /dev/null +++ b/src/layout/painting/nsCSSRenderingBorders-cpp.patch @@ -0,0 +1,14 @@ +diff --git a/layout/painting/nsCSSRenderingBorders.cpp b/layout/painting/nsCSSRenderingBorders.cpp +index fd2524fd78b1709363afda35e4b0d4320913d9ec..c5b90bc789cdd7f8b0b661ca99b8c7f4d01e6d68 100644 +--- a/layout/painting/nsCSSRenderingBorders.cpp ++++ b/layout/painting/nsCSSRenderingBorders.cpp +@@ -3624,7 +3624,8 @@ ImgDrawResult nsCSSBorderImageRenderer::CreateWebRenderCommands( + case StyleImage::Tag::Gradient: { + const StyleGradient& gradient = *mImageRenderer.GetGradientData(); + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aForFrame->PresContext(), aForFrame->Style(), gradient, mImageSize); ++ aForFrame->PresContext(), aForFrame->Style(), aForFrame, gradient, ++ mImageSize); + + wr::ExtendMode extendMode; + nsTArray stops; diff --git a/src/layout/painting/nsCSSRenderingGradients-cpp.patch b/src/layout/painting/nsCSSRenderingGradients-cpp.patch new file mode 100644 index 000000000..e41ca7dc7 --- /dev/null +++ b/src/layout/painting/nsCSSRenderingGradients-cpp.patch @@ -0,0 +1,78 @@ +diff --git a/layout/painting/nsCSSRenderingGradients.cpp b/layout/painting/nsCSSRenderingGradients.cpp +index 80a9d36ca865bbcd090d7aa556270a698447b016..2b1e0a70ed7e6f975c51a0912598c7903552ab20 100644 +--- a/layout/painting/nsCSSRenderingGradients.cpp ++++ b/layout/painting/nsCSSRenderingGradients.cpp +@@ -667,7 +667,8 @@ static nsTArray ComputeColorStops(ComputedStyle* aComputedStyle, + + nsCSSGradientRenderer nsCSSGradientRenderer::Create( + nsPresContext* aPresContext, ComputedStyle* aComputedStyle, +- const StyleGradient& aGradient, const nsSize& aIntrinsicSize) { ++ const nsIFrame* aFrame, const StyleGradient& aGradient, ++ const nsSize& aIntrinsicSize) { + auto srcSize = CSSSize::FromAppUnits(aIntrinsicSize); + + // Compute "gradient line" start and end relative to the intrinsic size of +@@ -704,6 +705,7 @@ nsCSSGradientRenderer nsCSSGradientRenderer::Create( + + nsCSSGradientRenderer renderer; + renderer.mPresContext = aPresContext; ++ renderer.mFrame = aFrame; + renderer.mGradient = &aGradient; + renderer.mStops = std::move(stops); + renderer.mLineStart = { +@@ -992,9 +994,10 @@ void nsCSSGradientRenderer::Paint(gfxContext& aContext, const nsRect& aDest, + GradientStopInterpolator( + const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- bool aExtend, nsTArray& aResult) ++ bool aExtend, nsTArray& aResult, ++ const nsIFrame* aFrame) + : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, +- aExtend), ++ aExtend, aFrame), + mStops(aResult) {} + void CreateStop(float aPosition, gfx::DeviceColor aColor) { + mStops.AppendElement(gfx::GradientStop{aPosition, aColor}); +@@ -1007,12 +1010,12 @@ void nsCSSGradientRenderer::Paint(gfxContext& aContext, const nsRect& aDest, + bool extend = !isRepeat && styleColorInterpolationMethod.hue == + StyleHueInterpolationMethod::Longer; + GradientStopInterpolator interpolator(mStops, styleColorInterpolationMethod, +- extend, rawStops); ++ extend, rawStops, mFrame); + interpolator.CreateStops(); + } else { + rawStops.SetLength(mStops.Length()); + for (uint32_t i = 0; i < mStops.Length(); i++) { +- rawStops[i].color = ToDeviceColor(mStops[i].mColor); ++ rawStops[i].color = ToDeviceColor(mStops[i].mColor, mFrame); + rawStops[i].color.a *= aOpacity; + rawStops[i].offset = stopScale * (mStops[i].mPosition - stopOrigin); + } +@@ -1203,8 +1206,10 @@ class MOZ_STACK_CLASS WrColorStopInterpolator + WrColorStopInterpolator( + const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- float aOpacity, nsTArray& aResult, bool aExtend) +- : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend), ++ float aOpacity, nsTArray& aResult, bool aExtend, ++ const nsIFrame* aFrame) ++ : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend, ++ aFrame), + mResult(aResult), + mOpacity(aOpacity), + mOutputStop(0) {} +@@ -1284,12 +1289,12 @@ void nsCSSGradientRenderer::BuildWebRenderParameters( + styleColorInterpolationMethod.hue == + StyleHueInterpolationMethod::Longer; + WrColorStopInterpolator interpolator(mStops, styleColorInterpolationMethod, +- aOpacity, aStops, extend); ++ aOpacity, aStops, extend, mFrame); + interpolator.CreateStops(); + } else { + aStops.SetLength(mStops.Length()); + for (uint32_t i = 0; i < mStops.Length(); i++) { +- aStops[i].color = wr::ToColorF(ToDeviceColor(mStops[i].mColor)); ++ aStops[i].color = wr::ToColorF(ToDeviceColor(mStops[i].mColor, mFrame)); + aStops[i].color.a *= aOpacity; + aStops[i].offset = (float)mStops[i].mPosition; + } diff --git a/src/layout/painting/nsCSSRenderingGradients-h.patch b/src/layout/painting/nsCSSRenderingGradients-h.patch new file mode 100644 index 000000000..661e7785f --- /dev/null +++ b/src/layout/painting/nsCSSRenderingGradients-h.patch @@ -0,0 +1,59 @@ +diff --git a/layout/painting/nsCSSRenderingGradients.h b/layout/painting/nsCSSRenderingGradients.h +index 30f665f7cacabb15fb6a1656385c5936d42be48b..8c4c4147ee8ec6812e9418f95b7b7c0358dcb735 100644 +--- a/layout/painting/nsCSSRenderingGradients.h ++++ b/layout/painting/nsCSSRenderingGradients.h +@@ -42,10 +42,11 @@ class MOZ_STACK_CLASS ColorStopInterpolator { + ColorStopInterpolator( + const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- bool aExtend) ++ bool aExtend, const nsIFrame* aFrame) + : mStyleColorInterpolationMethod(aStyleColorInterpolationMethod), + mStops(aStops), +- mExtend(aExtend) {} ++ mExtend(aExtend), ++ mFrame(aFrame) {} + + void CreateStops() { + // This loop intentionally iterates extra stops at the beginning and end +@@ -96,7 +97,7 @@ class MOZ_STACK_CLASS ColorStopInterpolator { + Servo_InterpolateColor(mStyleColorInterpolationMethod, + &start.mColor, &end.mColor, progress); + static_cast(this)->CreateStop(float(position), +- gfx::ToDeviceColor(color)); ++ gfx::ToDeviceColor(color, mFrame)); + } + } + } +@@ -108,6 +109,7 @@ class MOZ_STACK_CLASS ColorStopInterpolator { + // which only matters if this is a CSS non-repeating gradient with + // StyleHueInterpolationMethod::Longer (only valid for hsl/hwb/lch/oklch). + bool mExtend; ++ const nsIFrame* mFrame; + + // This could be made tunable, but at 1.0/128 the error is largely + // irrelevant, as WebRender re-encodes it to 128 pairs of stops. +@@ -126,6 +128,7 @@ class nsCSSGradientRenderer final { + */ + static nsCSSGradientRenderer Create(nsPresContext* aPresContext, + ComputedStyle* aComputedStyle, ++ const nsIFrame* aFrame, + const StyleGradient& aGradient, + const nsSize& aIntrinsiceSize); + +@@ -173,6 +176,7 @@ class nsCSSGradientRenderer final { + private: + nsCSSGradientRenderer() + : mPresContext(nullptr), ++ mFrame(nullptr), + mGradient(nullptr), + mRadiusX(0.0), + mRadiusY(0.0), +@@ -192,6 +196,7 @@ class nsCSSGradientRenderer final { + const nsSize& aRepeatSize, bool aForceRepeatToCoverTiles); + + nsPresContext* mPresContext; ++ const nsIFrame* mFrame; + const StyleGradient* mGradient; + nsTArray mStops; + gfxPoint mLineStart, mLineEnd; // only for linear/radial gradients diff --git a/src/layout/painting/nsDisplayList-cpp.patch b/src/layout/painting/nsDisplayList-cpp.patch deleted file mode 100644 index 716ccb545..000000000 --- a/src/layout/painting/nsDisplayList-cpp.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/layout/painting/nsDisplayList.cpp b/layout/painting/nsDisplayList.cpp -index 4488dc2025da64fbad0e0ec998793a476de640ef..82990853e7279723666635ab8d9a929ede3f3aca 100644 ---- a/layout/painting/nsDisplayList.cpp -+++ b/layout/painting/nsDisplayList.cpp -@@ -81,6 +81,7 @@ - #include "mozilla/layers/WebRenderLayerManager.h" - #include "mozilla/layers/WebRenderMessages.h" - #include "mozilla/layers/WebRenderScrollData.h" -+#include "mozilla/nsZenBoostsBackend.h" - #include "nsCSSProps.h" - #include "nsCSSRendering.h" - #include "nsCSSRenderingGradients.h" -@@ -1252,6 +1253,10 @@ void nsDisplayListBuilder::EnterPresShell(const nsIFrame* aReferenceFrame, - docShell->GetWindowDraggingAllowed(&mWindowDraggingAllowed); - } - -+ if (auto zenBackend = zen::nsZenBoostsBackend::GetInstance(); zenBackend && !mIsInChromePresContext) { -+ zenBackend->onPresShellEntered(pc->Document()); -+ } -+ - state->mTouchEventPrefEnabledDoc = dom::TouchEvent::PrefEnabled(docShell); - - if (auto* vt = pc->Document()->GetActiveViewTransition()) { diff --git a/src/layout/painting/nsImageRenderer-cpp.patch b/src/layout/painting/nsImageRenderer-cpp.patch new file mode 100644 index 000000000..6323f3471 --- /dev/null +++ b/src/layout/painting/nsImageRenderer-cpp.patch @@ -0,0 +1,49 @@ +diff --git a/layout/painting/nsImageRenderer.cpp b/layout/painting/nsImageRenderer.cpp +index 4acb7670e971024f9c63e48ff711bbdd1dc02301..518543f29f396d819a71edb984879de22f8434a8 100644 +--- a/layout/painting/nsImageRenderer.cpp ++++ b/layout/painting/nsImageRenderer.cpp +@@ -90,7 +90,7 @@ static already_AddRefed GetSymbolicIconImage(nsAtom* aName, + if (NS_WARN_IF(!XRE_IsParentProcess())) { + return nullptr; + } +- const auto fg = aFrame->StyleText()->mColor.ToColor(); ++ const auto fg = aFrame->StyleText()->mColor.ToColor(aFrame); + auto key = std::make_tuple(aName, aScale, fg); + auto* cache = aFrame->GetProperty(SymbolicImageCacheProp()); + if (!cache) { +@@ -567,7 +567,7 @@ ImgDrawResult nsImageRenderer::Draw(nsPresContext* aPresContext, + } + case StyleImage::Tag::Gradient: { + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aPresContext, mForFrame->Style(), *mGradientData, mSize); ++ aPresContext, mForFrame->Style(), mForFrame, *mGradientData, mSize); + + renderer.Paint(*ctx, aDest, aFill, aRepeatSize, aSrc, aDirtyRect, + aOpacity); +@@ -644,7 +644,7 @@ ImgDrawResult nsImageRenderer::BuildWebRenderDisplayItems( + switch (mType) { + case StyleImage::Tag::Gradient: { + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aPresContext, mForFrame->Style(), *mGradientData, mSize); ++ aPresContext, mForFrame->Style(), mForFrame, *mGradientData, mSize); + + renderer.BuildWebRenderDisplayItems(aBuilder, aSc, aDest, aFill, + aRepeatSize, aSrc, +@@ -670,6 +670,8 @@ ImgDrawResult nsImageRenderer::BuildWebRenderDisplayItems( + nsPresContext::AppUnitsToIntCSSPixels(aDest.height)}; + + SVGImageContext svgContext(Some(destCSSSize)); ++ SVGImageContext::MaybeStoreZenBoosts(svgContext, ++ *mForFrame->PresContext()); + Maybe region; + + const int32_t appUnitsPerDevPixel = +@@ -1076,7 +1078,7 @@ ImgDrawResult nsImageRenderer::DrawShapeImage(nsPresContext* aPresContext, + + if (mImage->IsGradient()) { + nsCSSGradientRenderer renderer = nsCSSGradientRenderer::Create( +- aPresContext, mForFrame->Style(), *mGradientData, mSize); ++ aPresContext, mForFrame->Style(), mForFrame, *mGradientData, mSize); + nsRect dest(nsPoint(0, 0), mSize); + renderer.Paint(aRenderingContext, dest, dest, mSize, + CSSIntRect::FromAppUnitsRounded(dest), dest, 1.0); diff --git a/src/layout/style/ComputedStyle-cpp.patch b/src/layout/style/ComputedStyle-cpp.patch new file mode 100644 index 000000000..6c403dde6 --- /dev/null +++ b/src/layout/style/ComputedStyle-cpp.patch @@ -0,0 +1,65 @@ +diff --git a/layout/style/ComputedStyle.cpp b/layout/style/ComputedStyle.cpp +index 18308d7891aab4ff0542e774190abeed6aad7c59..453da8ffa14ee5f31fbce873721779cbadce240d 100644 +--- a/layout/style/ComputedStyle.cpp ++++ b/layout/style/ComputedStyle.cpp +@@ -285,29 +285,32 @@ static nscolor GetVisitedDependentColorInternal(const ComputedStyle& aStyle, + } + + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleAbsoluteColor& aColor) { +- return aColor.ToColor(); ++ const StyleAbsoluteColor& aColor, ++ const nsIFrame* aFrame) { ++ return aColor.ToColor(aFrame); + } + + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleColor& aColor) { +- return aColor.CalcColor(aStyle); ++ const StyleColor& aColor, const nsIFrame* aFrame) { ++ return aColor.CalcColor(aStyle, aFrame); + } + + // Currently caret-color, the only property in the list which is a ColorOrAuto, + // always maps auto to currentcolor. + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleColorOrAuto& aColor) { ++ const StyleColorOrAuto& aColor, ++ const nsIFrame* aFrame) { + if (aColor.IsAuto()) { +- return ExtractColor(aStyle, StyleColor::CurrentColor()); ++ return ExtractColor(aStyle, StyleColor::CurrentColor(), aFrame); + } +- return ExtractColor(aStyle, aColor.AsColor()); ++ return ExtractColor(aStyle, aColor.AsColor(), aFrame); + } + + static nscolor ExtractColor(const ComputedStyle& aStyle, +- const StyleSVGPaint& aPaintServer) { ++ const StyleSVGPaint& aPaintServer, ++ const nsIFrame* aFrame) { + return aPaintServer.kind.IsColor() +- ? ExtractColor(aStyle, aPaintServer.kind.AsColor()) ++ ? ExtractColor(aStyle, aPaintServer.kind.AsColor(), aFrame) + : NS_RGBA(0, 0, 0, 0); + } + +@@ -315,14 +318,14 @@ static nscolor ExtractColor(const ComputedStyle& aStyle, + #define GENERATE_VISITED_COLOR_TEMPLATE(name_, fields_) \ + template <> \ + nscolor ComputedStyle::GetVisitedDependentColor( \ +- decltype(nsStyle##name_::MOZ_ARG_1 fields_) nsStyle##name_::* aField) \ +- const { \ ++ decltype(nsStyle##name_::MOZ_ARG_1 fields_) nsStyle##name_::* aField, \ ++ const nsIFrame* aFrame) const { \ + MOZ_ASSERT(MOZ_FOR_EACH(STYLE_FIELD, (nsStyle##name_, ), fields_) false, \ + "Getting visited-dependent color for a field in nsStyle" #name_ \ + " which is not listed in nsCSSVisitedDependentPropList.h"); \ + return GetVisitedDependentColorInternal( \ +- *this, [aField](const ComputedStyle& aStyle) { \ +- return ExtractColor(aStyle, aStyle.Style##name_()->*aField); \ ++ *this, [aField, aFrame](const ComputedStyle& aStyle) { \ ++ return ExtractColor(aStyle, aStyle.Style##name_()->*aField, aFrame); \ + }); \ + } + FOR_EACH_VISITED_DEPENDENT_STYLE_STRUCT(GENERATE_VISITED_COLOR_TEMPLATE) diff --git a/src/layout/style/ComputedStyle-h.patch b/src/layout/style/ComputedStyle-h.patch new file mode 100644 index 000000000..16345644c --- /dev/null +++ b/src/layout/style/ComputedStyle-h.patch @@ -0,0 +1,22 @@ +diff --git a/layout/style/ComputedStyle.h b/layout/style/ComputedStyle.h +index 661ec439dea1bc59dbc4507c9788df8821ea9086..7aa21f5388d6e3b5f1a85e38acdd646254ca8b01 100644 +--- a/layout/style/ComputedStyle.h ++++ b/layout/style/ComputedStyle.h +@@ -18,6 +18,7 @@ + + enum nsChangeHint : uint32_t; + class nsWindowSizes; ++class nsIFrame; + + #define FORWARD_STRUCT(name_) struct nsStyle##name_; + FOR_EACH_STYLE_STRUCT(FORWARD_STRUCT, FORWARD_STRUCT) +@@ -338,7 +339,8 @@ class ComputedStyle { + * been listed in nsCSSVisitedDependentPropList.h. + */ + template +- nscolor GetVisitedDependentColor(T S::* aField) const; ++ nscolor GetVisitedDependentColor(T S::* aField, ++ const nsIFrame* aFrame) const; + + /** + * aColors should be a two element array of nscolor in which the first diff --git a/src/layout/style/GeckoBindings-cpp.patch b/src/layout/style/GeckoBindings-cpp.patch new file mode 100644 index 000000000..0c9df23d6 --- /dev/null +++ b/src/layout/style/GeckoBindings-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/style/GeckoBindings.cpp b/layout/style/GeckoBindings.cpp +index 56a16d313a5d30d12edf1f94459db1027af87002..3722f2d6ce6c0864956fed2b00c71a3286edc674 100644 +--- a/layout/style/GeckoBindings.cpp ++++ b/layout/style/GeckoBindings.cpp +@@ -1068,7 +1068,7 @@ void Gecko_SetFontPaletteOverride( + return; + } + aValues->mOverrides.AppendElement(gfx::FontPaletteValueSet::OverrideColor{ +- uint32_t(aIndex), gfx::sRGBColor::FromABGR(aColor->ToColor())}); ++ uint32_t(aIndex), gfx::sRGBColor::FromABGR(aColor->ToColor(nullptr))}); + } + + void Gecko_EnsureImageLayersLength(nsStyleImageLayers* aLayers, size_t aLen, diff --git a/src/layout/style/StyleColor-cpp.patch b/src/layout/style/StyleColor-cpp.patch index 6f84f6327..f5aa44115 100644 --- a/src/layout/style/StyleColor-cpp.patch +++ b/src/layout/style/StyleColor-cpp.patch @@ -1,5 +1,5 @@ diff --git a/layout/style/StyleColor.cpp b/layout/style/StyleColor.cpp -index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..8dbfbb846b786d51af288989163aacfae12e787c 100644 +index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..85a48f27251756c72db8ed03a673a18e96cf76f9 100644 --- a/layout/style/StyleColor.cpp +++ b/layout/style/StyleColor.cpp @@ -8,6 +8,7 @@ @@ -10,25 +10,46 @@ index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..8dbfbb846b786d51af288989163aacfa namespace mozilla { -@@ -21,6 +22,8 @@ bool StyleColor::MaybeTransparent() const { - template <> - StyleAbsoluteColor StyleColor::ResolveColor( - const StyleAbsoluteColor& aForegroundColor) const { -+ auto ResolveColorInner = [this, -+ &aForegroundColor]() -> StyleAbsoluteColor { - if (IsAbsolute()) { - return AsAbsolute(); - } -@@ -30,6 +33,8 @@ StyleAbsoluteColor StyleColor::ResolveColor( - } +@@ -34,23 +35,24 @@ StyleAbsoluteColor StyleColor::ResolveColor( - return Servo_ResolveColor(this, &aForegroundColor); -+ }; -+ return zen::nsZenBoostsBackend::ResolveStyleColor(ResolveColorInner()); + template <> + nscolor StyleColor::CalcColor(nscolor aColor) const { +- return ResolveColor(StyleAbsoluteColor::FromColor(aColor)).ToColor(); ++ return ResolveColor(StyleAbsoluteColor::FromColor(aColor)).ToColor(nullptr); } template <> -@@ -68,10 +73,11 @@ nscolor StyleAbsoluteColor::ToColor() const { + nscolor StyleColor::CalcColor( + const StyleAbsoluteColor& aForegroundColor) const { +- return ResolveColor(aForegroundColor).ToColor(); ++ return ResolveColor(aForegroundColor).ToColor(nullptr); + } + + template <> +-nscolor StyleColor::CalcColor(const ComputedStyle& aStyle) const { +- return ResolveColor(aStyle.StyleText()->mColor).ToColor(); ++nscolor StyleColor::CalcColor(const ComputedStyle& aStyle, ++ const nsIFrame* aFrame) const { ++ return ResolveColor(aStyle.StyleText()->mColor).ToColor(aFrame); + } + + template <> + nscolor StyleColor::CalcColor(const nsIFrame* aFrame) const { +- return ResolveColor(aFrame->StyleText()->mColor).ToColor(); ++ return ResolveColor(aFrame->StyleText()->mColor).ToColor(aFrame); + } + + StyleAbsoluteColor StyleAbsoluteColor::ToColorSpace( +@@ -58,7 +60,7 @@ StyleAbsoluteColor StyleAbsoluteColor::ToColorSpace( + return Servo_ConvertColorSpace(this, aColorSpace); + } + +-nscolor StyleAbsoluteColor::ToColor() const { ++nscolor StyleAbsoluteColor::ToColor(const nsIFrame* aFrame) const { + auto srgb = ToColorSpace(StyleColorSpace::Srgb); + + // TODO(tlouw): Needs gamut mapping here. Right now we just hard clip the +@@ -68,10 +70,12 @@ nscolor StyleAbsoluteColor::ToColor() const { auto green = std::clamp(srgb.components._1, 0.0f, 1.0f); auto blue = std::clamp(srgb.components._2, 0.0f, 1.0f); @@ -38,7 +59,8 @@ index 95c7ae6abea5032bef0466e8d59d212374d7a4d0..8dbfbb846b786d51af288989163aacfa nsStyleUtil::FloatToColorComponent(green), nsStyleUtil::FloatToColorComponent(blue), - nsStyleUtil::FloatToColorComponent(srgb.alpha)); -+ nsStyleUtil::FloatToColorComponent(srgb.alpha))); ++ nsStyleUtil::FloatToColorComponent(srgb.alpha)), ++ aFrame); } } // namespace mozilla diff --git a/src/layout/style/StyleColorInlines-h.patch b/src/layout/style/StyleColorInlines-h.patch new file mode 100644 index 000000000..839901a46 --- /dev/null +++ b/src/layout/style/StyleColorInlines-h.patch @@ -0,0 +1,13 @@ +diff --git a/layout/style/StyleColorInlines.h b/layout/style/StyleColorInlines.h +index 332f715ca2a11c98afcb80a870da98c038a7e4f0..a5bddde67165fcb40d40b3aec76a9d19d8880d64 100644 +--- a/layout/style/StyleColorInlines.h ++++ b/layout/style/StyleColorInlines.h +@@ -66,7 +66,7 @@ template <> + nscolor StyleColor::CalcColor(nscolor) const; + + template <> +-nscolor StyleColor::CalcColor(const ComputedStyle&) const; ++nscolor StyleColor::CalcColor(const ComputedStyle&, const nsIFrame*) const; + + template <> + nscolor StyleColor::CalcColor(const nsIFrame*) const; diff --git a/src/layout/style/nsStyleStruct-cpp.patch b/src/layout/style/nsStyleStruct-cpp.patch new file mode 100644 index 000000000..b4617b093 --- /dev/null +++ b/src/layout/style/nsStyleStruct-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp +index 80ca0cc08bc675359fbb09100eca43c8e3b9d413..d3ea525f6d84568c4e997a142bbfef6435d21034 100644 +--- a/layout/style/nsStyleStruct.cpp ++++ b/layout/style/nsStyleStruct.cpp +@@ -2208,7 +2208,7 @@ nscolor nsStyleBackground::BackgroundColor(const nsIFrame* aFrame) const { + } + + nscolor nsStyleBackground::BackgroundColor(const ComputedStyle* aStyle) const { +- return mBackgroundColor.CalcColor(*aStyle); ++ return mBackgroundColor.CalcColor(*aStyle, nullptr); + } + + bool nsStyleBackground::IsTransparent(const nsIFrame* aFrame) const { diff --git a/src/layout/svg/FilterInstance-cpp.patch b/src/layout/svg/FilterInstance-cpp.patch new file mode 100644 index 000000000..3ff53172b --- /dev/null +++ b/src/layout/svg/FilterInstance-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/svg/FilterInstance.cpp b/layout/svg/FilterInstance.cpp +index 499f824aaeed6ac014974ff11848cf40ac0bba09..bec724baf0ae97cd9dea59a1609d8ea9baaad715 100644 +--- a/layout/svg/FilterInstance.cpp ++++ b/layout/svg/FilterInstance.cpp +@@ -1681,7 +1681,7 @@ nsresult FilterInstance::BuildPrimitivesForFilter( + // If we don't have a frame, use opaque black for shadows with unspecified + // shadow colors. + nscolor shadowFallbackColor = +- mTargetFrame ? mTargetFrame->StyleText()->mColor.ToColor() ++ mTargetFrame ? mTargetFrame->StyleText()->mColor.ToColor(mTargetFrame) + : NS_RGB(0, 0, 0); + + CSSFilterInstance cssFilterInstance(aFilter, shadowFallbackColor, diff --git a/src/layout/svg/SVGContextPaint-cpp.patch b/src/layout/svg/SVGContextPaint-cpp.patch new file mode 100644 index 000000000..38110341c --- /dev/null +++ b/src/layout/svg/SVGContextPaint-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/svg/SVGContextPaint.cpp b/layout/svg/SVGContextPaint.cpp +index 3df8728978c1b48ca326c852feb0553091a99673..9f9096205c3dd3551c41c547a1aee667c0a51238 100644 +--- a/layout/svg/SVGContextPaint.cpp ++++ b/layout/svg/SVGContextPaint.cpp +@@ -143,7 +143,7 @@ static void SetupInheritablePaint(const DrawTarget* aDrawTarget, + } + + nscolor color = SVGUtils::GetFallbackOrPaintColor( +- *aFrame->Style(), aFillOrStroke, aDefaultFallbackColor); ++ *aFrame->Style(), aFillOrStroke, aDefaultFallbackColor, aFrame); + aTargetPaint.SetColor(color); + } + diff --git a/src/layout/svg/SVGGradientFrame-cpp.patch b/src/layout/svg/SVGGradientFrame-cpp.patch new file mode 100644 index 000000000..f79ff277b --- /dev/null +++ b/src/layout/svg/SVGGradientFrame-cpp.patch @@ -0,0 +1,42 @@ +diff --git a/layout/svg/SVGGradientFrame.cpp b/layout/svg/SVGGradientFrame.cpp +index 9c66d90fc0292abcab30c912968d3f84c0e181ff..aec0b2e48965729ccff19d632ac5e8fd04fd09eb 100644 +--- a/layout/svg/SVGGradientFrame.cpp ++++ b/layout/svg/SVGGradientFrame.cpp +@@ -229,8 +229,9 @@ class MOZ_STACK_CLASS SVGColorStopInterpolator + SVGColorStopInterpolator( + gfxPattern* aGradient, const nsTArray& aStops, + const StyleColorInterpolationMethod& aStyleColorInterpolationMethod, +- bool aExtend) +- : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend), ++ bool aExtend, const nsIFrame* aFrame) ++ : ColorStopInterpolator(aStops, aStyleColorInterpolationMethod, aExtend, ++ aFrame), + mGradient(aGradient) {} + + void CreateStop(float aPosition, DeviceColor aColor) { +@@ -270,7 +271,8 @@ already_AddRefed SVGGradientFrame::GetPaintServerPattern( + if (nStops == 1 || GradientVectorLengthIsZero()) { + // The gradient paints a single colour, using the stop-color of the last + // gradient step if there are more than one. +- return do_AddRef(new gfxPattern(ToDeviceColor(stops.LastElement().mColor))); ++ return do_AddRef( ++ new gfxPattern(ToDeviceColor(stops.LastElement().mColor, aSource))); + } + + // Get the transform list (if there is one). We do this after the returns +@@ -313,12 +315,13 @@ already_AddRefed SVGGradientFrame::GetPaintServerPattern( + static constexpr auto interpolationMethod = StyleColorInterpolationMethod{ + StyleColorSpace::SrgbLinear, StyleHueInterpolationMethod::Shorter}; + SVGColorStopInterpolator interpolator(gradient, stops, interpolationMethod, +- false); ++ false, aSource); + interpolator.CreateStops(); + } else { + // setup standard sRGB stops + for (const auto& stop : stops) { +- gradient->AddColorStop(stop.mPosition, ToDeviceColor(stop.mColor)); ++ gradient->AddColorStop(stop.mPosition, ++ ToDeviceColor(stop.mColor, aSource)); + } + } + diff --git a/src/layout/svg/SVGImageContext-cpp.patch b/src/layout/svg/SVGImageContext-cpp.patch new file mode 100644 index 000000000..4e8258689 --- /dev/null +++ b/src/layout/svg/SVGImageContext-cpp.patch @@ -0,0 +1,58 @@ +diff --git a/layout/svg/SVGImageContext.cpp b/layout/svg/SVGImageContext.cpp +index ecbda963b75fb70b62885a0c8f7a517011a8d5dc..5f55f0a4174db830656d434b5295835ab18e6619 100644 +--- a/layout/svg/SVGImageContext.cpp ++++ b/layout/svg/SVGImageContext.cpp +@@ -10,6 +10,7 @@ + #include "mozilla/LookAndFeel.h" + #include "mozilla/ServoCSSParser.h" + #include "mozilla/StaticPrefs_svg.h" ++#include "mozilla/dom/BrowsingContext.h" + #include "mozilla/dom/Document.h" + #include "nsIFrame.h" + #include "nsISVGPaintContext.h" +@@ -18,6 +19,19 @@ + + namespace mozilla { + ++/* static */ ++void SVGImageContext::MaybeStoreZenBoosts(SVGImageContext& aContext, ++ const nsPresContext& aPresContext) { ++ if (dom::Document* doc = aPresContext.Document()) { ++ if (dom::BrowsingContext* bc = doc->GetBrowsingContext()) { ++ bc = bc->Top(); ++ aContext.SetZenBoosts(bc->ZenBoostsData(), ++ bc->ZenBoostsComplementaryRotation(), ++ bc->IsZenBoostsInverted()); ++ } ++ } ++} ++ + /* static */ + void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, + nsIFrame* aFromFrame, +@@ -43,6 +57,8 @@ void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, + aContext.SetColorScheme(Some(scheme)); + } + ++ MaybeStoreZenBoosts(aContext, aPresContext); ++ + const nsStyleSVG* style = aStyle.StyleSVG(); + if (!style->ExposesContextProperties()) { + // Content must have '-moz-context-properties' set to the names of the +@@ -57,12 +73,14 @@ void SVGImageContext::MaybeStoreContextPaint(SVGImageContext& aContext, + if ((style->mMozContextProperties.bits & StyleContextPropertyBits::FILL) && + style->mFill.kind.IsColor()) { + haveContextPaint = true; +- contextPaint->SetFill(style->mFill.kind.AsColor().CalcColor(aStyle)); ++ contextPaint->SetFill( ++ style->mFill.kind.AsColor().CalcColor(aStyle, nullptr)); + } + if ((style->mMozContextProperties.bits & StyleContextPropertyBits::STROKE) && + style->mStroke.kind.IsColor()) { + haveContextPaint = true; +- contextPaint->SetStroke(style->mStroke.kind.AsColor().CalcColor(aStyle)); ++ contextPaint->SetStroke( ++ style->mStroke.kind.AsColor().CalcColor(aStyle, nullptr)); + } + if (style->mMozContextProperties.bits & + StyleContextPropertyBits::FILL_OPACITY) { diff --git a/src/layout/svg/SVGImageContext-h.patch b/src/layout/svg/SVGImageContext-h.patch new file mode 100644 index 000000000..c0cff0a5d --- /dev/null +++ b/src/layout/svg/SVGImageContext-h.patch @@ -0,0 +1,80 @@ +diff --git a/layout/svg/SVGImageContext.h b/layout/svg/SVGImageContext.h +index 159d9cbbd0711076ee6c2a71a3da04bd92a0102c..daefc40590c4d7d7fac9db25c6ec4ba2424dded5 100644 +--- a/layout/svg/SVGImageContext.h ++++ b/layout/svg/SVGImageContext.h +@@ -6,6 +6,7 @@ + #define LAYOUT_SVG_SVGIMAGECONTEXT_H_ + + #include "Units.h" ++#include "nsColor.h" + #include "mozilla/Maybe.h" + #include "mozilla/SVGContextPaint.h" + #include "mozilla/SVGPreserveAspectRatio.h" +@@ -63,6 +64,11 @@ class SVGImageContext { + nsISVGPaintContext* aPaintContext, + imgIContainer* aImgContainer); + ++ // Carry the host document's Zen boost into the image context so the image ++ // renders with the same accent/inversion as the page. ++ static void MaybeStoreZenBoosts(SVGImageContext& aContext, ++ const nsPresContext& aPresContext); ++ + const Maybe& GetViewportSize() const { return mViewportSize; } + + void SetViewportSize(const Maybe& aSize) { +@@ -75,6 +81,21 @@ class SVGImageContext { + mColorScheme = aScheme; + } + ++ // Zen boosts state carried from the host document so the image renders with ++ // the same boost. Part of the cache key below so boosted and unboosted ++ // renderings don't collide. ++ void SetZenBoosts(nscolor aAccent, float aComplementaryRotation, ++ bool aInverted) { ++ mZenBoostsAccent = aAccent; ++ mZenBoostsComplementaryRotation = aComplementaryRotation; ++ mZenBoostsInverted = aInverted; ++ } ++ nscolor GetZenBoostsAccent() const { return mZenBoostsAccent; } ++ float GetZenBoostsComplementaryRotation() const { ++ return mZenBoostsComplementaryRotation; ++ } ++ bool GetZenBoostsInverted() const { return mZenBoostsInverted; } ++ + const Maybe& GetPreserveAspectRatio() const { + return mPreserveAspectRatio; + } +@@ -107,7 +128,11 @@ class SVGImageContext { + + return contextPaintIsEqual && mViewportSize == aOther.mViewportSize && + mPreserveAspectRatio == aOther.mPreserveAspectRatio && +- mColorScheme == aOther.mColorScheme; ++ mColorScheme == aOther.mColorScheme && ++ mZenBoostsAccent == aOther.mZenBoostsAccent && ++ mZenBoostsComplementaryRotation == ++ aOther.mZenBoostsComplementaryRotation && ++ mZenBoostsInverted == aOther.mZenBoostsInverted; + } + + bool operator!=(const SVGImageContext&) const = default; +@@ -119,7 +144,9 @@ class SVGImageContext { + } + return HashGeneric(hash, mViewportSize.map(HashSize).valueOr(0), + mPreserveAspectRatio.map(HashPAR).valueOr(0), +- mColorScheme.map(HashColorScheme).valueOr(0)); ++ mColorScheme.map(HashColorScheme).valueOr(0), ++ mZenBoostsAccent, mZenBoostsComplementaryRotation, ++ mZenBoostsInverted); + } + + private: +@@ -138,6 +165,9 @@ class SVGImageContext { + Maybe mViewportSize; + Maybe mPreserveAspectRatio; + Maybe mColorScheme; ++ nscolor mZenBoostsAccent = 0; ++ float mZenBoostsComplementaryRotation = 0.0f; ++ bool mZenBoostsInverted = false; + }; + + } // namespace mozilla diff --git a/src/layout/svg/SVGTextFrame-cpp.patch b/src/layout/svg/SVGTextFrame-cpp.patch new file mode 100644 index 000000000..33e45c798 --- /dev/null +++ b/src/layout/svg/SVGTextFrame-cpp.patch @@ -0,0 +1,28 @@ +diff --git a/layout/svg/SVGTextFrame.cpp b/layout/svg/SVGTextFrame.cpp +index 93f6f2a704734314586fa16b6a45b434f9c2304d..4503ee2b48be39bb2e61962316ef43ad292a7b27 100644 +--- a/layout/svg/SVGTextFrame.cpp ++++ b/layout/svg/SVGTextFrame.cpp +@@ -2662,9 +2662,9 @@ void SVGTextDrawPathCallbacks::ApplyOpacity( + sRGBColor& aColor, const StyleSVGPaint& aPaint, + const StyleSVGOpacity& aOpacity) const { + if (aPaint.kind.tag == StyleSVGPaintKind::Tag::Color) { +- aColor.a *= +- sRGBColor::FromABGR(aPaint.kind.AsColor().CalcColor(*mFrame->Style())) +- .a; ++ aColor.a *= sRGBColor::FromABGR( ++ aPaint.kind.AsColor().CalcColor(*mFrame->Style(), mFrame)) ++ .a; + } + aColor.a *= SVGUtils::GetOpacity(aOpacity, mContextPaint); + } +@@ -5076,8 +5076,8 @@ bool SVGTextFrame::ShouldRenderAsPath(nsTextFrame* aFrame, + // It's possible nsTextFrame will support non-opaque shadows in the future, + // in which case this test can be removed. + if (style->mFill.kind.IsColor() && aFrame->StyleText()->HasTextShadow() && +- NS_GET_A(style->mFill.kind.AsColor().CalcColor(*aFrame->Style())) != +- 0xFF) { ++ NS_GET_A(style->mFill.kind.AsColor().CalcColor(*aFrame->Style(), ++ aFrame)) != 0xFF) { + return true; + } + diff --git a/src/layout/svg/SVGUtils-cpp.patch b/src/layout/svg/SVGUtils-cpp.patch new file mode 100644 index 000000000..577ca64ba --- /dev/null +++ b/src/layout/svg/SVGUtils-cpp.patch @@ -0,0 +1,60 @@ +diff --git a/layout/svg/SVGUtils.cpp b/layout/svg/SVGUtils.cpp +index 93b73e1c665ea8e011af7026810db6cd23c8049b..004d1d0637d62fcde25a924df5392a7dc64f75dc 100644 +--- a/layout/svg/SVGUtils.cpp ++++ b/layout/svg/SVGUtils.cpp +@@ -1154,23 +1154,23 @@ gfxRect SVGUtils::PathExtentsToMaxStrokeExtents(const gfxRect& aPathExtents, + /* static */ + nscolor SVGUtils::GetFallbackOrPaintColor( + const ComputedStyle& aStyle, StyleSVGPaint nsStyleSVG::* aFillOrStroke, +- nscolor aDefaultContextFallbackColor) { ++ nscolor aDefaultContextFallbackColor, const nsIFrame* aFrame) { + const auto& paint = aStyle.StyleSVG()->*aFillOrStroke; + nscolor color; + switch (paint.kind.tag) { + case StyleSVGPaintKind::Tag::PaintServer: + color = paint.fallback.IsColor() +- ? paint.fallback.AsColor().CalcColor(aStyle) ++ ? paint.fallback.AsColor().CalcColor(aStyle, aFrame) + : NS_RGBA(0, 0, 0, 0); + break; + case StyleSVGPaintKind::Tag::ContextStroke: + case StyleSVGPaintKind::Tag::ContextFill: + color = paint.fallback.IsColor() +- ? paint.fallback.AsColor().CalcColor(aStyle) ++ ? paint.fallback.AsColor().CalcColor(aStyle, aFrame) + : aDefaultContextFallbackColor; + break; + default: +- color = paint.kind.AsColor().CalcColor(aStyle); ++ color = paint.kind.AsColor().CalcColor(aStyle, aFrame); + break; + } + if (const auto* styleIfVisited = aStyle.GetStyleIfVisited()) { +@@ -1184,7 +1184,8 @@ nscolor SVGUtils::GetFallbackOrPaintColor( + // another simple color. + if (paintIfVisited.kind.IsColor() && paint.kind.IsColor()) { + nscolor colors[2] = { +- color, paintIfVisited.kind.AsColor().CalcColor(*styleIfVisited)}; ++ color, ++ paintIfVisited.kind.AsColor().CalcColor(*styleIfVisited, aFrame)}; + return ComputedStyle::CombineVisitedColors(colors, + aStyle.RelevantLinkVisited()); + } +@@ -1254,7 +1255,7 @@ void SVGUtils::MakeFillPatternFor(nsIFrame* aFrame, gfxContext* aContext, + // objectBoundingBox where the width or height of the object is zero. + // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox + sRGBColor color(sRGBColor::FromABGR(GetFallbackOrPaintColor( +- *aFrame->Style(), &nsStyleSVG::mFill, NS_RGB(0, 0, 0)))); ++ *aFrame->Style(), &nsStyleSVG::mFill, NS_RGB(0, 0, 0), aFrame))); + color.a *= fillOpacity; + aOutPattern->InitColorPattern(ToDeviceColor(color)); + } +@@ -1321,7 +1322,7 @@ void SVGUtils::MakeStrokePatternFor(nsIFrame* aFrame, gfxContext* aContext, + // objectBoundingBox where the width or height of the object is zero. + // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox + sRGBColor color(sRGBColor::FromABGR(GetFallbackOrPaintColor( +- *aFrame->Style(), &nsStyleSVG::mStroke, NS_RGBA(0, 0, 0, 0)))); ++ *aFrame->Style(), &nsStyleSVG::mStroke, NS_RGBA(0, 0, 0, 0), aFrame))); + color.a *= strokeOpacity; + aOutPattern->InitColorPattern(ToDeviceColor(color)); + } diff --git a/src/layout/svg/SVGUtils-h.patch b/src/layout/svg/SVGUtils-h.patch new file mode 100644 index 000000000..6adbbff91 --- /dev/null +++ b/src/layout/svg/SVGUtils-h.patch @@ -0,0 +1,13 @@ +diff --git a/layout/svg/SVGUtils.h b/layout/svg/SVGUtils.h +index 1f1f7ad6b78e5c411651fee30bbbfeb784257e0a..28c7332aae411c4220bd00af08b491d31d2eb090 100644 +--- a/layout/svg/SVGUtils.h ++++ b/layout/svg/SVGUtils.h +@@ -428,7 +428,7 @@ class SVGUtils final { + + static nscolor GetFallbackOrPaintColor( + const ComputedStyle&, StyleSVGPaint nsStyleSVG::* aFillOrStroke, +- nscolor aDefaultContextFallbackColor); ++ nscolor aDefaultContextFallbackColor, const nsIFrame* aFrame); + + static void MakeFillPatternFor(nsIFrame* aFrame, gfxContext* aContext, + GeneralPattern* aOutPattern, diff --git a/src/layout/tables/nsTableFrame-cpp.patch b/src/layout/tables/nsTableFrame-cpp.patch new file mode 100644 index 000000000..7c480c702 --- /dev/null +++ b/src/layout/tables/nsTableFrame-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/layout/tables/nsTableFrame.cpp b/layout/tables/nsTableFrame.cpp +index 7c39ea94392dc158656621dfbee1be72bbcd46f8..e2fe47662b92ac6fb7fe2177d1d2cdab500bb969 100644 +--- a/layout/tables/nsTableFrame.cpp ++++ b/layout/tables/nsTableFrame.cpp +@@ -4088,7 +4088,7 @@ static void GetColorAndStyle(const nsIFrame* aFrame, WritingMode aTableWM, + return; + } + *aColor = aFrame->Style()->GetVisitedDependentColor( +- nsStyleBorder::BorderColorFieldFor(physicalSide)); ++ nsStyleBorder::BorderColorFieldFor(physicalSide), aFrame); + + if (aWidth) { + *aWidth = styleData->GetComputedBorderWidth(physicalSide); diff --git a/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch b/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch new file mode 100644 index 000000000..2b834bb1d --- /dev/null +++ b/src/layout/xul/tree/nsTreeBodyFrame-cpp.patch @@ -0,0 +1,32 @@ +diff --git a/layout/xul/tree/nsTreeBodyFrame.cpp b/layout/xul/tree/nsTreeBodyFrame.cpp +index b6aa10336e7994c830e0326298820c3a534f8094..7747c52e5c5d227894d8f7fb377c65861dc51c4c 100644 +--- a/layout/xul/tree/nsTreeBodyFrame.cpp ++++ b/layout/xul/tree/nsTreeBodyFrame.cpp +@@ -2865,7 +2865,8 @@ ImgDrawResult nsTreeBodyFrame::PaintCell( + + const nsStyleBorder* borderStyle = lineContext->StyleBorder(); + // Resolve currentcolor values against the treeline context +- nscolor color = borderStyle->mBorderLeftColor.CalcColor(*lineContext); ++ nscolor color = ++ borderStyle->mBorderLeftColor.CalcColor(*lineContext, this); + ColorPattern colorPatt(ToDeviceColor(color)); + + StyleBorderStyle style = borderStyle->GetBorderStyle(eSideLeft); +@@ -3300,7 +3301,7 @@ ImgDrawResult nsTreeBodyFrame::PaintText( + textRect.Deflate(bp); + + // Set our color. +- ColorPattern color(ToDeviceColor(textContext->StyleText()->mColor)); ++ ColorPattern color(ToDeviceColor(textContext->StyleText()->mColor, this)); + + // Draw decorations. + StyleTextDecorationLine decorations = +@@ -3340,7 +3341,7 @@ ImgDrawResult nsTreeBodyFrame::PaintText( + } + + aRenderingContext.SetColor( +- sRGBColor::FromABGR(textContext->StyleText()->mColor.ToColor())); ++ sRGBColor::FromABGR(textContext->StyleText()->mColor.ToColor(this))); + nsLayoutUtils::DrawString( + this, *fontMet, &aRenderingContext, text.get(), text.Length(), + textRect.TopLeft() + nsPoint(0, baseline), cellContext); diff --git a/src/servo/ports/geckolib/cbindgen-toml.patch b/src/servo/ports/geckolib/cbindgen-toml.patch new file mode 100644 index 000000000..24433b060 --- /dev/null +++ b/src/servo/ports/geckolib/cbindgen-toml.patch @@ -0,0 +1,30 @@ +diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml +index e9ae0149e80a241b2a32ce445deb923af2fac445..0dc5768ab8bf89f7d6c31ff4c7bd4bb805d64509 100644 +--- a/servo/ports/geckolib/cbindgen.toml ++++ b/servo/ports/geckolib/cbindgen.toml +@@ -679,9 +679,9 @@ renaming_overrides_prefixing = true + nscolor CalcColor(const nsIFrame*) const; + /** + * Compute the final color, taking into account the foreground color from the +- * style. ++ * style. The frame, when supplied, is used to resolve Zen boosts. + */ +- nscolor CalcColor(const ComputedStyle&) const; ++ nscolor CalcColor(const ComputedStyle&, const nsIFrame*) const; + /** + * Compute the final color, making the argument the foreground color. + */ +@@ -704,9 +704,11 @@ renaming_overrides_prefixing = true + + /** + * Convert this color to an nscolor. The color will be converted to sRGB first +- * if required. ++ * if required. The frame, when supplied, is used to resolve Zen boosts; pass ++ * the frame the color is being resolved for so boosts can be derived from its ++ * document, or null to skip boost resolution. + */ +- nscolor ToColor() const; ++ nscolor ToColor(const nsIFrame*) const; + """ + + "OwnedSlice" = """ diff --git a/src/widget/ScrollbarDrawing-cpp.patch b/src/widget/ScrollbarDrawing-cpp.patch new file mode 100644 index 000000000..43e784ca0 --- /dev/null +++ b/src/widget/ScrollbarDrawing-cpp.patch @@ -0,0 +1,23 @@ +diff --git a/widget/ScrollbarDrawing.cpp b/widget/ScrollbarDrawing.cpp +index fec73f8a8cbfbf952f1d14f1a4eb2b20f9b5aad4..375ef5654cf61e4dea102588679d2ac2060d299a 100644 +--- a/widget/ScrollbarDrawing.cpp ++++ b/widget/ScrollbarDrawing.cpp +@@ -121,7 +121,7 @@ sRGBColor ScrollbarDrawing::ComputeScrollbarTrackColor( + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { + return sRGBColor::FromABGR( +- ui->mScrollbarColor.AsColors().track.CalcColor(aStyle)); ++ ui->mScrollbarColor.AsColors().track.CalcColor(aStyle, aFrame)); + } + static constexpr sRGBColor sDefaultDarkTrackColor = + sRGBColor::FromU8(20, 20, 25, 77); +@@ -143,7 +143,8 @@ sRGBColor ScrollbarDrawing::ComputeScrollbarThumbColor( + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { + return sRGBColor::FromABGR(ThemeColors::AdjustUnthemedScrollbarThumbColor( +- ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle), aElementState)); ++ ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle, aFrame), ++ aElementState)); + } + + auto systemColor = [&] { diff --git a/src/widget/ScrollbarDrawingCocoa-cpp.patch b/src/widget/ScrollbarDrawingCocoa-cpp.patch new file mode 100644 index 000000000..a1df0b9a7 --- /dev/null +++ b/src/widget/ScrollbarDrawingCocoa-cpp.patch @@ -0,0 +1,15 @@ +diff --git a/widget/ScrollbarDrawingCocoa.cpp b/widget/ScrollbarDrawingCocoa.cpp +index f0dff9276f9880034c800413c4afc2400136b35a..1dd5b53bfda64e1d3b4c1870680fa1a43de0e6fb 100644 +--- a/widget/ScrollbarDrawingCocoa.cpp ++++ b/widget/ScrollbarDrawingCocoa.cpp +@@ -61,8 +61,8 @@ static ScrollbarParams ComputeScrollbarParams(nsIFrame* aFrame, + if (ui->HasCustomScrollbars()) { + const auto& colors = ui->mScrollbarColor.AsColors(); + params.isCustom = true; +- params.trackColor = colors.track.CalcColor(aStyle); +- params.faceColor = colors.thumb.CalcColor(aStyle); ++ params.trackColor = colors.track.CalcColor(aStyle, aFrame); ++ params.faceColor = colors.thumb.CalcColor(aStyle, aFrame); + } + + return params; diff --git a/src/widget/ScrollbarDrawingWin11-cpp.patch b/src/widget/ScrollbarDrawingWin11-cpp.patch new file mode 100644 index 000000000..aa707014d --- /dev/null +++ b/src/widget/ScrollbarDrawingWin11-cpp.patch @@ -0,0 +1,22 @@ +diff --git a/widget/ScrollbarDrawingWin11.cpp b/widget/ScrollbarDrawingWin11.cpp +index be059ca615d1e0281af64984cfc8121be2f6e305..6326c98b369d948052c3cb1df13c8cfaaa472f5c 100644 +--- a/widget/ScrollbarDrawingWin11.cpp ++++ b/widget/ScrollbarDrawingWin11.cpp +@@ -78,7 +78,7 @@ sRGBColor ScrollbarDrawingWin11::ComputeScrollbarTrackColor( + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { + return sRGBColor::FromABGR( +- ui->mScrollbarColor.AsColors().track.CalcColor(aStyle)); ++ ui->mScrollbarColor.AsColors().track.CalcColor(aStyle, aFrame)); + } + return aColors.IsDark() ? sRGBColor::FromU8(23, 23, 23, 255) + : sRGBColor::FromU8(240, 240, 240, 255); +@@ -94,7 +94,7 @@ sRGBColor ScrollbarDrawingWin11::ComputeScrollbarThumbColor( + const nscolor baseColor = [&] { + const nsStyleUI* ui = aStyle.StyleUI(); + if (ui->mScrollbarColor.IsColors()) { +- return ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle); ++ return ui->mScrollbarColor.AsColors().thumb.CalcColor(aStyle, aFrame); + } + return aColors.IsDark() ? NS_RGBA(149, 149, 149, 255) + : NS_RGBA(133, 133, 133, 255); diff --git a/src/widget/Theme-cpp.patch b/src/widget/Theme-cpp.patch new file mode 100644 index 000000000..1b88b2c75 --- /dev/null +++ b/src/widget/Theme-cpp.patch @@ -0,0 +1,56 @@ +diff --git a/widget/Theme.cpp b/widget/Theme.cpp +index 766a8ca4bc6fcc98f719ad4f472b20bc1d198ac9..be4419cfafb55e5cac8f5de741185ee3cabc4722 100644 +--- a/widget/Theme.cpp ++++ b/widget/Theme.cpp +@@ -18,6 +18,7 @@ + #include "mozilla/RelativeLuminanceUtils.h" + #include "mozilla/ScrollContainerFrame.h" + #include "mozilla/StaticPrefs_widget.h" ++#include "mozilla/nsZenBoostsBackend.h" + #include "mozilla/webrender/WebRenderAPI.h" + #include "nsCSSColorUtils.h" + #include "nsCSSRendering.h" +@@ -670,10 +671,15 @@ template + void Theme::PaintTextField(PaintBackendData& aPaintData, + const LayoutDeviceRect& aRect, + const ElementState& aState, const Colors& aColors, +- DPIRatio aDpiRatio) { ++ DPIRatio aDpiRatio, const nsIFrame* aFrame) { + auto [backgroundColor, borderColor] = + ComputeTextfieldColors(aState, aColors, OutlineCoversBorder::Yes); + ++ // The default field background comes from a theme/system color rather than a ++ // resolved style color, so apply Zen boosts here to match boosted content. ++ backgroundColor = sRGBColor::FromABGR(zen::nsZenBoostsBackend::ResolveStyleColor( ++ backgroundColor.ToABGR(), aFrame)); ++ + const CSSCoord radius = 2.0f; + + ThemeDrawing::PaintRoundedRectWithRadius(aPaintData, aRect, backgroundColor, +@@ -690,9 +696,9 @@ template + void Theme::PaintListbox(PaintBackendData& aPaintData, + const LayoutDeviceRect& aRect, + const ElementState& aState, const Colors& aColors, +- DPIRatio aDpiRatio) { ++ DPIRatio aDpiRatio, const nsIFrame* aFrame) { + // We happen to share style between text fields and list boxes. +- return PaintTextField(aPaintData, aRect, aState, aColors, aDpiRatio); ++ return PaintTextField(aPaintData, aRect, aState, aColors, aDpiRatio, aFrame); + } + + template +@@ -1158,10 +1164,12 @@ bool Theme::DoDrawWidgetBackground(PaintBackendData& aPaintData, + case StyleAppearance::Textfield: + case StyleAppearance::NumberInput: + case StyleAppearance::PasswordInput: +- PaintTextField(aPaintData, devPxRect, elementState, colors, dpiRatio); ++ PaintTextField(aPaintData, devPxRect, elementState, colors, dpiRatio, ++ aFrame); + break; + case StyleAppearance::Listbox: +- PaintListbox(aPaintData, devPxRect, elementState, colors, dpiRatio); ++ PaintListbox(aPaintData, devPxRect, elementState, colors, dpiRatio, ++ aFrame); + break; + case StyleAppearance::Menulist: + PaintMenulist(aPaintData, devPxRect, elementState, colors, dpiRatio); diff --git a/src/widget/Theme-h.patch b/src/widget/Theme-h.patch new file mode 100644 index 000000000..e7aad5d42 --- /dev/null +++ b/src/widget/Theme-h.patch @@ -0,0 +1,19 @@ +diff --git a/widget/Theme.h b/widget/Theme.h +index 4e0acbb25b9e39b712a2d96d8dee366dfdce4a01..9aa377ca9f0d7f96d938339d198b797ceebbc602 100644 +--- a/widget/Theme.h ++++ b/widget/Theme.h +@@ -161,10 +161,12 @@ class Theme : protected nsNativeTheme, public nsITheme { + const ElementState&, DPIRatio); + template + void PaintTextField(PaintBackendData&, const LayoutDeviceRect&, +- const ElementState&, const Colors&, DPIRatio); ++ const ElementState&, const Colors&, DPIRatio, ++ const nsIFrame*); + template + void PaintListbox(PaintBackendData&, const LayoutDeviceRect&, +- const ElementState&, const Colors&, DPIRatio); ++ const ElementState&, const Colors&, DPIRatio, ++ const nsIFrame*); + template + void PaintMenulist(PaintBackendData&, const LayoutDeviceRect&, + const ElementState&, const Colors&, DPIRatio); diff --git a/src/widget/ThemeColors-cpp.patch b/src/widget/ThemeColors-cpp.patch new file mode 100644 index 000000000..c4f7c6167 --- /dev/null +++ b/src/widget/ThemeColors-cpp.patch @@ -0,0 +1,13 @@ +diff --git a/widget/ThemeColors.cpp b/widget/ThemeColors.cpp +index 0ac3a8cbb04258312cba20a89a23700c6fd1b49f..dfd5203c1a795fc14befa88a474f241dd16e9c8f 100644 +--- a/widget/ThemeColors.cpp ++++ b/widget/ThemeColors.cpp +@@ -113,7 +113,7 @@ ThemeAccentColor::ThemeAccentColor(const ComputedStyle& aStyle, + } + MOZ_ASSERT(color.IsColor()); + nscolor accentColor = +- ColorPalette::EnsureOpaque(color.AsColor().CalcColor(aStyle)); ++ ColorPalette::EnsureOpaque(color.AsColor().CalcColor(aStyle, nullptr)); + if (sRGBColor::FromABGR(accentColor) == mDefaultPalette->mAccent) { + return; + } diff --git a/src/zen/boosts/ZenBoostsEditor.mjs b/src/zen/boosts/ZenBoostsEditor.mjs index 1708ca752..723229743 100644 --- a/src/zen/boosts/ZenBoostsEditor.mjs +++ b/src/zen/boosts/ZenBoostsEditor.mjs @@ -65,6 +65,7 @@ export class nsZenBoostEditor { once: true, }); + this.doc.getElementById("zenBoostWindow").setAttribute("editor", "boost"); this.doc.getElementById("zen-boost-editor-root").style.display = "flex"; this.doc.getElementById("zen-boost-code-editor-root").style.display = "none"; @@ -366,20 +367,22 @@ export class nsZenBoostEditor { // being smaller than it should be this._boostEditorWidth = this.editorWindow.outerWidth; - this.editorWindow.resizeTo( - this._codeEditorWidth, - this.editorWindow.outerHeight - ); - if (openRightAligned) { - this.editorWindow.moveTo( - this.editorWindow.screenX - offset, - this.editorWindow.screenY + this.editorWindow.requestAnimationFrame(() => { + this.editorWindow.resizeTo( + this._codeEditorWidth, + this.editorWindow.outerHeight ); - } + if (openRightAligned) { + this.editorWindow.moveTo( + this.editorWindow.screenX - offset, + this.editorWindow.screenY + ); + } - this.doc.getElementById("zen-boost-editor-root").style.display = "none"; - this.doc.getElementById("zen-boost-code-editor-root").style.display = - "initial"; + this.doc.getElementById("zen-boost-editor-root").style.display = "none"; + this.doc.getElementById("zen-boost-code-editor-root").style.display = + "initial"; + }); } /** @@ -397,20 +400,22 @@ export class nsZenBoostEditor { } windowElem.setAttribute("editor", "boost"); - this.editorWindow.resizeTo( - this._boostEditorWidth, - this.editorWindow.outerHeight - ); - if (openRightAligned) { - this.editorWindow.moveTo( - this.editorWindow.screenX + offset, - this.editorWindow.screenY + this.editorWindow.requestAnimationFrame(() => { + this.editorWindow.resizeTo( + this._boostEditorWidth, + this.editorWindow.outerHeight ); - } + if (openRightAligned) { + this.editorWindow.moveTo( + this.editorWindow.screenX + offset, + this.editorWindow.screenY + ); + } - this.doc.getElementById("zen-boost-editor-root").style.display = "flex"; - this.doc.getElementById("zen-boost-code-editor-root").style.display = - "none"; + this.doc.getElementById("zen-boost-editor-root").style.display = "flex"; + this.doc.getElementById("zen-boost-code-editor-root").style.display = + "none"; + }); // Disable picker mode this.disableAllPickers(); @@ -564,6 +569,9 @@ ${cssSelector} { this.wasDragging = true; event.preventDefault(); + this.currentBoostData.changeWasMade = true; + this.updateButtonToggleVisuals(); + if (this.dragTarget == "zen-boost-color-picker-dot-secondary") { this.setSecondaryDotPos(event.clientX, event.clientY); } else if (event.target.id != "zen-boost-magic-theme") { @@ -670,20 +678,6 @@ ${cssSelector} { panel.openPopup(event.target, "bottomcenter topcenter", 0, 2); } - /** - * Resets the color picker dot to the default position (default state). - */ - resetDotPosition() { - const gradient = this.doc.querySelector(".zen-boost-color-picker-gradient"); - const rect = gradient.getBoundingClientRect(); - const padding = 50; - const centerX = rect.left + rect.width / 2; - const centerY = rect.top + rect.height / 2; - const radius = (rect.width - padding) / 2; - - this.setDotPos(centerX + radius / 1.25, centerY); - } - /** * Handles clicks on the theme picker gradient or magic theme button. * Updates the dot position or toggles auto-theme mode based on the click target. @@ -695,14 +689,16 @@ ${cssSelector} { this.currentBoostData.changeWasMade = true; + this.currentBoostData.enableColorBoost = true; + if (event.target.id == "zen-boost-magic-theme") { - this.currentBoostData.enableColorBoost = true; this.currentBoostData.autoTheme = !this.currentBoostData.autoTheme; - this.updateButtonToggleVisuals(); this.updateCurrentBoost(); } else if (this.dragTarget != "zen-boost-color-picker-dot-secondary") { this.setDotPos(event.clientX, event.clientY, !this.wasDragging); } + + this.updateButtonToggleVisuals(); this.wasDragging = false; } @@ -1310,6 +1306,23 @@ ${cssSelector} { const resetBoost = this.doc.getElementById("zen-boost-edit-reset"); const popup = this.doc.getElementById("zenBoostContextMenu"); + popup.addEventListener( + "popupshown", + () => { + // Don't give the user following options if the boost + // is not going to save / not currently saved (unchanged) + let shouldDisable = !this.currentBoostData.changeWasMade; + const items = [renameBoost, deleteBoost, resetBoost]; + for (let item of items) { + if (shouldDisable) { + item.setAttribute("disabled", ""); + } else { + item.removeAttribute("disabled"); + } + } + }, + { once: true } + ); popup.openPopup( event.target, "bottomcenter topcenter", @@ -1319,12 +1332,6 @@ ${cssSelector} { false /* attributesOverride */, event ); - - // Don't give the user following options if the boost - // is not going to save / not currently saved (unchanged) - renameBoost.disabled = !this.currentBoostData.changeWasMade; - deleteBoost.disabled = !this.currentBoostData.changeWasMade; - resetBoost.disabled = !this.currentBoostData.changeWasMade; } /** @@ -1566,44 +1573,32 @@ ${cssSelector} { } if ( - this.currentBoostData.dotPos.x == null || - this.currentBoostData.dotPos.y == null - ) { - this.resetDotPosition(); - } else { // Test if the stored position is a non-normalized dot position - if ( - this.currentBoostData.dotPos.x > 1 || - this.currentBoostData.dotPos.x < 0 || - this.currentBoostData.dotPos.y > 1 || - this.currentBoostData.dotPos.y < 0 - ) { - // Normalize position - this.currentBoostData.dotPos.x = - this.currentBoostData.dotPos.x / rect.width; - this.currentBoostData.dotPos.y = - this.currentBoostData.dotPos.y / rect.height; - } - - // Convert normalized position to relative position - const xPos = this.currentBoostData.dotPos.x * rect.width; - const yPos = this.currentBoostData.dotPos.y * rect.height; - - dot.style.left = `${xPos}px`; - dot.style.top = `${yPos}px`; - } - - if ( - this.currentBoostData.secondaryDotPos?.x != null && - this.currentBoostData.secondaryDotPos?.y != null + this.currentBoostData.dotPos.x > 1 || + this.currentBoostData.dotPos.x < 0 || + this.currentBoostData.dotPos.y > 1 || + this.currentBoostData.dotPos.y < 0 ) { - const xPosSec = this.currentBoostData.secondaryDotPos.x * rect.width; - const yPosSec = this.currentBoostData.secondaryDotPos.y * rect.height; - - dotSec.style.left = `${xPosSec}px`; - dotSec.style.top = `${yPosSec}px`; + // Normalize position + this.currentBoostData.dotPos.x = + this.currentBoostData.dotPos.x / rect.width; + this.currentBoostData.dotPos.y = + this.currentBoostData.dotPos.y / rect.height; } + // Convert normalized position to relative position + const xPos = this.currentBoostData.dotPos.x * rect.width; + const yPos = this.currentBoostData.dotPos.y * rect.height; + + dot.style.left = `${xPos}px`; + dot.style.top = `${yPos}px`; + + const xPosSec = this.currentBoostData.secondaryDotPos.x * rect.width; + const yPosSec = this.currentBoostData.secondaryDotPos.y * rect.height; + + dotSec.style.left = `${xPosSec}px`; + dotSec.style.top = `${yPosSec}px`; + this.editorWindow._editor.setText(this.currentBoostData.customCSS || ""); this.updateFontButtonVisuals(); diff --git a/src/zen/boosts/ZenBoostsManager.sys.mjs b/src/zen/boosts/ZenBoostsManager.sys.mjs index 67abb7bc4..a93492da5 100644 --- a/src/zen/boosts/ZenBoostsManager.sys.mjs +++ b/src/zen/boosts/ZenBoostsManager.sys.mjs @@ -115,11 +115,11 @@ class nsZenBoostsManager { boostName: "My Boost", dotAngleDeg: 0, - dotPos: { x: null, y: null }, + dotPos: { x: 0.76, y: 0.66 }, dotDistance: 0, secondaryDotAngleDegDelta: 55, - secondaryDotPos: { x: null, y: null }, + secondaryDotPos: { x: 0.5, y: 0.81 }, brightness: 0.5, saturation: 0.5, @@ -312,6 +312,7 @@ class nsZenBoostsManager { Services.obs.notifyObservers(null, "zen-boosts-active-change", { id }); + this.#writeToDisk(this.registeredDomains); this.#stylesManager.invalidateStyleForDomain(domain); this.notify(); } @@ -327,23 +328,23 @@ class nsZenBoostsManager { if (domainEntry) { if (domainEntry.boostEntries.has(id)) { + let unloadStyles = false; if (domainEntry.activeBoostId === id) { domainEntry.activeBoostId = null; Services.obs.notifyObservers(null, "zen-boosts-active-change", { id: null, }); - - this.#stylesManager.invalidateStyleForDomain(domain); - this.notify(true); + unloadStyles = true; } else { domainEntry.activeBoostId = id; Services.obs.notifyObservers(null, "zen-boosts-active-change", { id, }); - - this.#stylesManager.invalidateStyleForDomain(domain); - this.notify(); } + + this.#writeToDisk(this.registeredDomains); + this.#stylesManager.invalidateStyleForDomain(domain); + this.notify(unloadStyles); } } } @@ -539,6 +540,12 @@ class nsZenBoostsManager { const directoryPath = this.#cssPath; const savePath = PathUtils.join(directoryPath, fileName); + if (!css || css.trim() === "") { + if (await IOUtils.exists(savePath)) { + await IOUtils.remove(savePath); + } + return; + } await IOUtils.makeDirectory(directoryPath, { createAncestors: true }); await IOUtils.writeUTF8(savePath, css); } @@ -553,7 +560,8 @@ class nsZenBoostsManager { const domainEntry = this.#getDomainEntry(domain); if (domainEntry) { - return domainEntry.boostEntries.has(domainEntry.activeBoostId); + const boost = this.loadActiveBoostFromStore(domain); + return boost?.boostEntry.boostData.changeWasMade ?? false; } return false; diff --git a/src/zen/boosts/ZenZapOverlayChild.sys.mjs b/src/zen/boosts/ZenZapOverlayChild.sys.mjs index df7c10cc0..7b8b4ed35 100644 --- a/src/zen/boosts/ZenZapOverlayChild.sys.mjs +++ b/src/zen/boosts/ZenZapOverlayChild.sys.mjs @@ -26,6 +26,7 @@ export class ZapOverlay { #dissolvePoolSize = 5; #dissolveEffectPool = []; #currentDissolveIndex = 0; + #onZapDoneClick = null; /** * @param {*} document Webpage document @@ -77,10 +78,8 @@ export class ZapOverlay { */ #initializeElements() { this.zapDoneButton = this.getElementById("zap-done"); - this.zapDoneButton.addEventListener( - "click", - this.#disableZapMode.bind(this) - ); + this.#onZapDoneClick = this.#disableZapMode.bind(this); + this.zapDoneButton.addEventListener("click", this.#onZapDoneClick); this.#updateZappedList(); } @@ -355,6 +354,12 @@ export class ZapOverlay { dissolve.tearDown(); }); + if (this.zapDoneButton && this.#onZapDoneClick) { + this.zapDoneButton.removeEventListener("click", this.#onZapDoneClick); + } + this.#onZapDoneClick = null; + this.zapDoneButton = null; + if (this.#content) { try { this.document.removeAnonymousContent(this.#content); diff --git a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs index 1ea6b1e60..597a74c09 100644 --- a/src/zen/boosts/actors/ZenBoostsChild.sys.mjs +++ b/src/zen/boosts/actors/ZenBoostsChild.sys.mjs @@ -70,6 +70,17 @@ export class ZenBoostsChild extends JSWindowActorChild { static PREVENTABLE_SET = new Set(ZenBoostsChild.PREVENTABLE_EVENTS); + actorCreated() { + this.#applyBoostForPageIfAvailable(); + } + + didDestroy() { + if (this.#currentState === ZenBoostsChild.STATES.ZAP) { + this.disableZapMode(); + } + this.#removeEventListeners(); + } + /** * Inverse of https://searchfox.org/firefox-main/rev/1a8c62b86277005f907151bc5389cf5c5091e76f/gfx/src/nsColor.h#23-27 * @@ -179,28 +190,6 @@ export class ZenBoostsChild extends JSWindowActorChild { return [h * 60, s, l]; } - /** - * Handles DOM events for the actor. Applies boost settings when a document - * element is inserted. - * - * @param {Event} event - The DOM event to handle. - */ - handleEvent(event) { - switch (event.type) { - case "unload": - if (this.#currentState === ZenBoostsChild.STATES.ZAP) { - this.disableZapMode(); - } - this.#removeEventListeners(); - break; - case "DOMWindowCreated": - this.#applyBoostForPageIfAvailable(); - break; - default: - break; - } - } - handleZapEvent(event) { if (ZenBoostsChild.ALL_EVENTS_SET.has(event.type)) { this.#overlay.handleEvent( @@ -322,13 +311,18 @@ export class ZenBoostsChild extends JSWindowActorChild { return p; } + get #hostWithoutPort() { + const host = this.browsingContext.topWindow?.location.host; + return host?.split(":")[0]; + } + /** * Aquires the boost data for this website * * @returns {object} Boost data for the current website */ getWebsiteBoost() { - const domain = this.browsingContext.topWindow?.location?.host; + const domain = this.#hostWithoutPort; if (!domain) { return null; } @@ -362,6 +356,14 @@ export class ZenBoostsChild extends JSWindowActorChild { this.#loadStyleSheet(boost.styleSheet); } + if ( + boostData.sizeOverride && + isFinite(boostData.sizeOverride) && + boostData.sizeOverride !== 1 + ) { + browsingContext.fullZoom = boostData.sizeOverride; + } + browsingContext.isZenBoostsInverted = boostData.smartInvert; if (boostData.enableColorBoost) { let primaryColor; @@ -384,17 +386,17 @@ export class ZenBoostsChild extends JSWindowActorChild { // using the same modifiers as the color above primaryColor = this.#buildBoostColor( primaryGradientColor[0], - primaryGradientColor[1] * (1 - boostData.saturation), - 0.1 + primaryGradientColor[2] * 0.9 * boostData.brightness, + 1 - boostData.saturation, + 0.1 + 0.9 * boostData.brightness, boostData ); } else { primaryColor = this.#buildBoostColor( boostData.dotAngleDeg, /* already is [0, 1] */ - boostData.dotDistance * (1 - boostData.saturation), + 1 - boostData.saturation, /* lightness range from [0.1, 0.9] */ - 0.1 + boostData.dotDistance * 0.8 * boostData.brightness, + 0.1 + 0.9 * boostData.brightness, boostData ); } @@ -484,7 +486,7 @@ export class ZenBoostsChild extends JSWindowActorChild { } addZapSelector(selector) { - const domain = this.browsingContext.topWindow?.location?.host; + const domain = this.#hostWithoutPort; this.sendQuery("ZenBoost:ZapSelector", { action: "add", selector, @@ -493,7 +495,7 @@ export class ZenBoostsChild extends JSWindowActorChild { } removeZapSelector(selector) { - const domain = this.browsingContext.topWindow?.location?.host; + const domain = this.#hostWithoutPort; this.sendQuery("ZenBoost:ZapSelector", { action: "remove", selector, diff --git a/src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp b/src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp new file mode 100644 index 000000000..e378451d0 --- /dev/null +++ b/src/zen/boosts/gtest/TestZenBoostsColorFilter.cpp @@ -0,0 +1,121 @@ +/* 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/. */ + +#include "gtest/gtest.h" + +#include "mozilla/nsZenBoostsBackend.h" + +using zen::detail::FilterColorChannel; +using zen::detail::InvertColorChannel; +using zen::detail::PrecomputeAccent; +using zen::detail::RotateAccent; + +namespace { + +// A spread of representative input colors (opaque unless noted). +const nscolor kColors[] = { + NS_RGBA(255, 0, 0, 255), // pure red + NS_RGBA(0, 255, 0, 255), // pure green + NS_RGBA(0, 0, 255, 255), // pure blue + NS_RGBA(0, 0, 0, 255), // black + NS_RGBA(255, 255, 255, 255), // white + NS_RGBA(128, 128, 128, 255), // mid gray + NS_RGBA(18, 52, 86, 200), // arbitrary, semi-transparent + NS_RGBA(240, 17, 99, 1), // near-min alpha +}; + +// The accent stores the contrast/strength in its alpha byte +// (NS_GET_CONTRAST == NS_GET_A). 0 means "no tint". +zen::nsZenAccentOklab MakeAccent(uint8_t r, uint8_t g, uint8_t b, + uint8_t contrast) { + return PrecomputeAccent(NS_RGBA(r, g, b, contrast)); +} + +} // namespace + +// The headline invariant: filtering must never change opacity. The whole +// pipeline overloads the alpha byte for contrast on the *accent*, but a +// filtered *content* color must keep its original alpha. +TEST(ZenBoostsColorFilter, PreservesAlpha) +{ + const zen::nsZenAccentOklab accent = MakeAccent(80, 120, 200, 180); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 180.0f); + + for (nscolor c : kColors) { + const nscolor out = FilterColorChannel(c, accent, complementary); + EXPECT_EQ(NS_GET_A(out), NS_GET_A(c)) << "alpha changed for input " << c; + } +} + +// Fully transparent colors are invisible; the filter must pass them through +// untouched (and must not interpret their zero alpha as contrast). +TEST(ZenBoostsColorFilter, TransparentPassthrough) +{ + const zen::nsZenAccentOklab accent = MakeAccent(80, 120, 200, 180); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 90.0f); + + const nscolor transparent = NS_RGBA(255, 0, 0, 0); + EXPECT_EQ(FilterColorChannel(transparent, accent, complementary), + transparent); + EXPECT_EQ(InvertColorChannel(transparent), transparent); +} + +// Same inputs must always yield the same output (no hidden global state in +// the math itself; the production cache lives outside these primitives). +TEST(ZenBoostsColorFilter, Deterministic) +{ + const zen::nsZenAccentOklab accent = MakeAccent(33, 200, 90, 200); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 200.0f); + + for (nscolor c : kColors) { + const nscolor a = FilterColorChannel(c, accent, complementary); + const nscolor b = FilterColorChannel(c, accent, complementary); + EXPECT_EQ(a, b); + EXPECT_EQ(InvertColorChannel(c), InvertColorChannel(c)); + } +} + +// A zero-contrast accent means "no boost strength": the color must come back +// essentially unchanged (allow +/-1 per channel for sRGB<->Oklab rounding). +TEST(ZenBoostsColorFilter, ZeroContrastIsNearIdentity) +{ + const zen::nsZenAccentOklab accent = MakeAccent(200, 50, 50, 0); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 180.0f); + + for (nscolor c : kColors) { + if (NS_GET_A(c) == 0) { + continue; + } + const nscolor out = FilterColorChannel(c, accent, complementary); + EXPECT_NEAR(NS_GET_R(out), NS_GET_R(c), 1); + EXPECT_NEAR(NS_GET_G(out), NS_GET_G(c), 1); + EXPECT_NEAR(NS_GET_B(out), NS_GET_B(c), 1); + EXPECT_EQ(NS_GET_A(out), NS_GET_A(c)); + } +} + +// Guards against a regression that turns the filter into a no-op: a strong +// accent applied to a neutral gray must actually move the color. +TEST(ZenBoostsColorFilter, StrongAccentActuallyTints) +{ + const zen::nsZenAccentOklab accent = MakeAccent(20, 130, 240, 255); + const zen::nsZenAccentOklab complementary = RotateAccent(accent, 30.0f); + + const nscolor gray = NS_RGBA(128, 128, 128, 255); + const nscolor out = FilterColorChannel(gray, accent, complementary); + + const bool moved = NS_GET_R(out) != NS_GET_R(gray) || + NS_GET_G(out) != NS_GET_G(gray) || + NS_GET_B(out) != NS_GET_B(gray); + EXPECT_TRUE(moved) << "a full-strength accent should tint mid gray"; + EXPECT_EQ(NS_GET_A(out), NS_GET_A(gray)); +} + +// Inversion must also preserve opacity. +TEST(ZenBoostsColorFilter, InvertPreservesAlpha) +{ + for (nscolor c : kColors) { + EXPECT_EQ(NS_GET_A(InvertColorChannel(c)), NS_GET_A(c)); + } +} diff --git a/src/zen/boosts/gtest/moz.build b/src/zen/boosts/gtest/moz.build new file mode 100644 index 000000000..cc14100b7 --- /dev/null +++ b/src/zen/boosts/gtest/moz.build @@ -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/. + +UNIFIED_SOURCES += [ + "TestZenBoostsColorFilter.cpp", +] + +FINAL_LIBRARY = "xul-gtest" diff --git a/src/zen/boosts/moz.build b/src/zen/boosts/moz.build index 211d68fc2..a436cf3de 100644 --- a/src/zen/boosts/moz.build +++ b/src/zen/boosts/moz.build @@ -26,3 +26,7 @@ SOURCES += [ ] FINAL_LIBRARY = "xul" + +TEST_DIRS += [ + "gtest", +] diff --git a/src/zen/boosts/nsZenBCOverrides.cpp b/src/zen/boosts/nsZenBCOverrides.cpp index 0be59563e..cafe19c5a 100644 --- a/src/zen/boosts/nsZenBCOverrides.cpp +++ b/src/zen/boosts/nsZenBCOverrides.cpp @@ -38,18 +38,6 @@ void BrowsingContext::WalkPresContexts(Callback&& aCallback) { }); } -static void RefreshBoostCacheIfMatchesCurrent(BrowsingContext* aChanged) { - auto* backend = zen::nsZenBoostsBackend::GetInstance(); - if (!backend) { - return; - } - auto current = backend->GetCurrentBrowsingContext(); - if (!current || current->Top() != aChanged) { - return; - } - backend->RefreshCachedBoostState(); -} - /** * @brief Called when the ZenBoostsData field is set on a browsing context. * Triggers a restyle if the boost data has changed. @@ -61,7 +49,6 @@ void BrowsingContext::DidSet(FieldIndex, if (ZenBoostsData() == aOldValue) { return; } - RefreshBoostCacheIfMatchesCurrent(this); PresContextAffectingFieldChanged(); TRIGGER_PRES_CONTEXT_RESTYLE(); } @@ -79,7 +66,6 @@ void BrowsingContext::DidSet(FieldIndex, if (ZenBoostsComplementaryRotation() == aOldValue) { return; } - RefreshBoostCacheIfMatchesCurrent(this); PresContextAffectingFieldChanged(); TRIGGER_PRES_CONTEXT_RESTYLE(); } @@ -95,7 +81,6 @@ void BrowsingContext::DidSet(FieldIndex, if (IsZenBoostsInverted() == aOldValue) { return; } - RefreshBoostCacheIfMatchesCurrent(this); PresContextAffectingFieldChanged(); TRIGGER_PRES_CONTEXT_RESTYLE(); } diff --git a/src/zen/boosts/nsZenBoostsBackend.cpp b/src/zen/boosts/nsZenBoostsBackend.cpp index 1968c6ad1..6a64cd724 100644 --- a/src/zen/boosts/nsZenBoostsBackend.cpp +++ b/src/zen/boosts/nsZenBoostsBackend.cpp @@ -4,12 +4,16 @@ #include #include +#include #include +#include #include "nsZenBoostsBackend.h" #include "nsIXULRuntime.h" #include "nsPresContext.h" +#include "nsIFrame.h" +#include "nsIContent.h" #include "mozilla/ClearOnShutdown.h" #include "mozilla/StaticPtr.h" @@ -21,6 +25,8 @@ #include "mozilla/dom/Document.h" #include "mozilla/dom/DocumentInlines.h" #include "mozilla/dom/BrowsingContext.h" +#include "mozilla/dom/Element.h" +#include "mozilla/PseudoStyleType.h" #include "mozilla/StaticPrefs_zen.h" @@ -29,9 +35,6 @@ #define INVERT_CHANNEL_FLOOR() \ (mozilla::StaticPrefs::zen_boosts_invert_channel_floor_AtStartup()) -#define SHOULD_APPLY_BOOSTS_TO_ANONYMOUS_CONTENT() \ - (!mozilla::StaticPrefs::zen_boosts_disable_on_anonymous_content_AtStartup()) - #if defined(__clang__) || defined(__GNUC__) # define ZEN_HOT_FUNCTION __attribute__((hot)) #else @@ -48,10 +51,6 @@ namespace zen { NS_IMPL_ISUPPORTS0(nsZenBoostsBackend) -nsZenAccentOklab nsZenBoostsBackend::mCachedAccent{0}; -nsZenAccentOklab nsZenBoostsBackend::mCachedComplementary{0}; -float nsZenBoostsBackend::mCachedComplementaryRotationDeg = 0.0f; - namespace { /** @@ -83,17 +82,43 @@ static inline float linearToSrgb(float c) { static inline float fastCbrt(float x) { if (x == 0.0f) return 0.0f; float a = std::abs(x); - union { - float f; - uint32_t i; - } u = {a}; - u.i = u.i / 3 + 0x2a504a2e; - float y = u.f; + // Bit-level initial guess. Use memcpy rather than a union to avoid the + // undefined behaviour of type-punning through a union member in C++. + uint32_t i; + std::memcpy(&i, &a, sizeof(i)); + i = i / 3 + 0x2a504a2e; + float y; + std::memcpy(&y, &i, sizeof(y)); y = (2.0f * y + a / (y * y)) * (1.0f / 3.0f); y = (2.0f * y + a / (y * y)) * (1.0f / 3.0f); return x < 0.0f ? -y : y; } +/** + * @brief sRGB(0..255) -> linear lookup table. The filter only ever feeds + * integer 8-bit channels through srgbToLinear, so the 256 possible results + * are precomputed once instead of calling std::pow three times per color on + * the per-color hot path. Built lazily on first use; the function-local + * static makes initialization thread-safe. + */ +static inline const std::array& SrgbLinearTable() { + static const std::array kTable = [] { + std::array table{}; + for (int i = 0; i < 256; ++i) { + table[i] = srgbToLinear(i * (1.0f / 255.0f)); + } + return table; + }(); + return kTable; +} + +/** + * @brief Linearizes an 8-bit sRGB channel via the precomputed table. + */ +static inline float srgbToLinear8(uint8_t aChannel) { + return SrgbLinearTable()[aChannel]; +} + /** * @brief Precomputes the Oklab values for a given accent color. This allows us * to efficiently apply the accent color as a filter to other colors without @@ -107,13 +132,9 @@ ZEN_HOT_FUNCTION inline static auto zenPrecomputeAccent(nscolor aAccentColor) { constexpr float inv255 = 1.0f / 255.0f; - const float r = NS_GET_R(aAccentColor) * inv255; - const float g = NS_GET_G(aAccentColor) * inv255; - const float b = NS_GET_B(aAccentColor) * inv255; - - const float lr = srgbToLinear(r); - const float lg = srgbToLinear(g); - const float lb = srgbToLinear(b); + const float lr = srgbToLinear8(NS_GET_R(aAccentColor)); + const float lg = srgbToLinear8(NS_GET_G(aAccentColor)); + const float lb = srgbToLinear8(NS_GET_B(aAccentColor)); const float l_ = fastCbrt(0.4122214708f * lr + 0.5363325363f * lg + 0.0514459929f * lb); @@ -156,6 +177,45 @@ inline static nsZenAccentOklab zenRotateAccent(const nsZenAccentOklab& aBase, }; } +/** + * @brief Small round-robin cache of precomputed accents. Painting several + * boosted tabs with different accents interleaved would otherwise recompute + * the Oklab base accent (with cbrt) and the rotated complementary accent on + * every single color. Keyed by the accent nscolor and the complementary hue + * rotation. Main-thread only (same threading assumption as the per-color + * paint path it serves). + */ +struct AccentCacheEntry { + nscolor accentNS = 0; + float rotationDeg = 0.0f; + bool valid = false; + nsZenAccentOklab accent{}; + nsZenAccentOklab complementary{}; +}; + +static constexpr size_t kAccentCacheSize = 4; +static AccentCacheEntry sAccentCache[kAccentCacheSize]; +static size_t sAccentCacheNext = 0; + +ZEN_HOT_FUNCTION +static const AccentCacheEntry& GetCachedAccent(nscolor aAccentNS, + float aRotationDeg) { + for (const auto& entry : sAccentCache) { + if (entry.valid && entry.accentNS == aAccentNS && + entry.rotationDeg == aRotationDeg) { + return entry; + } + } + AccentCacheEntry& slot = sAccentCache[sAccentCacheNext]; + sAccentCacheNext = (sAccentCacheNext + 1) % kAccentCacheSize; + slot.accentNS = aAccentNS; + slot.rotationDeg = aRotationDeg; + slot.accent = zenPrecomputeAccent(aAccentNS); + slot.complementary = zenRotateAccent(slot.accent, aRotationDeg); + slot.valid = true; + return slot; +} + /** * @brief Applies a duotone color filter to transform an original color toward * one of two accent colors. The original color's perceived lightness decides @@ -183,10 +243,10 @@ inline static nsZenAccentOklab zenRotateAccent(const nsZenAccentOklab& aBase, constexpr float inv255 = 1.0f / 255.0f; const float blendFactor = contrast * inv255; - // sRGB -> linear - const float lr = srgbToLinear(NS_GET_R(aOriginalColor) * inv255); - const float lg = srgbToLinear(NS_GET_G(aOriginalColor) * inv255); - const float lb = srgbToLinear(NS_GET_B(aOriginalColor) * inv255); + // sRGB -> linear (8-bit channels via the precomputed table) + const float lr = srgbToLinear8(NS_GET_R(aOriginalColor)); + const float lg = srgbToLinear8(NS_GET_G(aOriginalColor)); + const float lb = srgbToLinear8(NS_GET_B(aOriginalColor)); // Linear RGB -> LMS -> cube root -> Oklab (fused) const float l_ = @@ -300,40 +360,83 @@ inline static nscolor zenInvertColorChannel(nscolor aColor) { const auto gShifted = sum - gInv; const auto bShifted = sum - bInv; - // Compress the channel range into [FLOOR, 255] so dark inversions are - // lifted while light inversions are left untouched. This preserves hue - // since all three channels are scaled by the same factor. + // If the resulting color is light, leave it untouched: mixing in the floor + // would raise its lowest channel and wash the color out toward grey. Only + // dark results get the floor lift, which keeps them off pure black. + const auto luma = (rShifted * 54 + gShifted * 183 + bShifted * 19) >> 8; + if (luma > 127) { + return NS_RGBA(static_cast(rShifted), + static_cast(gShifted), + static_cast(bShifted), a); + } + + // Compress the dark channel range into [FLOOR, 255] so dark inversions are + // lifted off pure black. This preserves hue since all three channels are + // scaled by the same factor. const auto channelFloor = INVERT_CHANNEL_FLOOR(); const uint32_t range = 255 - channelFloor; const auto lift = [channelFloor, range](uint8_t c) -> uint8_t { return static_cast(channelFloor + (c * range) / 255); }; - return NS_RGBA(lift(rShifted), lift(gShifted), lift(bShifted), a); } /** - * @brief Retrieves the current boost data from the browsing context. When - * called without aPresContext, reads the precomputed cache populated on - * presshell entry; otherwise resolves from the supplied PresContext. + * @brief Whether the given frame belongs to anonymous content that boosts must + * not touch (devtools highlighters, screenshots, the boosts overlays + * themselves, and other native-anonymous UI such as scrollbars). A null frame + * gives no document to anchor the boost on, so it is treated the same way. + * Author-facing content that happens to be native-anonymous is not exempt: + * UA-widget form-control internals (including the text the user types into an + * input), and pseudo-elements such as ::before/::after/::marker/::placeholder. */ ZEN_HOT_FUNCTION -inline static void GetZenBoostsDataFromBrowsingContext( - ZenBoostData* aData, float* aComplementaryRotation, bool* aIsInverted, - nsPresContext* aPresContext = nullptr) { - auto zenBoosts = nsZenBoostsBackend::GetInstance(); - if (!zenBoosts || (zenBoosts->mCurrentFrameIsAnonymousContent && - !SHOULD_APPLY_BOOSTS_TO_ANONYMOUS_CONTENT())) { +inline static bool IsBoostExemptFrame(const nsIFrame* aFrame) { + if (!aFrame) { + return true; + } + const nsIContent* content = aFrame->GetContent(); + if (!content || !content->IsInNativeAnonymousSubtree()) { + return false; + } + // Form-control internals (and media controls) live in UA-widget shadow + // trees; the text typed into an input is author content and should be + // boosted. Classic native-anonymous UI (scrollbars, devtools) has no + // containing shadow and falls through to the pseudo-element check below. + if (content->GetContainingShadow()) { + return false; + } + const nsIContent* root = content->GetClosestNativeAnonymousSubtreeRoot(); + return !root || !root->IsElement() || + !mozilla::PseudoStyle::IsPseudoElement( + root->AsElement()->GetPseudoElementType()); +} + +/** + * @brief Retrieves the boost data for the document the given frame belongs to. + * Resolves from the frame's PresContext -> Document -> top BrowsingContext, + * which carries the accent/inversion fields. + */ +ZEN_HOT_FUNCTION +inline static void GetZenBoostsDataForFrame(const nsIFrame* aFrame, + ZenBoostData* aData, + float* aComplementaryRotation, + bool* aIsInverted) { + nsPresContext* presContext = aFrame->PresContext(); + if (!presContext) { return; } - if (!aPresContext) { - *aData = zenBoosts->mCachedCurrentAccent; - *aComplementaryRotation = zenBoosts->mCachedCurrentComplementaryRotation; - *aIsInverted = zenBoosts->mCachedCurrentInverted; + // SVG images render in their own document with no BrowsingContext; the host + // propagates its boost onto the image document's PresContext instead. + if (presContext->HasZenBoostsOverride()) { + *aData = presContext->ZenBoostsOverrideAccent(); + *aComplementaryRotation = + presContext->ZenBoostsOverrideComplementaryRotation(); + *aIsInverted = presContext->ZenBoostsOverrideInverted(); return; } - mozilla::dom::BrowsingContext* browsingContext = nullptr; - if (auto document = aPresContext->Document()) { + const mozilla::dom::BrowsingContext* browsingContext = nullptr; + if (auto document = presContext->Document()) { browsingContext = document->GetBrowsingContext(); } if (!browsingContext) { @@ -347,6 +450,32 @@ inline static void GetZenBoostsDataFromBrowsingContext( } // namespace +namespace detail { + +// Thin forwarders that give unit tests access to the pure color math without +// pulling in the singleton / BrowsingContext. They are defined here, after the +// anonymous namespace, so they can reach those file-local implementations. +nsZenAccentOklab PrecomputeAccent(nscolor aAccentColor) { + return zenPrecomputeAccent(aAccentColor); +} + +nsZenAccentOklab RotateAccent(const nsZenAccentOklab& aBase, + float aRotationDeg) { + return zenRotateAccent(aBase, aRotationDeg); +} + +nscolor FilterColorChannel(nscolor aOriginalColor, + const nsZenAccentOklab& aAccent, + const nsZenAccentOklab& aComplementary) { + return zenFilterColorChannel(aOriginalColor, aAccent, aComplementary); +} + +nscolor InvertColorChannel(nscolor aColor) { + return zenInvertColorChannel(aColor); +} + +} // namespace detail + static mozilla::StaticRefPtr sZenBoostsBackend; auto nsZenBoostsBackend::GetInstance() -> nsZenBoostsBackend* { @@ -362,68 +491,34 @@ auto nsZenBoostsBackend::GetInstance() -> nsZenBoostsBackend* { return sZenBoostsBackend.get(); } -auto nsZenBoostsBackend::onPresShellEntered(mozilla::dom::Document* aDocument) - -> void { - if (auto displayDoc = aDocument->GetDisplayDocument()) { - onPresShellEntered(displayDoc); - return; +[[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( + nscolor aColor, const nsIFrame* aFrame) -> nscolor { + if (NS_GET_A(aColor) == 0) { + // Skip processing fully transparent colors since they won't be visible and + // we want to avoid unnecessary computations. This also prevents issues with + // using the alpha channel for contrast information in the accent color. + return aColor; } - // Note that aDocument can be null when entering anonymous content frames. - // We explicitly do this to prevent applying boosts to anonymous content, such - // as devtools or screenshots. - mozilla::dom::BrowsingContext* browsingContext = - aDocument ? aDocument->GetBrowsingContext() : nullptr; - if (!browsingContext) { - return; + // Boosts are only supported in content; GetInstance() is null in the parent + // process, which keeps the browser chrome from being tinted. + if (!GetInstance() || IsBoostExemptFrame(aFrame)) { + return aColor; } - mCurrentBrowsingContext = browsingContext; - RefreshCachedBoostState(); -} - -auto nsZenBoostsBackend::RefreshCachedBoostState() -> void { - if (!mCurrentBrowsingContext) { - mCachedCurrentAccent = 0; - mCachedCurrentComplementaryRotation = 0.0f; - mCachedCurrentInverted = false; - return; - } - auto top = mCurrentBrowsingContext->Top(); - mCachedCurrentAccent = top->ZenBoostsData(); - mCachedCurrentComplementaryRotation = top->ZenBoostsComplementaryRotation(); - mCachedCurrentInverted = top->IsZenBoostsInverted(); -} - -[[nodiscard]] ZEN_HOT_FUNCTION auto -nsZenBoostsBackend::FilterColorFromPresContext(nscolor aColor, - nsPresContext* aPresContext) - -> nscolor { ZenBoostData accentNS = 0; float complementaryRotation = 0.0f; bool invertColors = false; - GetZenBoostsDataFromBrowsingContext(&accentNS, &complementaryRotation, - &invertColors, aPresContext); + GetZenBoostsDataForFrame(aFrame, &accentNS, &complementaryRotation, + &invertColors); if (accentNS) { - if (mCachedAccent.accentNS != accentNS) { - mCachedAccent = zenPrecomputeAccent(accentNS); - // Trigger a recompute of the complementary accent since - // it depends on the base accent. - mCachedComplementary.accentNS = 0; - } - // Derive the complementary accent by rotating the base accent's hue by the - // boost's complementary rotation. Cached so the per-color hot path only - // recomputes it when the base accent or rotation changes. - if (mCachedComplementary.accentNS != accentNS || - mCachedComplementaryRotationDeg != complementaryRotation) { - mCachedComplementary = - zenRotateAccent(mCachedAccent, complementaryRotation); - mCachedComplementaryRotationDeg = complementaryRotation; - } - // Apply a filter-like tint: + // Resolve (and cache) the base + complementary accent for this accent and + // complementary rotation. Apply a filter-like tint: // - Preserve the original color's perceived luminance // - Map hue/chroma toward the base or complementary accent depending on // the original color's lightness // - Keep the original alpha - aColor = zenFilterColorChannel(aColor, mCachedAccent, mCachedComplementary); + const AccentCacheEntry& cached = + GetCachedAccent(accentNS, complementaryRotation); + aColor = zenFilterColorChannel(aColor, cached.accent, cached.complementary); } if (invertColors) { aColor = zenInvertColorChannel(aColor); @@ -431,21 +526,4 @@ nsZenBoostsBackend::FilterColorFromPresContext(nscolor aColor, return aColor; } -[[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( - mozilla::StyleAbsoluteColor aColor) -> mozilla::StyleAbsoluteColor { - const auto resultColor = FilterColorFromPresContext(aColor.ToColor()); - return mozilla::StyleAbsoluteColor::FromColor(resultColor); -} - -[[nodiscard]] ZEN_HOT_FUNCTION auto nsZenBoostsBackend::ResolveStyleColor( - nscolor aColor) -> nscolor { - if (NS_GET_A(aColor) == 0) { - // Skip processing fully transparent colors since they won't be visible and - // we want to avoid unnecessary computations. This also prevents issues with - // using the alpha channel for contrast information in the accent color. - return aColor; - } - return FilterColorFromPresContext(aColor); -} - } // namespace zen diff --git a/src/zen/boosts/nsZenBoostsBackend.h b/src/zen/boosts/nsZenBoostsBackend.h index 67f3af6e8..1d2073372 100644 --- a/src/zen/boosts/nsZenBoostsBackend.h +++ b/src/zen/boosts/nsZenBoostsBackend.h @@ -9,7 +9,11 @@ #include "nsISupportsImpl.h" #include "nsPresContext.h" -#include "mozilla/RefPtr.h" +class nsIFrame; + +namespace mozilla::dom { +class BrowsingContext; +} #define ZEN_BOOSTS_BACKEND_CONTRACTID "@mozilla.org/zen/boosts-backend;1" @@ -23,6 +27,19 @@ struct nsZenAccentOklab { float contrastFactor; }; +namespace detail { +// Pure color-math primitives, exposed for unit testing. These have no +// dependency on the singleton, the BrowsingContext, or the process type, so +// they can be exercised directly from gtest. +nsZenAccentOklab PrecomputeAccent(nscolor aAccentColor); +nsZenAccentOklab RotateAccent(const nsZenAccentOklab& aBase, + float aRotationDeg); +nscolor FilterColorChannel(nscolor aOriginalColor, + const nsZenAccentOklab& aAccent, + const nsZenAccentOklab& aComplementary); +nscolor InvertColorChannel(nscolor aColor); +} // namespace detail + class nsZenBoostsBackend final : public nsISupports { public: NS_DECL_ISUPPORTS @@ -30,81 +47,28 @@ class nsZenBoostsBackend final : public nsISupports { explicit nsZenBoostsBackend() = default; /** - * Indicates whether the current frame being rendered is for anonymous - * content. - */ - bool mCurrentFrameIsAnonymousContent = false; - - /** - * @brief Resolve a StyleAbsoluteColor to take into account Zen boosts. + * @brief Resolve a color to take into account Zen boosts. This is the single + * place style colors are filtered; it is reached for every style color via + * StyleAbsoluteColor::ToColor. Do not add a second StyleColor::ResolveColor + * filter on top of this or colors get filtered multiple times (which also + * makes resting colors disagree with composited transition endpoints). + * + * The boost state is derived from the frame the color is being resolved for: + * its document's top BrowsingContext carries the accent/inversion data. When + * @p aFrame is null, or belongs to anonymous content (devtools, screenshots, + * the boosts overlays themselves), the color is returned unfiltered. * @param aColor The color to resolve. + * @param aFrame The frame the color is being resolved for, or null. * @return The resolved color with Zen boost filters applied, or the original * color if no boost is active. - * @see StyleColor::ResolveColor for reference. + * @see StyleAbsoluteColor::ToColor for reference. */ - static auto ResolveStyleColor(mozilla::StyleAbsoluteColor aColor) - -> mozilla::StyleAbsoluteColor; - - /** - * @see ResolveStyleColor for reference. - */ - static auto ResolveStyleColor(nscolor aColor) -> nscolor; - - /** - * @brief Filter a color based on the current Zen boost settings. - * @param aColor The color to filter. - * @param aPresContext The presentation context to use for filtering. - * @return The filtered color. - */ - static auto FilterColorFromPresContext(nscolor aColor, - nsPresContext* aPresContext = nullptr) + static auto ResolveStyleColor(nscolor aColor, const nsIFrame* aFrame) -> nscolor; - /** - * @brief Called when a presshell is entered during rendering. - * @param aDocument The document associated with the presshell being entered. - */ - auto onPresShellEntered(mozilla::dom::Document* aDocument) -> void; - - /** - * @brief Refresh the cached boost state from the current top BrowsingContext. - * Called from onPresShellEntered and from BrowsingContext::DidSet hooks when - * the underlying boost fields change. - */ - auto RefreshCachedBoostState() -> void; - - [[nodiscard]] - inline auto GetCurrentBrowsingContext() const { - return mCurrentBrowsingContext; - } - - /** - * Cached boost data for the current top BrowsingContext, refreshed on - * presshell entry and on DidSet hooks. Read by the per-color hot path so - * that boost-off pages don't pay for a BrowsingContext walk on every color - * resolve. - */ - ZenBoostData mCachedCurrentAccent = 0; - // Hue rotation in degrees applied to the base accent to derive the - // complementary accent. Zero means the complementary accent equals the base - // accent (the duotone collapses to a single-accent tint). - float mCachedCurrentComplementaryRotation = 0.0f; - bool mCachedCurrentInverted = false; - private: ~nsZenBoostsBackend() = default; - /** - * The presshell of the current document being rendered. - */ - RefPtr mCurrentBrowsingContext; - - static nsZenAccentOklab mCachedAccent; - // Base accent with its Oklab hue rotated by mCachedComplementaryRotationDeg, - // recomputed only when the base accent or rotation changes. - static nsZenAccentOklab mCachedComplementary; - static float mCachedComplementaryRotationDeg; - public: /** * @brief Get the singleton instance of the ZenBoostsBackend. diff --git a/src/zen/boosts/zen-boost-editor.inc.xhtml b/src/zen/boosts/zen-boost-editor.inc.xhtml index 508dc9c42..15c75f57c 100644 --- a/src/zen/boosts/zen-boost-editor.inc.xhtml +++ b/src/zen/boosts/zen-boost-editor.inc.xhtml @@ -132,18 +132,18 @@ - - - - - - - - - - - + + + + + + + + + + + .toolbarbutton-text, -.subviewbutton:not(#appMenu-zoom-controls > .subviewbutton) > .toolbarbutton-icon + .toolbarbutton-text, -#appMenu-fxa-label2 > vbox { +.subviewbutton:not(#appMenu-zoom-controls > .subviewbutton) > .toolbarbutton-icon + .toolbarbutton-text { padding-inline-start: var(--uc-arrowpanel-menuicon-margin-inline); } @@ -88,17 +86,6 @@ panel { white-space: nowrap; } -/* Firefox profile avatar in appmenu */ -#appMenu-fxa-label2::before { - content: ""; - display: -moz-box; - height: var(--size-item-small); - width: var(--size-item-small); - background: var(--avatar-image-url) 0/16px; - scale: 1.25; - border-radius: 99px; -} - /* disable proton account separator */ #appMenu-fxa-separator { border-image: none; @@ -108,10 +95,6 @@ panel { padding-block: 0; } -#appMenu-fxa-status2:not([fxastatus]) > #appMenu-fxa-label2 { - margin-inline-end: calc(var(--arrowpanel-menuitem-padding-inline) * -1); -} - /* zoom controls */ #appMenu-zoom-controls { border-top: 1px solid var(--panel-separator-color); diff --git a/src/zen/common/styles/zen-theme.css b/src/zen/common/styles/zen-theme.css index 1c6571ab3..815dd2a34 100644 --- a/src/zen/common/styles/zen-theme.css +++ b/src/zen/common/styles/zen-theme.css @@ -167,7 +167,7 @@ --toolbarbutton-hover-background: var(--zen-toolbar-element-bg-hover) !important; --zen-toolbar-button-size: 16px; @media (-moz-platform: macos) { - --zen-toolbar-button-size: 18px; + --zen-toolbar-button-size: 17px; } /* Using a semitransparent background preserves the tinting from the backdrop. diff --git a/src/zen/common/sys/ZenActorsManager.sys.mjs b/src/zen/common/sys/ZenActorsManager.sys.mjs index 766193ad3..759167674 100644 --- a/src/zen/common/sys/ZenActorsManager.sys.mjs +++ b/src/zen/common/sys/ZenActorsManager.sys.mjs @@ -67,8 +67,9 @@ if (!Services.appinfo.inSafeMode) { child: { esModuleURI: "resource:///actors/ZenBoostsChild.sys.mjs", events: { + // Needed to let the actor be created, please don't remove + // without checking if boosts still work without it, thanks <3 DOMWindowCreated: {}, - unload: {}, }, }, allFrames: true, diff --git a/src/zen/common/zenThemeModifier.js b/src/zen/common/zenThemeModifier.js index 31449efaa..30f2a42ce 100644 --- a/src/zen/common/zenThemeModifier.js +++ b/src/zen/common/zenThemeModifier.js @@ -169,7 +169,15 @@ } else { document.documentElement.removeAttribute("zen-no-padding"); if (domFullscreen) { - window.windowUtils.flushLayoutWithoutThrottledAnimations(); + const selectedBrowser = gBrowser.selectedBrowser; + selectedBrowser.style.paddingRight = "0.5px"; + window.addEventListener( + "MozAfterPaint", + () => { + selectedBrowser.style.paddingRight = ""; + }, + { once: true } + ); } } }, diff --git a/src/zen/compact-mode/ZenCompactMode.mjs b/src/zen/compact-mode/ZenCompactMode.mjs index a4b046bf2..a29d6dd13 100644 --- a/src/zen/compact-mode/ZenCompactMode.mjs +++ b/src/zen/compact-mode/ZenCompactMode.mjs @@ -724,6 +724,7 @@ window.gZenCompactModeManager = { } else { if (attr === "zen-has-hover") { element.removeAttribute("zen-has-implicit-hover"); + gURLBar.updateTextOverflow(); } element.removeAttribute(attr); // Only remove if none of the verified attributes are present diff --git a/src/zen/drag-and-drop/ZenDragAndDrop.js b/src/zen/drag-and-drop/ZenDragAndDrop.js index 360e8f75f..0c9d9d427 100644 --- a/src/zen/drag-and-drop/ZenDragAndDrop.js +++ b/src/zen/drag-and-drop/ZenDragAndDrop.js @@ -725,7 +725,7 @@ .changeWorkspaceShortcut( isNearLeftEdge ? -1 : 1, false, - /* Disable wrapping */ true + /* Disable wrapping */ false ) .then(spaceChanged => { this.#onSpaceChanged(spaceChanged, dt); diff --git a/src/zen/folders/ZenFolders.mjs b/src/zen/folders/ZenFolders.mjs index bce1923a4..3267d579f 100644 --- a/src/zen/folders/ZenFolders.mjs +++ b/src/zen/folders/ZenFolders.mjs @@ -1566,7 +1566,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const tabsContainer = group.groupContainer; tabsContainer.removeAttribute("hidden"); - tabsContainer.style.overflow = "hidden"; + tabsContainer.style.overflowY = "hidden"; const groupStart = group.groupStartElement; const itemsToShow = this.#normalizeGroupItems(group.childGroupsAndTabs); @@ -1615,7 +1615,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { } const afterMarginTop = () => { - tabsContainer.style.overflow = ""; + tabsContainer.style.overflowY = ""; if (group.hasAttribute("has-active")) { const activeTabs = group.activeTabs; const folders = new Map(); @@ -1859,14 +1859,14 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const tabsContainer = currentGroup.groupContainer; const groupStart = currentGroup.groupStartElement; - tabsContainer.style.overflow = "clip"; + tabsContainer.style.overflowY = "clip"; if (tabsContainer.hasAttribute("hidden")) { tabsContainer.removeAttribute("hidden"); } const afterMarginTop = () => { - tabsContainer.style.overflow = ""; + tabsContainer.style.overflowY = ""; }; animations.push( @@ -1972,7 +1972,7 @@ class nsZenFolders extends nsZenDOMOperatedFeature { const heightContainer = expand ? 0 : this.#calculateHeightShift(tabsContainer, []); - tabsContainer.style.overflow = "clip"; + tabsContainer.style.overflowY = "clip"; this.#createAnimation( groupStart, diff --git a/src/zen/glance/ZenGlanceManager.mjs b/src/zen/glance/ZenGlanceManager.mjs index e2d83eb74..2eba42111 100644 --- a/src/zen/glance/ZenGlanceManager.mjs +++ b/src/zen/glance/ZenGlanceManager.mjs @@ -35,7 +35,7 @@ class nsZenGlanceManager extends nsZenDOMOperatedFeature { // Arc animation configuration #ARC_CONFIG = Object.freeze({ ARC_STEPS: 80, // Browser interpolates between keyframes natively - MAX_ARC_HEIGHT: 25, + MAX_ARC_HEIGHT: 20, ARC_HEIGHT_RATIO: 0.2, // Arc height = distance * ratio (capped at MAX_ARC_HEIGHT) }); diff --git a/src/zen/kbs/ZenKeyboardShortcuts.mjs b/src/zen/kbs/ZenKeyboardShortcuts.mjs index c7cadbbbc..b13ec6447 100644 --- a/src/zen/kbs/ZenKeyboardShortcuts.mjs +++ b/src/zen/kbs/ZenKeyboardShortcuts.mjs @@ -32,7 +32,6 @@ const KEYCODE_MAP = { TAB: "VK_TAB", ENTER: "VK_RETURN", ESCAPE: "VK_ESCAPE", - SPACE: "VK_SPACE", ARROWLEFT: "VK_LEFT", ARROWRIGHT: "VK_RIGHT", ARROWUP: "VK_UP", @@ -44,6 +43,10 @@ const KEYCODE_MAP = { SCROLL_LOCK: "VK_SCROLL", }; +const REVERSE_KEYCODE_MAP = Object.fromEntries( + Object.entries(KEYCODE_MAP).map(([k, v]) => [v, k]) +); + const defaultKeyboardGroups = { windowAndTabManagement: [ "zen-window-new-shortcut", @@ -430,11 +433,14 @@ class KeyShortcut { if (this.#keycode) { key.setAttribute("keycode", this.#keycode); key.removeAttribute("key"); - } else { + } else if (this.#key) { // note to "mr. macos": Better use setAttribute, because without it, there's a // risk of malforming the XUL element. key.setAttribute("key", this.#key); key.removeAttribute("keycode"); + } else { + key.removeAttribute("key"); + key.removeAttribute("keycode"); } key.setAttribute("group", this.#group); @@ -553,16 +559,21 @@ class KeyShortcut { }; } - toDisplayString() { - let str = this.#modifiers.toDisplayString(); - - if (this.#key) { - str += this.#key.toUpperCase(); - } else if (this.#keycode) { + static keyToDisplayString(key, keycode) { + let str = ""; + if (key) { + switch (key) { + case " ": + str += AppConstants.platform == "macosx" ? "␣" : "Space"; + break; + default: + str += key.toUpperCase(); + } + } else if (keycode) { // Get the key from the value - for (let [key, value] of Object.entries(KEYCODE_MAP)) { - if (value == this.#keycode) { - const normalizedKey = key.toLowerCase(); + for (let [k, value] of Object.entries(KEYCODE_MAP)) { + if (value == keycode) { + const normalizedKey = k.toLowerCase(); switch (normalizedKey) { case "arrowleft": str += "←"; @@ -582,18 +593,23 @@ class KeyShortcut { case "enter": str += AppConstants.platform == "macosx" ? "↩" : "Enter"; break; - case "space": - str += AppConstants.platform == "macosx" ? "␣" : "Space"; - break; default: str += normalizedKey; } break; } } - } else { + } + return str; + } + + toDisplayString() { + if (!this.#key && !this.#keycode) { return ""; } + + let str = this.#modifiers.toDisplayString(); + str += KeyShortcut.keyToDisplayString(this.#key, this.#keycode); return str; } @@ -832,7 +848,7 @@ class nsZenKeyboardShortcutsLoader { } class nsZenKeyboardShortcutsVersioner { - static LATEST_KBS_VERSION = 18; + static LATEST_KBS_VERSION = 19; constructor() {} @@ -1228,6 +1244,18 @@ class nsZenKeyboardShortcutsVersioner { ); } + if (version < 19) { + // Migrate from version 18 to 19. + // Disable "key_duplicateTab" since we already had "cmd_zenDuplicateTab" before Firefox 151. + for (let shortcut of data) { + if (shortcut.getID() == "key_duplicateTab") { + shortcut.shouldBeEmpty = true; + shortcut.setDisabled(true); + break; + } + } + } + return data; } } @@ -1500,9 +1528,11 @@ window.gZenKeyboardShortcutsManager = { continue; } + const keyNameOrCode = targetShortcut.getKeyNameOrCode(); + const key = REVERSE_KEYCODE_MAP[keyNameOrCode] ?? keyNameOrCode; if ( targetShortcut.getModifiers().equals(modifiers) && - targetShortcut.getKeyNameOrCode()?.toLowerCase() == realShortcut + key?.toLowerCase() == realShortcut ) { return { hasConflicts: true, @@ -1541,4 +1571,22 @@ window.gZenKeyboardShortcutsManager = { } return null; }, + + getKeyDisplay(shortcut) { + if (shortcut == "") { + return ""; + } + + let key = shortcut; + let keycode = ""; + for (let kc of Object.keys(KEYCODE_MAP)) { + if (kc == shortcut.toUpperCase()) { + keycode = KEYCODE_MAP[kc]; + key = ""; + break; + } + } + + return KeyShortcut.keyToDisplayString(key, keycode); + }, }; diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index a8b0f69a1..12993d74b 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -1534,7 +1534,14 @@ class nsZenWindowSync { window.removeEventListener(eventName, this); } delete window.gZenWindowSync; - this.#moveAllActiveTabsToOtherWindowsForClose(window); + const { promise, resolve } = Promise.withResolvers(); + this.#docShellSwitchPromise = promise; + try { + this.#moveAllActiveTabsToOtherWindowsForClose(window); + } catch (e) { + console.error(`Error moving active tabs to other windows on close:`, e); + } + resolve(); } on_WindowCloseAndBrowserFlushed(aBrowsers) { @@ -1657,7 +1664,9 @@ class nsZenWindowSync { this.#runOnAllWindows(window, win => { const targetTab = this.getItemFromWindow(win, tab.id); if (targetTab && win.gZenViewSplitter) { - win.gZenViewSplitter.removeTabFromGroup(targetTab); + win.gZenViewSplitter.removeTabFromGroup(targetTab, undefined, { + changeTab: false, + }); } }); } diff --git a/src/zen/spaces/ZenSpaceCreation.mjs b/src/zen/spaces/ZenSpaceCreation.mjs index 26690eabf..330ca9e02 100644 --- a/src/zen/spaces/ZenSpaceCreation.mjs +++ b/src/zen/spaces/ZenSpaceCreation.mjs @@ -219,7 +219,7 @@ class nsZenWorkspaceCreation extends MozXULElement { document.getElementById("nav-bar").style.visibility = "collapse"; } this.style.visibility = "visible"; - gZenCompactModeManager.getAndApplySidebarWidth(); + gZenCompactModeManager.getAndApplySidebarWidth({}); this.resolveInitialized(); let animation = gZenUIManager.motion.animate( this.elementsToAnimate, @@ -261,6 +261,7 @@ class nsZenWorkspaceCreation extends MozXULElement { } async onCancelButtonCommand() { + document.documentElement.removeAttribute("zen-creating-workspace"); await gZenWorkspaces.changeWorkspaceWithID(this.previousWorkspaceId); } diff --git a/src/zen/spaces/ZenSpaceManager.mjs b/src/zen/spaces/ZenSpaceManager.mjs index 725d652bb..36ca9c50e 100644 --- a/src/zen/spaces/ZenSpaceManager.mjs +++ b/src/zen/spaces/ZenSpaceManager.mjs @@ -926,11 +926,7 @@ class nsZenWorkspaces { if (gZenUIManager.testingEnabled || !this.workspaceEnabled) { return; } - // note: We cant access `gZenVerticalTabsManager._canReplaceNewTab` this early - if ( - isEmpty && - Services.prefs.getBoolPref("zen.urlbar.replace-newtab", true) - ) { + if (isEmpty) { tab._markedForReplacement = true; this._tabToRemoveForEmpty = tab; } else { @@ -1741,13 +1737,26 @@ class nsZenWorkspaces { const otherContainersEssentials = document.querySelectorAll( `#zen-essentials .zen-workspace-tabs-section` ); + let nextSpaceIdx; + const spaceLen = workspaces.length; + if (offsetPixels > 0) { + nextSpaceIdx = (workspaceIndex - 1 + spaceLen) % spaceLen; + } else if (offsetPixels < 0) { + nextSpaceIdx = (workspaceIndex + 1) % spaceLen; + } else { + nextSpaceIdx = workspaceIndex; + } const workspaceContextId = workspace.containerTabId; - const nextWorkspaceContextId = - workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]?.containerTabId; + const nextWorkspaceContextId = workspaces[nextSpaceIdx]?.containerTabId; for (const otherWorkspace of workspaces) { const element = this.workspaceElement(otherWorkspace.uuid); - const newTransform = - -(workspaceIndex - workspaces.indexOf(otherWorkspace)) * 100; + let diff = workspaces.indexOf(otherWorkspace) - workspaceIndex; + if (diff > Math.floor(spaceLen / 2)) { + diff -= spaceLen; + } else if (diff < -Math.floor(spaceLen / 2)) { + diff += spaceLen; + } + const newTransform = diff * 100; element.style.transform = `translateX(${newTransform + offsetPixels / 2}%)`; } // Hide other essentials with different containerTabId @@ -1781,8 +1790,7 @@ class nsZenWorkspaces { } if (offsetPixels) { // Find the next workspace we are scrolling to - const nextWorkspace = - workspaces[workspaceIndex + (offsetPixels > 0 ? -1 : 1)]; + const nextWorkspace = workspaces[nextSpaceIdx]; if (nextWorkspace) { const { gradient: nextGradient, @@ -1892,10 +1900,17 @@ class nsZenWorkspaces { this._animatingChange = true; const animations = []; const workspaces = this.getWorkspaces(); + const spaceLen = workspaces.length; const newWorkspaceIndex = workspaces.findIndex( w => w.uuid === newWorkspace.uuid ); - const isGoingLeft = newWorkspaceIndex <= previousWorkspaceIndex; + let diff = newWorkspaceIndex - previousWorkspaceIndex; + if (diff > Math.floor(spaceLen / 2)) { + diff -= spaceLen; + } else if (diff < -Math.floor(spaceLen / 2)) { + diff += spaceLen; + } + const isGoingLeft = diff < 0; const clonedEssentials = []; if (shouldAnimate && this.shouldAnimateEssentials && previousWorkspace) { for (const workspace of workspaces) { @@ -1974,19 +1989,23 @@ class nsZenWorkspaces { const elementWorkspaceIndex = workspaces.findIndex( w => w.uuid === elementWorkspaceId ); - const offset = -(newWorkspaceIndex - elementWorkspaceIndex) * 100; + let offset = elementWorkspaceIndex - newWorkspaceIndex; + if (offset > Math.floor(spaceLen / 2)) { + offset -= spaceLen; + } else if (offset < -Math.floor(spaceLen / 2)) { + offset += spaceLen; + } + offset = offset * 100; const newTransform = `translateX(${offset}%)`; // Only animate the workspace that is coming in, to avoid having multiple workspaces // animating off-screen at the same time which can cause performance issues. With an off // set of 1 or -1, so we animate the current workspace and the next one. - const goingLeft = newWorkspaceIndex < previousWorkspaceIndex; - const willBeVisible = - (goingLeft && - elementWorkspaceIndex >= newWorkspaceIndex && - elementWorkspaceIndex <= previousWorkspaceIndex) || - (!goingLeft && - elementWorkspaceIndex <= newWorkspaceIndex && - elementWorkspaceIndex >= previousWorkspaceIndex); + const totalDistance = Math.abs(diff); + const distanceToElement = isGoingLeft + ? (previousWorkspaceIndex - elementWorkspaceIndex + spaceLen) % spaceLen + : (elementWorkspaceIndex - previousWorkspaceIndex + spaceLen) % + spaceLen; + const willBeVisible = distanceToElement <= totalDistance; if (shouldAnimate) { if (!willBeVisible) { element.style.transform = newTransform; diff --git a/src/zen/spaces/zen-workspaces.css b/src/zen/spaces/zen-workspaces.css index 97c0d89be..f2260e55e 100644 --- a/src/zen/spaces/zen-workspaces.css +++ b/src/zen/spaces/zen-workspaces.css @@ -314,6 +314,8 @@ /* mark: workspace element */ zen-workspace { + --toolbar-color: var(--toolbox-textcolor) !important; + flex-direction: column; width: calc(100% + var(--zen-toolbox-padding) * 2); position: absolute; diff --git a/src/zen/split-view/ZenViewSplitter.mjs b/src/zen/split-view/ZenViewSplitter.mjs index 2dc68c03c..344938714 100644 --- a/src/zen/split-view/ZenViewSplitter.mjs +++ b/src/zen/split-view/ZenViewSplitter.mjs @@ -2294,7 +2294,7 @@ class nsZenViewSplitter extends nsZenDOMOperatedFeature { // Unsplit the tab and exit from the drag view this.dropZone?.removeAttribute("enabled"); this.disableTabRearrangeView(event); - this.removeTabFromSplit(browserContainer); + this.removeTabFromSplit(event, browserContainer); return true; } return false; diff --git a/src/zen/tabs/ZenPinnedTabManager.mjs b/src/zen/tabs/ZenPinnedTabManager.mjs index 7220fc911..4bed63447 100644 --- a/src/zen/tabs/ZenPinnedTabManager.mjs +++ b/src/zen/tabs/ZenPinnedTabManager.mjs @@ -702,6 +702,10 @@ class nsZenPinnedTabManager extends nsZenDOMOperatedFeature { } return tab; }); + if (!fromDifferentWindow) { + // See gh-13796 and gh-12156 + ownedTabs = ownedTabs.reverse(); + } movingTabs = [...ownedTabs]; if (fromDifferentWindow) { gBrowser.addRangeToMultiSelectedTabs( diff --git a/src/zen/tests/boosts/browser.toml b/src/zen/tests/boosts/browser.toml index c24f62f6a..9cacfe47f 100644 --- a/src/zen/tests/boosts/browser.toml +++ b/src/zen/tests/boosts/browser.toml @@ -8,5 +8,6 @@ support-files = [ ] ["browser_boost_selector_basic.js"] +["browser_boost_selector_escaping.js"] ["browser_boost_selector_invalid.js"] ["browser_boost_selector_nthchild.js"] diff --git a/src/zen/tests/boosts/browser_boost_selector_escaping.js b/src/zen/tests/boosts/browser_boost_selector_escaping.js new file mode 100644 index 000000000..5a3e299b6 --- /dev/null +++ b/src/zen/tests/boosts/browser_boost_selector_escaping.js @@ -0,0 +1,94 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Covers code paths the basic/invalid/nthchild tests don't: +// - getIdentification() running ids/classes through CSS.escape() +// - the ancestor-disambiguation while-loop in traverse(), which only runs +// when the exact path still matches more than one element. + +add_task(async function test_getSelectionPath_escapesSpecialChars() { + const doc = document.implementation.createHTMLDocument("TestEscape"); + + const container = doc.createElement("div"); + // Characters that are invalid in a CSS selector unless escaped. + container.id = "with.dot:and#hash"; + const target = doc.createElement("span"); + target.className = "foo:bar baz.qux"; + target.textContent = "target"; + container.appendChild(target); + doc.body.appendChild(container); + + const component = new SelectorComponent(doc, null, [], () => {}); + + const path = component.getSelectionPath(doc, 0, target); + ok(path, "A path should be generated for an element with special chars"); + + // The unescaped raw strings must not leak into the selector verbatim. + ok( + !path.includes("with.dot:and#hash"), + "Raw unescaped id must not appear in the selector" + ); + + // The generated selector must be valid and resolve back to the target. + let matched; + try { + matched = doc.querySelectorAll(path); + } catch (e) { + ok(false, `Generated selector should be parseable, got: ${e}`); + return; + } + ok( + Array.from(matched).includes(target), + "Escaped selector must still match the original element" + ); + Assert.equal( + matched.length, + 1, + "Selector should uniquely identify the element" + ); +}); + +add_task(async function test_getSelectionPath_disambiguatesAncestors() { + const doc = document.implementation.createHTMLDocument("TestAncestors"); + + // Two structurally identical subtrees. The leaf elements carry no id/class, + // so disambiguation must climb ancestors until the path is unique. The two + // wrappers differ only by id, forcing the ancestor-walk loop in traverse(). + const makeBranch = wrapperId => { + const wrapper = doc.createElement("section"); + wrapper.id = wrapperId; + const mid = doc.createElement("div"); + const leaf = doc.createElement("span"); + leaf.textContent = "leaf"; + mid.appendChild(leaf); + wrapper.appendChild(mid); + doc.body.appendChild(wrapper); + return leaf; + }; + + const leafA = makeBranch("branch-a"); + const leafB = makeBranch("branch-b"); + + const component = new SelectorComponent(doc, null, [], () => {}); + + for (const [leaf, label] of [ + [leafA, "branch-a"], + [leafB, "branch-b"], + ]) { + const path = component.getSelectionPath(doc, 0, leaf); + ok(path, `Path generated for the leaf under ${label}`); + + const matched = doc.querySelectorAll(path); + Assert.equal( + matched.length, + 1, + `Selector for the ${label} leaf must be unique despite an identical sibling subtree` + ); + ok( + matched[0] === leaf, + `Selector must resolve to the correct ${label} leaf, not the other branch` + ); + } +}); diff --git a/src/zen/urlbar/ZenUBGlobalActions.sys.mjs b/src/zen/urlbar/ZenUBGlobalActions.sys.mjs index 607b05ada..bfc789bb5 100644 --- a/src/zen/urlbar/ZenUBGlobalActions.sys.mjs +++ b/src/zen/urlbar/ZenUBGlobalActions.sys.mjs @@ -81,6 +81,49 @@ const globalActionsTemplate = [ return !tab.hasAttribute("zen-empty-tab") && tab.pinned; }, }, + { + label: "New Boost", + icon: "chrome://browser/skin/zen-icons/boost.svg", + isAvailable: window => { + if (!isNotEmptyTab(window)) { + return false; + } + + // Keep this action consistent with the rest of the Boosts UI. + if (!Services.prefs.getBoolPref("zen.boosts.enabled", false)) { + return false; + } + + const uri = window.gBrowser.currentURI; + return !!uri?.schemeIs && (uri.schemeIs("http") || uri.schemeIs("https")); + }, + command: window => { + const uri = window.gBrowser.currentURI; + if (!uri?.schemeIs || !(uri.schemeIs("http") || uri.schemeIs("https"))) { + return; + } + + let domain = ""; + try { + domain = uri.host; + } catch { + return; + } + + if (!domain) { + return; + } + + const { gZenBoostsManager } = ChromeUtils.importESModule( + "resource:///modules/zen/boosts/ZenBoostsManager.sys.mjs" + ); + const boost = gZenBoostsManager.createNewBoost(domain); + if (!boost) { + return; + } + gZenBoostsManager.openBoostWindow(window, boost, uri); + }, + }, { label: "Next Space", command: "cmd_zenWorkspaceForward", diff --git a/surfer.json b/surfer.json index a7e0075b5..a53e9df9a 100644 --- a/surfer.json +++ b/surfer.json @@ -5,8 +5,8 @@ "binaryName": "zen", "version": { "product": "firefox", - "version": "150.0.3", - "candidate": "151.0", + "version": "151.0.2", + "candidate": "151.0.2", "candidateBuild": 1 }, "buildOptions": { @@ -20,7 +20,7 @@ "brandShortName": "Zen", "brandFullName": "Zen Browser", "release": { - "displayVersion": "1.20b", + "displayVersion": "1.20.1b", "github": { "repo": "zen-browser/desktop" }, @@ -40,7 +40,7 @@ "brandShortName": "Twilight", "brandFullName": "Zen Twilight", "release": { - "displayVersion": "1.20t", + "displayVersion": "1.21t", "github": { "repo": "zen-browser/desktop" }