// ==========================
// Vortex Theme Editor Part 2
// Background Images
// ==========================
(() => {
if(!window.VortexThemeEditor){
alert("Load Part 1 first!");
return;
}
const STORAGE="vortex-theme";
let saved=JSON.parse(localStorage.getItem(STORAGE)||"{}");
function save(){
localStorage.setItem(STORAGE,JSON.stringify(saved));
}
const panel=document.getElementById("vortex-theme-panel");
panel.insertAdjacentHTML("beforeend",`
🖼 Background Image
Blur
${saved.blur||0}px
Brightness
${saved.brightness||100}%
Saturation
${saved.saturation||100}%
Fit
`);
const blurSlider=document.getElementById("blurSlider");
const brightSlider=document.getElementById("brightSlider");
const satSlider=document.getElementById("satSlider");
const fitMode=document.getElementById("fitMode");
fitMode.value=saved.fit||"cover";
function applyImage(){
if(saved.image){
document.body.style.backgroundImage=
`url(${saved.image})`;
document.body.style.backgroundRepeat="no-repeat";
document.body.style.backgroundAttachment="fixed";
document.body.style.backgroundPosition="center";
document.body.style.backgroundSize=fitMode.value;
document.body.style.filter=
`blur(0px) brightness(${brightSlider.value}%)
saturate(${satSlider.value}%)`;
document.body.style.setProperty(
"--bgBlur",
blurSlider.value+"px"
);
if(!document.getElementById("vortex-bg-blur")){
const layer=document.createElement("div");
layer.id="vortex-bg-blur";
Object.assign(layer.style,{
position:"fixed",
inset:"0",
zIndex:"-9999",
backgroundImage:`url(${saved.image})`,
backgroundRepeat:"no-repeat",
backgroundPosition:"center",
backgroundAttachment:"fixed",
backgroundSize:fitMode.value,
filter:
`blur(${blurSlider.value}px)
brightness(${brightSlider.value}%)
saturate(${satSlider.value}%)`
});
document.body.prepend(layer);
}
else{
const layer=document.getElementById("vortex-bg-blur");
layer.style.backgroundImage=`url(${saved.image})`;
layer.style.backgroundSize=fitMode.value;
layer.style.filter=
`blur(${blurSlider.value}px)
brightness(${brightSlider.value}%)
saturate(${satSlider.value}%)`;
}
}
}
applyImage();
document.getElementById("bgUpload").onchange=e=>{
const file=e.target.files[0];
if(!file)return;
const reader=new FileReader();
reader.onload=()=>{
saved.image=reader.result;
save();
applyImage();
};
reader.readAsDataURL(file);
};
blurSlider.oninput=()=>{
document.getElementById("blurValue").textContent=
blurSlider.value+"px";
saved.blur=blurSlider.value;
save();
applyImage();
};
brightSlider.oninput=()=>{
document.getElementById("brightValue").textContent=
brightSlider.value+"%";
saved.brightness=brightSlider.value;
save();
applyImage();
};
satSlider.oninput=()=>{
document.getElementById("satValue").textContent=
satSlider.value+"%";
saved.saturation=satSlider.value;
save();
applyImage();
};
fitMode.onchange=()=>{
saved.fit=fitMode.value;
save();
applyImage();
};
document.getElementById("removeBg").onclick=()=>{
delete saved.image;
save();
const layer=document.getElementById("vortex-bg-blur");
if(layer)layer.remove();
document.body.style.backgroundImage="";
};
})();