From 0855d540f3c84c10ff68ef9f84eba866e36df561 Mon Sep 17 00:00:00 2001 From: Erik Nordin Date: Thu, 11 Apr 2024 15:55:30 +0000 Subject: [PATCH] Bug 1890897 - Fix FullPagePanel lang-list initialization r=translations-reviewers,gregtatum Fixes an issue where the default "Choose a language" menu item was accidentally being removed from the FullPageTranslationsPanel menu lists. Differential Revision: https://phabricator.services.mozilla.com/D207218 --- .../translations/content/TranslationsPanelShared.sys.mjs | 14 ++++++++++---- ...rowser_translations_full_page_panel_unsupported_lang.js | 3 +++ browser/components/translations/tests/browser/head.js | 4 ++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/browser/components/translations/content/TranslationsPanelShared.sys.mjs b/browser/components/translations/content/TranslationsPanelShared.sys.mjs index 48ea69dc3837..e43a18687b85 100644 --- a/browser/components/translations/content/TranslationsPanelShared.sys.mjs +++ b/browser/components/translations/content/TranslationsPanelShared.sys.mjs @@ -114,8 +114,14 @@ export class TranslationsPanelShared { ); for (const popup of fromPopups) { - while (popup.firstChild) { - popup.firstChild.remove(); + // For the moment, the FullPageTranslationsPanel includes its own + // menu item for "Choose another language" as the first item in the list + // with an empty-string for its value. The SelectTranslationsPanel has + // only languages in its list with BCP-47 tags for values. As such, + // this loop works for both panels, to remove all of the languages + // from the list, but ensuring that any empty-string items are retained. + while (popup.lastChild?.value) { + popup.lastChild.remove(); } for (const { langTag, displayName } of fromLanguages) { const fromMenuItem = document.createXULElement("menuitem"); @@ -126,8 +132,8 @@ export class TranslationsPanelShared { } for (const popup of toPopups) { - while (popup.firstChild) { - popup.firstChild.remove(); + while (popup.lastChild?.value) { + popup.lastChild.remove(); } for (const { langTag, displayName } of toLanguages) { const toMenuItem = document.createXULElement("menuitem"); diff --git a/browser/components/translations/tests/browser/browser_translations_full_page_panel_unsupported_lang.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_unsupported_lang.js index 21f7e8fdb780..59be1e329b39 100644 --- a/browser/components/translations/tests/browser/browser_translations_full_page_panel_unsupported_lang.js +++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_unsupported_lang.js @@ -23,6 +23,9 @@ add_task(async function test_unsupported_lang() { }); await FullPageTranslationsTestUtils.clickChangeSourceLanguageButton(); + FullPageTranslationsTestUtils.assertPanelViewDefault(); + FullPageTranslationsTestUtils.assertSelectedFromLanguage({ langTag: "" }); + FullPageTranslationsTestUtils.assertSelectedToLanguage({ langTag: "en" }); await cleanup(); }); diff --git a/browser/components/translations/tests/browser/head.js b/browser/components/translations/tests/browser/head.js index ccc9ca54a3c5..81802b89ffa3 100644 --- a/browser/components/translations/tests/browser/head.js +++ b/browser/components/translations/tests/browser/head.js @@ -320,6 +320,10 @@ class SharedTranslationsTestUtils { * @param {string} [options.l10nId] - The localization Id to match. */ static _assertSelectedLanguage(menuList, { langTag, l10nId }) { + ok( + menuList.label, + `The label for the menulist ${menuList.id} should not be empty.` + ); if (langTag) { is( menuList.value, -- 2.11.4.GIT