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