diff options
Diffstat (limited to 'browser/extensions/formautofill/content/l10n.js')
-rw-r--r-- | browser/extensions/formautofill/content/l10n.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/browser/extensions/formautofill/content/l10n.js b/browser/extensions/formautofill/content/l10n.js new file mode 100644 index 0000000000..85346d41ee --- /dev/null +++ b/browser/extensions/formautofill/content/l10n.js @@ -0,0 +1,61 @@ +/* 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/. */ + +"use strict"; + +/** + * This file will be replaced by Fluent but it's a middle ground so we can share + * the edit dialog code with the unprivileged PaymentRequest dialog before the + * Fluent conversion + */ + +const { FormAutofillUtils } = ChromeUtils.import( + "resource://formautofill/FormAutofillUtils.jsm" +); + +const CONTENT_WIN = typeof window != "undefined" ? window : this; + +const L10N_ATTRIBUTES = ["data-localization", "data-localization-region"]; + +// eslint-disable-next-line mozilla/balanced-listeners +CONTENT_WIN.addEventListener("DOMContentLoaded", function onDCL(evt) { + let doc = evt.target; + FormAutofillUtils.localizeMarkup(doc); + + let mutationObserver = new doc.ownerGlobal.MutationObserver( + function onMutation(mutations) { + for (let mutation of mutations) { + switch (mutation.type) { + case "attributes": { + if (!mutation.target.hasAttribute(mutation.attributeName)) { + // The attribute was removed in the meantime. + continue; + } + FormAutofillUtils.localizeAttributeForElement( + mutation.target, + mutation.attributeName + ); + break; + } + + case "childList": { + // We really only care about elements appending inside pages. + if (!mutation.addedNodes || !mutation.target.closest(".page")) { + break; + } + FormAutofillUtils.localizeMarkup(mutation.target); + break; + } + } + } + } + ); + + mutationObserver.observe(doc, { + attributes: true, + attributeFilter: L10N_ATTRIBUTES, + childList: true, + subtree: true, + }); +}); |