class Backgrounds { constructor() { this._localStorage = window.localStorage; this._defaultBackgroundArr = [ "assets/dracula.png", "assets/window-blurred.png", ]; this._sidebar = document.querySelector("#sidebar"); this._backgroundsList = document.querySelector("#background-selector"); this._background = document.querySelector("#background"); this._backgroundImages = null; this._backgroundImagesDir = null; this._backgroundPath = ""; } _createImage(path) { let image = document.createElement("img"); let button = document.createElement("button"); let imageName = path.replace(/^.*[\\\/]/, ""); button.classList.add("image"); image.src = path; image.alt = imageName; button.appendChild(image); return button; } async _createBackgroundArray() { let images = await this._getImages(); this._backgroundImages = this._defaultBackgroundArr.concat(images); this._setBackgroundImages(); return new Promise((resolve) => resolve()); } _updateOnStartup() { this._backgroundPath = this._localStorage.getItem("defaultBackgroundImage") || this._backgroundImages[0]; this._updateBackgroundImages(); } _updateBackgroundImages() { let img = this._background.querySelector("img"); if (!img) { img = document.createElement("img"); this._background.appendChild(img); } img.src = this._backgroundPath; this._localStorage.setItem( "defaultBackgroundImage", String(this._backgroundPath) ); } _setBackgroundImages() { this._backgroundsList.innerHTML = ""; for (let i = 0; i < this._backgroundImages.length; i++) { const path = this._backgroundImages[i]; let button = this._createImage(path); button.addEventListener("click", () => { this._backgroundPath = path; this._updateBackgroundImages(); }); this._backgroundsList.appendChild(button); } } _getImages(path) { this._backgroundImagesDir = greeter_config.branding.background_images_dir || "/usr/share/backgrounds"; return new Promise((resolve) => { theme_utils.dirlist( path ? path : this._backgroundImagesDir, true, (result) => { resolve(result); } ); }); } async _init() { await this._createBackgroundArray(); this._updateOnStartup(); return new Promise((resolve) => resolve()); } }