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() } }