70 lines
2.4 KiB
JavaScript
70 lines
2.4 KiB
JavaScript
/* 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.
|
|
console.error(ex);
|
|
}
|