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.
92 lines
2.5 KiB
92 lines
2.5 KiB
4 years ago
|
class Sessions {
|
||
|
constructor() {
|
||
|
this._localStorage = window.localStorage
|
||
|
this._sessionsButton = document.querySelector("#sessions-button")
|
||
|
this._sessionList = document.querySelector("#sessions-dropdown")
|
||
|
this._sessionLabel = document.querySelector("#sessions-button > .text")
|
||
|
this._defaultSession = null
|
||
|
this._sessionsObject = null
|
||
|
this._init()
|
||
|
}
|
||
|
|
||
|
getDefaultSession() {
|
||
|
return this._defaultSession.key
|
||
|
}
|
||
|
|
||
|
_setSessionDefault() {
|
||
|
this._sessionLabel.innerText = this._defaultSession.name
|
||
|
}
|
||
|
|
||
|
_updateOnStartup() {
|
||
|
var key = this._localStorage.getItem("defaultSession") || this._sessionsObject[0].key || lightdm.default_session
|
||
|
|
||
|
var session = this._sessionsObject.find((val) => {return val.key === key})
|
||
|
if (session === undefined) {
|
||
|
// This should never happen
|
||
|
this._defaultSession = {key: "awesome", name: "Awesome WM"}
|
||
|
} else {
|
||
|
this._defaultSession = session
|
||
|
}
|
||
|
this._setSessionDefault()
|
||
|
}
|
||
|
|
||
|
_updateDefaults(sessionObj) {
|
||
|
if (!sessionObj) return
|
||
|
this._defaultSession = sessionObj
|
||
|
this._localStorage.setItem("defaultSession", this._defaultSession.key)
|
||
|
}
|
||
|
|
||
|
_setSessionList() {
|
||
|
var dropdown = this._sessionList
|
||
|
dropdown.innerHTML = ""
|
||
|
for (let i = 0; i < this._sessionsObject.length; i++) {
|
||
|
var name = this._sessionsObject[i].name
|
||
|
var li = document.createElement("li")
|
||
|
var button = document.createElement("button")
|
||
|
button.innerText = name
|
||
|
button.addEventListener("click", () => {
|
||
|
this._updateDefaults(this._sessionsObject[i])
|
||
|
this._setSessionDefault()
|
||
|
})
|
||
|
|
||
|
li.appendChild(button)
|
||
|
dropdown.appendChild(li)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_setKeydown() {
|
||
|
var dropdown = this._sessionList
|
||
|
dropdown.addEventListener("keydown", (ev) => {
|
||
|
if (ev.keyCode == 27) {
|
||
|
sessions_dropdown.classList.add("hide")
|
||
|
this._sessionsButton.focus()
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
_setButton() {
|
||
|
var dropdown = this._sessionList
|
||
|
document.querySelector("#screen").addEventListener("click", (ev) => {
|
||
|
if (ev.target == this._sessionsButton || ev.target.parentElement == this._sessionsButton) {
|
||
|
dropdown.classList.toggle("hide")
|
||
|
} else
|
||
|
if (ev.target != this._sessionList && ev.target.closest(".dropdown") == null) {
|
||
|
dropdown.classList.add("hide")
|
||
|
}
|
||
|
})
|
||
|
document.querySelector("#screen").addEventListener("focusin", (ev) => {
|
||
|
if (!dropdown.contains(document.activeElement) && document.activeElement != this._sessionsButton) {
|
||
|
dropdown.classList.add("hide")
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
_init() {
|
||
|
this._sessionsObject = lightdm.sessions
|
||
|
this._updateOnStartup()
|
||
|
this._setSessionList()
|
||
|
this._setButton()
|
||
|
this._setKeydown()
|
||
|
}
|
||
|
}
|