diff --git a/toolkit/content/aboutTelemetry.css b/toolkit/content/aboutTelemetry.css index 6a8ed2e244ea..8b8c030b1078 100644 --- a/toolkit/content/aboutTelemetry.css +++ b/toolkit/content/aboutTelemetry.css @@ -35,9 +35,31 @@ body { } .heading { - padding-inline-start: 15px; - padding-inline-end: 21px; + display: flex; + flex-direction: column; + font-size: 18px; color: var(--in-content-category-text); + pointer-events: none; + padding: 12px 21px 15px 21px; + border-bottom: 1px solid var(--in-content-header-border-color); +} + +.heading > h3 { + margin: 0; + padding-bottom: 12px; +} + +#ping-type { + align-self: center; +} + +.older-ping, .newer-ping { + cursor: pointer; +} + +.controls { + display: flex; + justify-content: space-between; } .category:not(.has-data) { @@ -132,9 +154,14 @@ body { } #ping-picker { - margin-top: 10px; - border: 1px solid lightgrey; - padding: 5px; + display: flex; + flex-direction: column; + border-top: 1px solid var(--in-content-header-border-color); + padding: 12px 0px; +} + +#ping-picker .title { + margin: 4px 0px; } #ping-source-picker { diff --git a/toolkit/content/aboutTelemetry.js b/toolkit/content/aboutTelemetry.js index 21cca5ceedef..ad2d73f7b567 100644 --- a/toolkit/content/aboutTelemetry.js +++ b/toolkit/content/aboutTelemetry.js @@ -280,10 +280,11 @@ var Settings = { var PingPicker = { viewCurrentPingData: null, _archivedPings: null, + TYPE_ALL: bundle.GetStringFromName("telemetryPingTypeAll"), attachObservers() { - let elements = document.getElementsByName("choose-ping-source"); - for (let el of elements) { + let pingSourceElements = document.getElementsByName("choose-ping-source"); + for (let el of pingSourceElements) { el.addEventListener("change", () => this.onPingSourceChanged()); } @@ -301,7 +302,10 @@ var PingPicker = { this._updateArchivedPingData(); }); document.getElementById("choose-ping-id").addEventListener("change", () => { - this._updateArchivedPingData() + this._updateArchivedPingData(); + }); + document.getElementById("choose-ping-type").addEventListener("change", () => { + this.filterDisplayedPings(); }); document.getElementById("newer-ping") @@ -333,13 +337,37 @@ var PingPicker = { render() { let pings = bundle.GetStringFromName("pingExplanationLink"); let pingLink = """ + pings + """; - let pingName = "" + this._getSelectedPingName() + ""; + let pingName = this._getSelectedPingName(); - let explanation = bundle.formatStringFromName("pingExplanation", [pingLink, pingName], 2); + let pingDate = document.getElementById("ping-date"); + pingDate.textContent = pingName; + pingDate.setAttribute("title", pingName); + + let pingType = document.getElementById("ping-type"); + let older = document.getElementById("older-ping"); + let newer = document.getElementById("newer-ping"); + if (pingName !== "current") { + pingType.hidden = false; + older.hidden = false; + newer.hidden = false; + pingType.textContent = this._getSelectedPingType(); + } else { + pingType.hidden = true; + older.hidden = true; + newer.hidden = true; + } + + if (pingName !== "current") { + pingName += ", " + this._getSelectedPingType(); + } + let pingNameHtml = "" + pingName + ""; + + let explanation = bundle.formatStringFromName("pingExplanation", [pingLink, pingNameHtml], 2); let pingExplanation = document.getElementById("ping-explanation"); // eslint-disable-next-line no-unsanitized/property pingExplanation.innerHTML = explanation; + GenericSubsection.deleteAllSubSections(); }, @@ -451,21 +479,56 @@ var PingPicker = { (p) => p.timestampCreated >= weekRange.startDate.getTime() && p.timestampCreated < weekRange.endDate.getTime()); + let pingTypes = new Set(); + pingTypes.add(this.TYPE_ALL); for (let p of pings) { + pingTypes.add(p.type); let date = new Date(p.timestampCreated); let text = shortDateString(date) - + " " + shortTimeString(date) - + " - " + p.type; + + " " + shortTimeString(date); let option = document.createElement("option"); let content = document.createTextNode(text); option.appendChild(content); option.setAttribute("value", p.id); + option.dataset.type = p.type; if (id && p.id == id) { option.selected = true; } pingSelector.appendChild(option); } + this._renderPingTypes(pingTypes); + }, + + filterDisplayedPings() { + let pingSelector = document.getElementById("choose-ping-id"); + let typeSelector = document.getElementById("choose-ping-type"); + let type = typeSelector.selectedOptions.item(0).value; + if (type == this.TYPE_ALL) { + Array.from(pingSelector.children).forEach((option) => option.hidden = false); + pingSelector.children[0].selected = true; + } else { + let first = true; + Array.from(pingSelector.children).forEach((option) => { + if (first && option.dataset.type == type) { + option.selected = true; + first = false; + } + option.hidden = option.dataset.type != type; + }); + } + this._updateArchivedPingData(); + }, + + _renderPingTypes(pingTypes) { + let pingTypeSelector = document.getElementById("choose-ping-type"); + removeAllChildNodes(pingTypeSelector); + pingTypes.forEach((type) => { + let option = document.createElement("option"); + option.appendChild(document.createTextNode(type)); + option.setAttribute("value", type); + pingTypeSelector.appendChild(option); + }); }, _getSelectedPingName() { @@ -476,6 +539,12 @@ var PingPicker = { return selected.textContent; }, + _getSelectedPingType() { + let pingSelector = document.getElementById("choose-ping-id"); + let selected = pingSelector.selectedOptions.item(0); + return selected.dataset.type; + }, + _getSelectedPingId() { let pingSelector = document.getElementById("choose-ping-id"); let selected = pingSelector.selectedOptions.item(0); @@ -483,6 +552,9 @@ var PingPicker = { }, _movePingIndex(offset) { + if (this.viewCurrentPingData) { + return; + } const id = this._getSelectedPingId(); const index = this._archivedPings.findIndex((p) => p.id == id); const newIndex = Math.min(Math.max(index + offset, 0), this._archivedPings.length - 1); diff --git a/toolkit/content/aboutTelemetry.xhtml b/toolkit/content/aboutTelemetry.xhtml index 93001895dc14..78b7f8e21a14 100644 --- a/toolkit/content/aboutTelemetry.xhtml +++ b/toolkit/content/aboutTelemetry.xhtml @@ -26,7 +26,12 @@
-

&aboutTelemetry.pageTitle;

+ +
+ + + +
Home @@ -101,47 +106,36 @@
- &aboutTelemetry.pingDataSource;
+

&aboutTelemetry.pingDataSource;

- &aboutTelemetry.showCurrentPingData;
+ &aboutTelemetry.showCurrentPingData; - &aboutTelemetry.showArchivedPingData;
+ &aboutTelemetry.showArchivedPingData;
&aboutTelemetry.showSubsessionData;
+
+

&aboutTelemetry.payloadChoiceHeader;

+
- - - - - - - -
&aboutTelemetry.payloadChoiceHeader;
- -
diff --git a/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd b/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd index da94ea5f13aa..9283435dbbdf 100644 --- a/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd +++ b/toolkit/locales/en-US/chrome/global/aboutTelemetry.dtd @@ -29,17 +29,21 @@ Choose ping: "> + + diff --git a/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties b/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties index afc29511fc18..c7abede03505 100644 --- a/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties +++ b/toolkit/locales/en-US/chrome/global/aboutTelemetry.properties @@ -23,6 +23,8 @@ telemetryEnabled = enabled telemetryDisabled = disabled +telemetryPingTypeAll = all + telemetryLogTitle = Telemetry Log telemetryLogHeadingId = Id