--- a/toolkit/content/aboutTelemetry.js
+++ b/toolkit/content/aboutTelemetry.js
@@ -1,14 +1,15 @@
/* 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";
+ChromeUtils.import("resource://gre/modules/BrowserUtils.jsm");
ChromeUtils.import("resource://gre/modules/Services.jsm");
ChromeUtils.import("resource://gre/modules/TelemetryTimestamps.jsm");
ChromeUtils.import("resource://gre/modules/TelemetryController.jsm");
ChromeUtils.import("resource://gre/modules/TelemetryArchive.jsm");
ChromeUtils.import("resource://gre/modules/TelemetryUtils.jsm");
ChromeUtils.import("resource://gre/modules/Preferences.jsm");
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
@@ -214,30 +215,30 @@ var Settings = {
/**
* Updates the button & text at the top of the page to reflect Telemetry state.
*/
render() {
let settingsExplanation = document.getElementById("settings-explanation");
let uploadEnabled = this.getStatusStringForSetting(this.SETTINGS[0]);
let extendedEnabled = Services.telemetry.canRecordExtended;
let collectedData = bundle.GetStringFromName(extendedEnabled ? "prereleaseData" : "releaseData");
+ let explanation = bundle.GetStringFromName("settingsExplanation");
- let parameters = [
- collectedData,
- this.convertStringToLink(uploadEnabled),
- ];
- let explanation = bundle.formatStringFromName("settingsExplanation", parameters, 2);
+ let fragment = BrowserUtils.getLocalizedFragment(document, explanation, collectedData, this.convertStringToLink(uploadEnabled));
+ settingsExplanation.appendChild(fragment);
- // eslint-disable-next-line no-unsanitized/property
- settingsExplanation.innerHTML = explanation;
this.attachObservers();
},
convertStringToLink(string) {
- return "<a href=\"#\" class=\"change-data-choices-link\">" + string + "</a>";
+ let link = document.createElement("a");
+ link.setAttribute("href", "#");
+ link.setAttribute("class", "change-data-choices-link");
+ link.textContent = string;
+ return link;
},
};
var PingPicker = {
viewCurrentPingData: null,
_archivedPings: null,
TYPE_ALL: bundle.GetStringFromName("telemetryPingTypeAll"),
@@ -297,51 +298,54 @@ var PingPicker = {
},
onPingDisplayChanged() {
this.update();
},
render() {
let pings = bundle.GetStringFromName("pingExplanationLink");
- let pingLink = "<a href=\"https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/concepts/pings.html\">" + pings + "</a>";
+ let pingLink = document.createElement("a");
+ pingLink.setAttribute("href", "https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/concepts/pings.html");
+ pingLink.textContent = pings;
let pingName = this._getSelectedPingName();
+ let pingNameSpan = document.createElement("span");
+ pingNameSpan.setAttribute("class", "change-ping");
// Display the type and controls if the ping is not current
let pingDate = document.getElementById("ping-date");
let pingType = document.getElementById("ping-type");
let controls = document.getElementById("controls");
- let explanation;
+ let fragment;
if (!this.viewCurrentPingData) {
// Change sidebar heading text.
pingDate.textContent = pingName;
pingDate.setAttribute("title", pingName);
let pingTypeText = this._getSelectedPingType();
controls.classList.remove("hidden");
pingType.textContent = pingTypeText;
// Change home page text.
pingName = bundle.formatStringFromName("namedPing", [pingName, pingTypeText], 2);
- let pingNameHtml = "<span class=\"change-ping\">" + pingName + "</span>";
- let parameters = [pingLink, pingNameHtml, pingTypeText];
- explanation = bundle.formatStringFromName("pingDetails", parameters, 3);
+ pingNameSpan.textContent = pingName;
+ let explanation = bundle.GetStringFromName("pingDetails");
+ fragment = BrowserUtils.getLocalizedFragment(document, explanation, pingLink, pingNameSpan, pingTypeText);
} else {
// Change sidebar heading text.
controls.classList.add("hidden");
pingType.textContent = bundle.GetStringFromName("currentPingSidebar");
// Change home page text.
- let pingNameHtml = "<span class=\"change-ping\">" + pingName + "</span>";
- explanation = bundle.formatStringFromName("pingDetailsCurrent", [pingLink, pingNameHtml], 2);
+ pingNameSpan.textContent = pingName;
+ let explanation = bundle.GetStringFromName("pingDetailsCurrent");
+ fragment = BrowserUtils.getLocalizedFragment(document, explanation, pingLink, pingNameSpan);
}
let pingExplanation = document.getElementById("ping-explanation");
-
- // eslint-disable-next-line no-unsanitized/property
- pingExplanation.innerHTML = explanation;
+ pingExplanation.appendChild(fragment);
pingExplanation.querySelector(".change-ping").addEventListener("click", (ev) => {
document.getElementById("ping-picker").classList.remove("hidden");
ev.stopPropagation();
});
GenericSubsection.deleteAllSubSections();
},