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.
 
 
 
 
 
 

85 lines
2.3 KiB

class Layouts {
constructor() {
this._layoutList = document.querySelector("#layouts-list");
this._dropdown = document.querySelector("#layouts-dropdown");
this._button = document.querySelector("#layouts-button");
this._layouts = [];
this.layout = {};
this._init();
}
_setDefault() {
let name = this.layout.name;
let description = this.layout.description;
let short = this.layout.short_description;
this._button.innerHTML = name.toUpperCase() + (short ? ` (${short})` : "");
//this._button.name = description
}
_setLayoutList() {
let dropdown = this._dropdown;
dropdown.innerHTML = "";
for (let i = 0; i < this._layouts.length; i++) {
let name = this._layouts[i].name;
let description = this._layouts[i].description;
let short = this._layouts[i].short_description;
let li = document.createElement("li");
let button = document.createElement("button");
button.innerHTML = name + (short ? ` (${short})` : "");
button.name = description;
button.addEventListener("click", () => {
this.layout = this._layouts[i];
this._setDefault();
lightdm.layout = this.layout;
});
li.appendChild(button);
dropdown.appendChild(li);
}
}
_setKeydown() {
let dropdown = this._dropdown;
dropdown.addEventListener("keydown", (ev) => {
if (ev.keyCode == 27) {
dropdown.classList.add("hide");
this._button.focus();
}
});
}
_setButton() {
let dropdown = this._dropdown;
document.querySelector("#screen").addEventListener("click", (ev) => {
if (
ev.target == this._button ||
ev.target.parentElement == this._button
) {
dropdown.classList.toggle("hide");
} else if (
ev.target != dropdown &&
ev.target.closest(".dropdown") == null
) {
dropdown.classList.add("hide");
}
});
document.querySelector("#screen").addEventListener("focusin", (ev) => {
if (
!dropdown.contains(document.activeElement) &&
document.activeElement != this._button
) {
dropdown.classList.add("hide");
}
});
}
_init() {
this.layout = lightdm.layout;
this._layouts = greeter_config.layouts;
this._setDefault();
this._setLayoutList();
this._setButton();
this._setKeydown();
}
}