feat: add card layout tweak with unified post observer
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,62 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function startDarkModeObserver(settings) {
|
||||
var observer = new MutationObserver(function () {
|
||||
if (settings.darkMode === "auto") {
|
||||
window.RedditTweaks.loadSettings().then(function (updated) {
|
||||
if (settings.badgeLayout) {
|
||||
window.RedditTweaks.badgeTweak.updateColors(updated);
|
||||
}
|
||||
if (settings.cardLayout) {
|
||||
window.RedditTweaks.cardTweak.updateSettings(updated);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.body, {
|
||||
attributes: true,
|
||||
attributeFilter: ["class"],
|
||||
});
|
||||
}
|
||||
|
||||
function startPostObserver(settings) {
|
||||
var target =
|
||||
document.getElementById("siteTable") ||
|
||||
document.querySelector('.content[role="main"]') ||
|
||||
document.body;
|
||||
|
||||
var observer = new MutationObserver(function (mutations) {
|
||||
var hasNewPosts = false;
|
||||
for (var i = 0; i < mutations.length; i++) {
|
||||
var added = mutations[i].addedNodes;
|
||||
for (var j = 0; j < added.length; j++) {
|
||||
var node = added[j];
|
||||
if (node.nodeType !== Node.ELEMENT_NODE) continue;
|
||||
if ((node.matches && node.matches("div.thing.link")) ||
|
||||
(node.querySelector && node.querySelector("div.thing.link"))) {
|
||||
hasNewPosts = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hasNewPosts) break;
|
||||
}
|
||||
if (hasNewPosts) {
|
||||
window.RedditTweaks.loadSettings().then(function (updated) {
|
||||
if (settings.badgeLayout) {
|
||||
window.RedditTweaks.badgeTweak.processNewPosts(updated);
|
||||
}
|
||||
if (settings.cardLayout) {
|
||||
window.RedditTweaks.cardTweak.processNewPosts(updated);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(target, { childList: true, subtree: true });
|
||||
}
|
||||
|
||||
async function init() {
|
||||
const settings = await window.RedditTweaks.loadSettings();
|
||||
if (!settings.enabled) return;
|
||||
@@ -10,10 +66,20 @@
|
||||
window.RedditTweaks.badgeTweak.apply(settings);
|
||||
}
|
||||
|
||||
if (settings.cardLayout) {
|
||||
window.RedditTweaks.cardTweak.apply(settings);
|
||||
}
|
||||
|
||||
if (settings.badgeLayout || settings.cardLayout) {
|
||||
startPostObserver(settings);
|
||||
startDarkModeObserver(settings);
|
||||
}
|
||||
|
||||
browser.storage.onChanged.addListener(function (changes) {
|
||||
if (
|
||||
(changes.enabled && changes.enabled.newValue !== changes.enabled.oldValue) ||
|
||||
(changes.badgeLayout && changes.badgeLayout.newValue !== changes.badgeLayout.oldValue)
|
||||
(changes.badgeLayout && changes.badgeLayout.newValue !== changes.badgeLayout.oldValue) ||
|
||||
(changes.cardLayout && changes.cardLayout.newValue !== changes.cardLayout.oldValue)
|
||||
) {
|
||||
location.reload();
|
||||
return;
|
||||
@@ -23,6 +89,9 @@
|
||||
if (settings.badgeLayout) {
|
||||
window.RedditTweaks.badgeTweak.updateColors(updated);
|
||||
}
|
||||
if (settings.cardLayout) {
|
||||
window.RedditTweaks.cardTweak.updateSettings(updated);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user