You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.4 KiB
112 lines
3.4 KiB
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 = `<b>${this._defaultUser.display_name}</b>` |
|
} |
|
|
|
_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() |
|
} |
|
|
|
}
|
|
|