feat: add card layout tweak with unified post observer

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-26 21:14:06 -04:00
parent 95f0946e21
commit 5521e39a66
4 changed files with 132 additions and 52 deletions

View File

@@ -1,8 +1,6 @@
(function () {
"use strict";
let contentObserver = null;
let darkModeObserver = null;
let currentSettings = null;
function applyColorsToContainer(container, settings, subredditName) {
@@ -93,52 +91,6 @@
});
}
function getObserverTarget() {
return (
document.getElementById("siteTable") ||
document.querySelector('.content[role="main"]') ||
document.body
);
}
function startContentObserver(settings) {
if (contentObserver) contentObserver.disconnect();
const target = getObserverTarget();
contentObserver = new MutationObserver(function (mutations) {
let hasNewPosts = false;
for (const mutation of mutations) {
for (const node of mutation.addedNodes) {
if (node.nodeType === Node.ELEMENT_NODE) {
if (node.matches && node.matches("div.thing.link")) {
hasNewPosts = true;
} else if (node.querySelector && node.querySelector("div.thing.link")) {
hasNewPosts = true;
}
}
}
}
if (hasNewPosts) processPosts(currentSettings);
});
contentObserver.observe(target, { childList: true, subtree: true });
}
function startDarkModeObserver() {
if (darkModeObserver) darkModeObserver.disconnect();
darkModeObserver = new MutationObserver(function () {
if (currentSettings && currentSettings.darkMode === "auto") {
updateColors(currentSettings);
}
});
darkModeObserver.observe(document.body, {
attributes: true,
attributeFilter: ["class"],
});
}
function updateColors(settings) {
currentSettings = settings;
const containers = document.querySelectorAll(".reddit-tweaks-badges");
@@ -155,8 +107,6 @@
function apply(settings) {
currentSettings = settings;
processPosts(settings);
startContentObserver(settings);
startDarkModeObserver();
}
window.RedditTweaks = window.RedditTweaks || {};
@@ -165,5 +115,6 @@
updateColors: updateColors,
isDarkMode: window.RedditTweaks.isDarkMode,
getColorPrefix: window.RedditTweaks.getColorPrefix,
processNewPosts: processPosts,
};
})();