Source code
Revision control
Copy as Markdown
Other Tools
/* 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
"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.
console.error(ex);
}