7 changed files with 98 additions and 7 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