Fix inconsistent MutationObserver

This commit is contained in:
Lucas Sköld
2025-09-16 14:38:52 +02:00
parent ca74e4ee7e
commit b00d5ff143
+25 -30
View File
@@ -304,11 +304,13 @@ async function addStarsToFavourited(
hoverTimer = setTimeout(() => {
const imageFileName = filename
.split(".")[0]
.replaceAll(/\(.*?\)/g, "")
.replaceAll(/\([^)]*\)/g, "")
.replaceAll(/[()]/g, "")
.trim()
.replaceAll(" ", "_")
.toLowerCase();
console.log("Looking for image:", imageFileName);
const imageData = previewImages.find(
(img) =>
img.filename
@@ -436,44 +438,37 @@ async function observeContextMenu(existingList) {
images = { images: [] };
}
const handleMutations = leadingEdgeDebounce(function (mutations) {
let isContextMenu = false;
mutations.forEach((mutation) => {
if (mutation.target.classList.contains("litecontextmenu")) {
isContextMenu = true;
}
});
const processedMenus = new Set();
let animationFrameId = null;
if (!isContextMenu) {
return;
}
const litecontextmenus =
document.getElementsByClassName("litecontextmenu");
if (litecontextmenus) {
Array.from(litecontextmenus).forEach((litecontextmenu) => {
const menuEntries =
litecontextmenu.querySelectorAll(".litemenu-entry");
const pollForMenus = () => {
const currentMenus = document.querySelectorAll(".litecontextmenu");
currentMenus.forEach((menu) => {
if (!processedMenus.has(menu)) {
processedMenus.add(menu);
const menuEntries = menu.querySelectorAll(".litemenu-entry");
addStarsToFavourited(
menuEntries,
existingList,
images.images,
settings
);
});
}
}, 50);
}
});
const observer = new MutationObserver(handleMutations);
animationFrameId = requestAnimationFrame(pollForMenus);
};
observer.observe(document, {
attributes: false,
childList: true,
characterData: false,
subtree: true,
});
return observer;
animationFrameId = requestAnimationFrame(pollForMenus);
return {
disconnect: () => {
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
animationFrameId = null;
}
processedMenus.clear();
},
};
}
async function addPreviewImage(entry, path, settings) {