Structural cleanup based on thermo-nuclear code quality review: - Extract shared color-picker.css and color-popover.css from badges.css (611→85 lines) - Extract shared lib/presets.js for preset CRUD used by popup and popover - Unify dark mode to single applyDarkModeClass on <html>, removing 4 scattered functions - Fix stale closure in startPostObserver, data-driven reload key check - Remove dead exports, getHelpers wrapper, duplicated colorToHex - Replace DOM expando properties with state array in popup.js Net: -318 lines of duplication, no file over 401 lines. Co-authored-by: Cursor <cursoragent@cursor.com>
96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
|
|
const DEFAULTS = {
|
|
enabled: true,
|
|
darkMode: "auto",
|
|
"light.subredditBgColor": "#fde8e0",
|
|
"light.subredditBorderColor": "#c84a20",
|
|
"light.subredditTextColor": "#c84a20",
|
|
"light.commentsBgColor": "#e0e0e0",
|
|
"light.commentsBorderColor": "#4a4a4a",
|
|
"light.commentsTextColor": "#4a4a4a",
|
|
"dark.subredditBgColor": "#3d2518",
|
|
"dark.subredditBorderColor": "#ff6b3d",
|
|
"dark.subredditTextColor": "#ff6b3d",
|
|
"dark.commentsBgColor": "#3a3a3a",
|
|
"dark.commentsBorderColor": "#888888",
|
|
"dark.commentsTextColor": "#cccccc",
|
|
subredditColors: {},
|
|
colorPresets: [],
|
|
badgeLayout: true,
|
|
fontOverride: true,
|
|
cardLayout: true,
|
|
cardBackground: "reddit",
|
|
cardDensity: "modern",
|
|
cardGap: 16,
|
|
};
|
|
|
|
function migrateSubredditColors(colors) {
|
|
let migrated = false;
|
|
const result = {};
|
|
for (const name of Object.keys(colors)) {
|
|
const entry = colors[name];
|
|
if (entry && entry.bg !== undefined && !entry.light && !entry.dark) {
|
|
result[name] = { light: { bg: entry.bg, border: entry.border, text: entry.text }, dark: { bg: entry.bg, border: entry.border, text: entry.text } };
|
|
migrated = true;
|
|
} else {
|
|
result[name] = entry;
|
|
}
|
|
}
|
|
return { result: result, migrated: migrated };
|
|
}
|
|
|
|
async function loadSettings() {
|
|
const stored = await browser.storage.local.get(null);
|
|
const merged = Object.assign({}, DEFAULTS, stored);
|
|
const migration = migrateSubredditColors(merged.subredditColors || {});
|
|
merged.subredditColors = migration.result;
|
|
if (migration.migrated) {
|
|
await browser.storage.local.set({ subredditColors: merged.subredditColors });
|
|
}
|
|
return merged;
|
|
}
|
|
|
|
async function saveSettings(settings) {
|
|
const toStore = {};
|
|
for (const key of Object.keys(settings)) {
|
|
if (key in DEFAULTS) {
|
|
toStore[key] = settings[key];
|
|
}
|
|
}
|
|
await browser.storage.local.set(toStore);
|
|
}
|
|
|
|
async function resetSettings() {
|
|
await browser.storage.local.clear();
|
|
}
|
|
|
|
function isDarkMode(settings) {
|
|
if (settings.darkMode === "light") return false;
|
|
if (settings.darkMode === "dark") return true;
|
|
return document.body.classList.contains("res-nightmode");
|
|
}
|
|
|
|
function getColorPrefix(settings) {
|
|
return isDarkMode(settings) ? "dark" : "light";
|
|
}
|
|
|
|
function applyDarkModeClass(settings) {
|
|
if (isDarkMode(settings)) {
|
|
document.documentElement.classList.add("rt-dark");
|
|
} else {
|
|
document.documentElement.classList.remove("rt-dark");
|
|
}
|
|
}
|
|
|
|
window.RedditTweaks = window.RedditTweaks || {};
|
|
window.RedditTweaks.DEFAULTS = DEFAULTS;
|
|
window.RedditTweaks.loadSettings = loadSettings;
|
|
window.RedditTweaks.saveSettings = saveSettings;
|
|
window.RedditTweaks.resetSettings = resetSettings;
|
|
window.RedditTweaks.isDarkMode = isDarkMode;
|
|
window.RedditTweaks.getColorPrefix = getColorPrefix;
|
|
window.RedditTweaks.applyDarkModeClass = applyDarkModeClass;
|
|
})();
|