105 lines
3.4 KiB
JavaScript

(function () {
"use strict";
function AppendTitleField(text, event) {
if ((!event.altKey && !event.ctrlKey) || event.shiftKey) {
try {
var titleInput = document.getElementById("title");
if (event.shiftKey) titleInput.value = text;
else titleInput.value += text;
console.log("Appended title to title field: " + text);
} catch (err) {
console.error("Failed to append text to title field:", err);
}
}
var textArea = null;
var fileckUrl = null;
if (event.altKey) {
try {
const navElements = document.querySelectorAll("a");
for (const element of navElements) {
var ckUrl = decodeURI(element.href);
if (ckUrl.startsWith("file://")) {
fileckUrl = ckUrl;
ckUrl = ckUrl.replace("file:///", "");
ckUrl = ckUrl.replace("file://", "");
console.debug("Copping " + ckUrl + " to clipboard");
textArea = document.createElement("textarea");
textArea.value = ckUrl;
document.body.appendChild(textArea);
textArea.select();
break;
}
}
} catch (err) {
console.error("Failed to get file URL:", err);
}
} else if (event.ctrlKey) {
try {
console.debug("Copping " + text + " to clipboard");
textArea = document.createElement("textarea");
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
} catch (err) {
console.error("Failed to get title:", err);
}
}
if (textArea != null) {
try {
var successful = document.execCommand("copy");
var msg = successful ? "successful" : "unsuccessful";
console.log("Text copy " + msg + ":", textArea.value);
} catch (err) {
console.error("Failed to copy text to clipboard:", err);
}
document.body.removeChild(textArea);
try {
if (fileckUrl != null && event.ctrlKey) {
window.open(fileckUrl, "_blank");
console.log("Opening link " + fileckUrl);
}
} catch (err) {
console.error(
"Failed to open link '" + fileckUrl + "' with error:",
err
);
}
}
}
function wrapElement(element) {
var text = element.textContent.trim();
var anchor = document.createElement("a");
anchor.href = "#";
anchor.textContent = text;
anchor.classList.add("renamefile");
anchor.title =
"Click to append title to [Title] input field; OR ctrl-key & mouse click to copy title to clipboard; OR shift-key click to copy to [Title] input field; OR alt-key click to copy file URI to clipboard.";
anchor.addEventListener("click", function (event) {
event.preventDefault();
AppendTitleField(text, event);
});
element.innerHTML = "";
element.appendChild(anchor);
}
function handleMutations(mutationsList, observer) {
for (const mutation of mutationsList) {
for (const addedNode of mutation.addedNodes) {
if (
addedNode.nodeType === Node.ELEMENT_NODE &&
addedNode.querySelector(".scene-header div.TruncatedText")
) {
wrapElement(
addedNode.querySelector(".scene-header div.TruncatedText")
);
}
}
}
}
const observer = new MutationObserver(handleMutations);
observer.observe(document.body, { childList: true, subtree: true });
})();