JezerM
3 years ago
5 changed files with 121 additions and 8 deletions
@ -0,0 +1,77 @@
|
||||
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() |
||||
} |
||||
} |
Loading…
Reference in new issue