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.
78 lines
2.1 KiB
78 lines
2.1 KiB
3 years ago
|
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()
|
||
|
}
|
||
|
}
|