refactor: decompose CSS, unify dark mode, extract shared modules
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>
This commit is contained in:
57
lib/presets.js
Normal file
57
lib/presets.js
Normal file
@@ -0,0 +1,57 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function renderPresets(container, presets, onApply, onDelete) {
|
||||
container.innerHTML = "";
|
||||
for (var i = 0; i < presets.length; i++) {
|
||||
(function (index) {
|
||||
var p = presets[index];
|
||||
var badge = document.createElement("span");
|
||||
badge.className = "rt-preset-badge";
|
||||
badge.style.background = p.bg;
|
||||
badge.style.borderColor = p.border;
|
||||
badge.style.color = p.text;
|
||||
badge.textContent = "Aa";
|
||||
badge.title = "Click to apply";
|
||||
badge.addEventListener("click", function () {
|
||||
onApply(p);
|
||||
});
|
||||
|
||||
var del = document.createElement("span");
|
||||
del.className = "rt-preset-delete";
|
||||
del.textContent = "\u00d7";
|
||||
del.addEventListener("click", function (e) {
|
||||
e.stopPropagation();
|
||||
onDelete(index);
|
||||
});
|
||||
badge.appendChild(del);
|
||||
container.appendChild(badge);
|
||||
})(i);
|
||||
}
|
||||
}
|
||||
|
||||
async function savePreset(preset, onDone) {
|
||||
var settings = await window.RedditTweaks.loadSettings();
|
||||
var presets = settings.colorPresets || [];
|
||||
presets.push(preset);
|
||||
settings.colorPresets = presets;
|
||||
await window.RedditTweaks.saveSettings(settings);
|
||||
onDone(presets);
|
||||
}
|
||||
|
||||
async function deletePreset(index, onDone) {
|
||||
var settings = await window.RedditTweaks.loadSettings();
|
||||
var presets = settings.colorPresets || [];
|
||||
presets.splice(index, 1);
|
||||
settings.colorPresets = presets;
|
||||
await window.RedditTweaks.saveSettings(settings);
|
||||
onDone(presets);
|
||||
}
|
||||
|
||||
window.RedditTweaks = window.RedditTweaks || {};
|
||||
window.RedditTweaks.presets = {
|
||||
render: renderPresets,
|
||||
save: savePreset,
|
||||
delete: deletePreset,
|
||||
};
|
||||
})();
|
||||
@@ -76,6 +76,14 @@
|
||||
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;
|
||||
@@ -83,4 +91,5 @@
|
||||
window.RedditTweaks.resetSettings = resetSettings;
|
||||
window.RedditTweaks.isDarkMode = isDarkMode;
|
||||
window.RedditTweaks.getColorPrefix = getColorPrefix;
|
||||
window.RedditTweaks.applyDarkModeClass = applyDarkModeClass;
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user