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