class Accounts { constructor() { this._localStorage = window.localStorage this._userImage = document.querySelector("#user-image") this._userLabel = document.querySelector("#user-label") this._accountsList = document.querySelector("#users-list") this._accountsButton = document.querySelector("#users-button") this._defaultUser = null this._usersObject = null this._init() } getDefaultUserName() { return this._defaultUser.username } _setAccountDefault() { var img = this._userImage.querySelector("img") img.src = this._defaultUser.image img.onerror = function() { img.src = "" } this._userLabel.innerHTML = `${this._defaultUser.display_name}` } _updateOnStartup() { var username = this._localStorage.getItem('defaultUser') || this._usersObject[0].username var display_name = this._localStorage.getItem('defaultUserDisplayName') || this._usersObject[0].display_name var image = this._localStorage.getItem("defaultUserProfileImage") || this._usersObject[0].image this._defaultUser = { username, display_name, image, } this._setAccountDefault() } _setGuestAccount() { if (lightdm.has_guest_account) { this._guestAccount = `guest-account-${Math.floor(Math.random() * 1000)}` this._usersObject.push({ username: this._guestAccount, display_name: "Guest", image: "" }) } } _setAccountList() { var dropdown = this._accountsList.querySelector(".dropdown") dropdown.innerHTML = "" for (let i = 0; i < this._usersObject.length; i++) { var name = this._usersObject[i].display_name var li = document.createElement("li") var button = document.createElement("button") button.innerHTML = name button.addEventListener("click", () => { this._updateDefaults(this._usersObject[i]) this._setAccountDefault() authenticate.startAuthentication() }) li.appendChild(button) dropdown.appendChild(li) } } _setKeydown() { var dropdown = this._accountsList.querySelector(".dropdown") dropdown.addEventListener("keydown", (ev) => { if (ev.keyCode == 27) { dropdown.classList.add("hide") this._accountsButton.focus() } }) } _setButton() { var dropdown = this._accountsList.querySelector(".dropdown") document.querySelector("#screen").addEventListener("click", (ev) => { if (ev.target == this._accountsButton || ev.target.parentElement == this._accountsButton) { dropdown.classList.toggle("hide") } else if (ev.target != this._accountsList && ev.target.closest(".dropdown") == null) { dropdown.classList.add("hide") } }) document.querySelector("#screen").addEventListener("focusin", (ev) => { if (!dropdown.contains(document.activeElement) && document.activeElement != this._accountsButton) { dropdown.classList.add("hide") } }) } _updateDefaults(userObject) { if (!userObject) return this._defaultUser = userObject this._localStorage.setItem("defaultUser", this._defaultUser.username) this._localStorage.setItem("defaultUserDisplayName", this._defaultUser.display_name) this._localStorage.setItem("defaultUserProfileImage", this._defaultUser.image) } _init() { this._usersObject = lightdm.users this._updateOnStartup() this._setAccountList() this._setButton() this._setKeydown() } }