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