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.
98 lines
2.7 KiB
98 lines
2.7 KiB
class Accounts { |
|
constructor() { |
|
this._localStorage = window.localStorage; |
|
this._userWrapper = document.querySelector("#user-wrapper"); |
|
this._accountsList = document.querySelector("#users-dropdown"); |
|
this._accountsButton = document.querySelector("#users-button"); |
|
this._defaultUser = null; |
|
this._usersObject = null; |
|
this._init(); |
|
} |
|
|
|
getDefaultUserName() { |
|
return this._defaultUser.username; |
|
} |
|
|
|
_setAccountDefault() { |
|
let input = this._userWrapper.querySelector("input"); |
|
if (this._defaultUser.username != "") { |
|
//input.classList.add("hide") |
|
input.value = this._defaultUser.username; |
|
} else { |
|
input.value = ""; |
|
} |
|
if (this._usersObject.length > 0) { |
|
this._accountsButton.classList.remove("hide"); |
|
} |
|
} |
|
|
|
_updateOnStartup() { |
|
var username = ""; |
|
if (this._usersObject.length > 0) { |
|
username = |
|
this._localStorage.getItem("defaultUser") || |
|
this._usersObject[0].username; |
|
} |
|
var user = this._usersObject.find((val) => { |
|
return val.username === username; |
|
}); |
|
if (user === undefined) { |
|
this._defaultUser = { username: "", display_name: "" }; |
|
} else { |
|
this._defaultUser = user; |
|
} |
|
this._setAccountDefault(); |
|
} |
|
|
|
_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.type = "button"; |
|
button.innerText = name; |
|
button.addEventListener("click", () => { |
|
this._updateDefaults(this._usersObject[i]); |
|
this._setAccountDefault(); |
|
//authenticate.startAuthentication() |
|
}); |
|
|
|
li.appendChild(button); |
|
dropdown.appendChild(li); |
|
} |
|
} |
|
|
|
_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"); |
|
} |
|
}); |
|
} |
|
|
|
_updateDefaults(userObject) { |
|
if (!userObject) return; |
|
this._defaultUser = userObject; |
|
|
|
this._localStorage.setItem("defaultUser", this._defaultUser.username); |
|
} |
|
|
|
_init() { |
|
this._usersObject = lightdm.users; |
|
this._updateOnStartup(); |
|
this._setAccountList(); |
|
this._setButton(); |
|
} |
|
}
|
|
|