43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
// js/noise-toggle.js
|
|
|
|
import { Logger } from "../../core/logger.js";
|
|
|
|
export function init(config = {}) {
|
|
Logger.log('Noise Toggle Init', config);
|
|
|
|
const {
|
|
selector = ".noise-overlay",
|
|
toggleKey = "g",
|
|
className = "grainy",
|
|
enableTransition = true,
|
|
} = config;
|
|
|
|
const body = document.body;
|
|
const noiseElement = document.querySelector(selector);
|
|
|
|
if (!noiseElement) return;
|
|
|
|
const isInput = noiseElement => ["input", "textarea"].includes(noiseElement.tagName.toLowerCase());
|
|
|
|
function update() {
|
|
if (enableTransition) {
|
|
noiseElement.classList.toggle("hidden", !body.classList.contains(className));
|
|
} else {
|
|
noiseElement.style.display = body.classList.contains(className) ? "block" : "none";
|
|
}
|
|
}
|
|
|
|
update();
|
|
|
|
document.addEventListener("keydown", (e) => {
|
|
if (
|
|
e.key.toLowerCase() === toggleKey &&
|
|
!e.ctrlKey && !e.metaKey && !e.altKey &&
|
|
!isInput(e.target)
|
|
) {
|
|
body.classList.toggle(className);
|
|
update();
|
|
}
|
|
})
|
|
}
|