tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit ebefbf6207409975e6194f94a71e6b4781c296c2
parent 1156edd12a2293161db6e612509f07ba189f248f
Author: Erik Nordin <enordin@mozilla.com>
Date:   Thu, 18 Dec 2025 15:42:08 +0000

Bug 2002127 - Part 20: Restructure Translations Settings Subpage r=hjones

This commit restructures the elements of the Translations
Settings Subpage, so that each group is a proper setting-group
rather than a fieldset within the subpage. This was the original
intended pattern, but I got it wrong in the previous commits.

It's easier to fix it here rather than rebasing into this already
very large stack.

Differential Revision: https://phabricator.services.mozilla.com/D274832

Diffstat:
Mbrowser/components/preferences/main.js | 312++++++++++++++++++++++++++++++++-----------------------------------------------
Mbrowser/components/preferences/preferences.js | 5++++-
Mbrowser/components/preferences/translations.js | 12++++++++----
3 files changed, 138 insertions(+), 191 deletions(-)

diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js @@ -688,19 +688,6 @@ Preferences.addSetting({ Preferences.addSetting({ id: "translationsDownloadLanguagesSelect", - _value: "", - get() { - return this._value; - }, - set(val, _deps, setting) { - const newValue = val ?? ""; - if (this._value === newValue) { - return this._value; - } - this._value = newValue; - setting?.emit("change"); - return this._value; - }, }); Preferences.addSetting({ @@ -712,14 +699,6 @@ Preferences.addSetting({ }); Preferences.addSetting({ - id: "translationsDownloadLanguagesFieldset", -}); - -Preferences.addSetting({ - id: "translationsAutomaticTranslationFieldset", -}); - -Preferences.addSetting({ id: "translationsAlwaysTranslateLanguagesGroup", }); @@ -729,19 +708,6 @@ Preferences.addSetting({ Preferences.addSetting({ id: "translationsAlwaysTranslateLanguagesSelect", - _value: "", - get() { - return this._value; - }, - set(val, _deps, setting) { - const newValue = val ?? ""; - if (this._value === newValue) { - return this._value; - } - this._value = newValue; - setting?.emit("change"); - return this._value; - }, }); Preferences.addSetting({ @@ -770,19 +736,6 @@ Preferences.addSetting({ Preferences.addSetting({ id: "translationsNeverTranslateLanguagesSelect", - _value: "", - get() { - return this._value; - }, - set(val, _deps, setting) { - const newValue = val ?? ""; - if (this._value === newValue) { - return this._value; - } - this._value = newValue; - setting?.emit("change"); - return this._value; - }, }); Preferences.addSetting({ @@ -3844,207 +3797,194 @@ SettingGroupManager.registerGroups({ }, ], }, - moreTranslationSettings: { + translationsAutomaticTranslation: { inProgress: true, + headingLevel: 2, + l10nId: "settings-translations-subpage-automatic-translation-header", items: [ { - id: "translationsAutomaticTranslationFieldset", - l10nId: "settings-translations-subpage-automatic-translation-header", - control: "moz-fieldset", + id: "translationsAlwaysTranslateLanguagesGroup", + control: "moz-box-group", controlAttrs: { - headingLevel: 2, + type: "list", }, items: [ { - id: "translationsAlwaysTranslateLanguagesGroup", - control: "moz-box-group", + id: "translationsAlwaysTranslateLanguagesRow", + l10nId: "settings-translations-subpage-always-translate-header", + control: "moz-box-item", + slot: "header", controlAttrs: { - type: "list", + class: "box-header-bold", }, items: [ { - id: "translationsAlwaysTranslateLanguagesRow", - l10nId: "settings-translations-subpage-always-translate-header", - control: "moz-box-item", - slot: "header", - controlAttrs: { - style: - "--box-label-font-weight: var(--font-weight-semibold);", - }, - items: [ - { - id: "translationsAlwaysTranslateLanguagesSelect", - control: "moz-select", - options: [ - { - value: "", - l10nId: - "settings-translations-subpage-language-select-option", - }, - ], - }, + id: "translationsAlwaysTranslateLanguagesSelect", + slot: "actions", + control: "moz-select", + options: [ { - id: "translationsAlwaysTranslateLanguagesButton", - l10nId: "settings-translations-subpage-language-add-button", - control: "moz-button", - controlAttrs: { - slot: "actions", - type: "icon", - iconsrc: "chrome://global/skin/icons/plus.svg", - }, + value: "", + l10nId: + "settings-translations-subpage-language-select-option", }, ], }, { - id: "translationsAlwaysTranslateLanguagesNoneRow", - l10nId: "settings-translations-subpage-no-languages-added", - control: "moz-box-item", + id: "translationsAlwaysTranslateLanguagesButton", + l10nId: "settings-translations-subpage-language-add-button", + control: "moz-button", + slot: "actions", controlAttrs: { - class: "text-deemphasized", + type: "icon", + iconsrc: "chrome://global/skin/icons/plus.svg", }, }, ], }, { - id: "translationsNeverTranslateLanguagesGroup", - control: "moz-box-group", + id: "translationsAlwaysTranslateLanguagesNoneRow", + l10nId: "settings-translations-subpage-no-languages-added", + control: "moz-box-item", controlAttrs: { - type: "list", + class: "description-deemphasized", + }, + }, + ], + }, + { + id: "translationsNeverTranslateLanguagesGroup", + control: "moz-box-group", + controlAttrs: { + type: "list", + }, + items: [ + { + id: "translationsNeverTranslateLanguagesRow", + l10nId: "settings-translations-subpage-never-translate-header", + control: "moz-box-item", + slot: "header", + controlAttrs: { + class: "box-header-bold", }, items: [ { - id: "translationsNeverTranslateLanguagesRow", - l10nId: "settings-translations-subpage-never-translate-header", - control: "moz-box-item", - slot: "header", - controlAttrs: { - style: - "--box-label-font-weight: var(--font-weight-semibold);", - }, - items: [ - { - id: "translationsNeverTranslateLanguagesSelect", - control: "moz-select", - options: [ - { - value: "", - l10nId: - "settings-translations-subpage-language-select-option", - }, - ], - }, + id: "translationsNeverTranslateLanguagesSelect", + slot: "actions", + control: "moz-select", + options: [ { - id: "translationsNeverTranslateLanguagesButton", - l10nId: "settings-translations-subpage-language-add-button", - control: "moz-button", - controlAttrs: { - slot: "actions", - type: "icon", - iconsrc: "chrome://global/skin/icons/plus.svg", - }, + value: "", + l10nId: + "settings-translations-subpage-language-select-option", }, ], }, { - id: "translationsNeverTranslateLanguagesNoneRow", - l10nId: "settings-translations-subpage-no-languages-added", - control: "moz-box-item", + id: "translationsNeverTranslateLanguagesButton", + l10nId: "settings-translations-subpage-language-add-button", + control: "moz-button", + slot: "actions", controlAttrs: { - class: "text-deemphasized", + type: "icon", + iconsrc: "chrome://global/skin/icons/plus.svg", }, }, ], }, { - id: "translationsNeverTranslateSitesGroup", - control: "moz-box-group", + id: "translationsNeverTranslateLanguagesNoneRow", + l10nId: "settings-translations-subpage-no-languages-added", + control: "moz-box-item", controlAttrs: { - type: "list", + class: "description-deemphasized", }, - items: [ - { - id: "translationsNeverTranslateSitesRow", - l10nId: - "settings-translations-subpage-never-translate-sites-header", - control: "moz-box-item", - controlAttrs: { - style: - "--box-label-font-weight: var(--font-weight-semibold);", - ".description": createNeverTranslateSitesDescription(), - }, - }, - { - id: "translationsNeverTranslateSitesNoneRow", - l10nId: "settings-translations-subpage-no-sites-added", - control: "moz-box-item", - controlAttrs: { - class: "text-deemphasized", - }, - }, - ], }, ], }, { - id: "translationsDownloadLanguagesFieldset", - l10nId: "settings-translations-subpage-speed-up-translation-header", - control: "moz-fieldset", + id: "translationsNeverTranslateSitesGroup", + control: "moz-box-group", controlAttrs: { - headingLevel: 2, + type: "list", }, items: [ { - id: "translationsDownloadLanguagesGroup", - control: "moz-box-group", + id: "translationsNeverTranslateSitesRow", + l10nId: + "settings-translations-subpage-never-translate-sites-header", + control: "moz-box-item", + controlAttrs: { + class: "box-header-bold", + ".description": createNeverTranslateSitesDescription(), + }, + }, + { + id: "translationsNeverTranslateSitesNoneRow", + l10nId: "settings-translations-subpage-no-sites-added", + control: "moz-box-item", + controlAttrs: { + class: "description-deemphasized", + }, + }, + ], + }, + ], + }, + translationsDownloadLanguages: { + inProgress: true, + headingLevel: 2, + l10nId: "settings-translations-subpage-speed-up-translation-header", + items: [ + { + id: "translationsDownloadLanguagesGroup", + control: "moz-box-group", + controlAttrs: { + type: "list", + }, + items: [ + { + id: "translationsDownloadLanguagesRow", + l10nId: "settings-translations-subpage-download-languages-header", + control: "moz-box-item", + slot: "header", controlAttrs: { - type: "list", + class: "box-header-bold", }, items: [ { - id: "translationsDownloadLanguagesRow", - l10nId: - "settings-translations-subpage-download-languages-header", - control: "moz-box-item", - slot: "header", - controlAttrs: { - style: - "--box-label-font-weight: var(--font-weight-semibold);", - }, - items: [ - { - id: "translationsDownloadLanguagesSelect", - control: "moz-select", - options: [ - { - value: "", - l10nId: - "settings-translations-subpage-download-languages-select-option", - }, - ], - }, + id: "translationsDownloadLanguagesSelect", + slot: "actions", + control: "moz-select", + options: [ { - id: "translationsDownloadLanguagesButton", + value: "", l10nId: - "settings-translations-subpage-download-languages-button", - control: "moz-button", - controlAttrs: { - slot: "actions", - type: "icon", - iconsrc: "chrome://browser/skin/downloads/downloads.svg", - }, + "settings-translations-subpage-download-languages-select-option", }, ], }, { - id: "translationsDownloadLanguagesNoneRow", - l10nId: "settings-translations-subpage-no-languages-downloaded", - control: "moz-box-item", + id: "translationsDownloadLanguagesButton", + l10nId: + "settings-translations-subpage-download-languages-button", + control: "moz-button", + slot: "actions", controlAttrs: { - class: "text-deemphasized", + type: "icon", + iconsrc: "chrome://browser/skin/downloads/downloads.svg", }, }, ], }, + { + id: "translationsDownloadLanguagesNoneRow", + l10nId: "settings-translations-subpage-no-languages-downloaded", + control: "moz-box-item", + controlAttrs: { + class: "description-deemphasized", + }, + }, ], }, ], diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js @@ -298,7 +298,10 @@ const CONFIG_PANES = Object.freeze({ translations: { parent: "general", l10nId: "settings-translations-subpage-header", - groupIds: ["moreTranslationSettings"], + groupIds: [ + "translationsAutomaticTranslation", + "translationsDownloadLanguages", + ], iconSrc: "chrome://browser/skin/translations.svg", }, }); diff --git a/browser/components/preferences/translations.js b/browser/components/preferences/translations.js @@ -397,16 +397,20 @@ const TranslationsSettings = { const pane = /** @type {ElementWithUpdateComplete|null} */ ( document.querySelector('setting-pane[data-category="paneTranslations"]') ); - const group = /** @type {ElementWithUpdateComplete|null} */ ( - document.querySelector('setting-group[groupid="moreTranslationSettings"]') + const groups = Array.from( + document.querySelectorAll( + 'setting-group[groupid="translationsAutomaticTranslation"], setting-group[groupid="translationsDownloadLanguages"]' + ) ); const promises = []; if (pane?.getUpdateComplete) { promises.push(pane.getUpdateComplete()); } - if (group?.getUpdateComplete) { - promises.push(group.getUpdateComplete()); + for (const group of groups) { + if (group?.getUpdateComplete) { + promises.push(group.getUpdateComplete()); + } } if (promises.length) {