diff options
Diffstat (limited to 'toolkit/components/aboutwindowsmessages/content/aboutWindowsMessages.js')
-rw-r--r-- | toolkit/components/aboutwindowsmessages/content/aboutWindowsMessages.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/toolkit/components/aboutwindowsmessages/content/aboutWindowsMessages.js b/toolkit/components/aboutwindowsmessages/content/aboutWindowsMessages.js new file mode 100644 index 0000000000..4aef3d0dd7 --- /dev/null +++ b/toolkit/components/aboutwindowsmessages/content/aboutWindowsMessages.js @@ -0,0 +1,70 @@ +/* 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"; + +let AboutWindowsMessages = null; + +function refreshMessages() { + let windowMessages = {}; + let windowTitles = {}; + AboutWindowsMessages.getMessages(window, windowMessages, windowTitles); + let windowsDiv = document.getElementById("windows-div"); + windowsDiv.innerHTML = ""; + const templateCard = document.querySelector("template[name=window-card]"); + for (let i = 0; i < windowTitles.value.length; ++i) { + let windowCard = templateCard.content + .cloneNode(true) + .querySelector("details"); + // open the current window by default + windowCard.open = i === 0; + let summary = windowCard.querySelector("summary"); + let titleSpan = summary.querySelector("h3.window-card-title"); + titleSpan.appendChild(document.createTextNode(windowTitles.value[i])); + titleSpan.classList.toggle("current-window", windowCard.open); + let copyButton = summary.querySelector("button"); + copyButton.addEventListener("click", async e => { + e.target.disabled = true; + await copyMessagesToClipboard(e); + e.target.disabled = false; + }); + let innerUl = document.createElement("ul"); + for (let j = 0; j < windowMessages.value[i].length; ++j) { + let innerLi = document.createElement("li"); + innerLi.className = "message"; + innerLi.innerText = windowMessages.value[i][j]; + innerUl.appendChild(innerLi); + } + windowCard.appendChild(innerUl); + windowsDiv.append(windowCard); + } +} + +async function copyMessagesToClipboard(event) { + const details = event.target.parentElement.parentElement; + // Avoid copying the window name as it is Category 3 data, + // and only useful for the user to identify which window + // is which. + const messagesText = + Array.from(details.querySelector("ul").children) + .map(li => li.innerText) + .join("\n") + "\n"; + + await navigator.clipboard.writeText(messagesText); +} + +function onLoad() { + refreshMessages(); +} + +try { + AboutWindowsMessages = Cc["@mozilla.org/about-windowsmessages;1"].getService( + Ci.nsIAboutWindowsMessages + ); + document.addEventListener("DOMContentLoaded", onLoad, { once: true }); +} catch (ex) { + // Do nothing if we fail to create a singleton instance, + // showing the default no-module message. + Cu.reportError(ex); +} |