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.
77 lines
2.1 KiB
77 lines
2.1 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() |
|
} |
|
}
|
|
|