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