1 changed files with 751 additions and 0 deletions
			
			
		@ -0,0 +1,751 @@ | 
				
			|||||||
 | 
					class Language { | 
				
			||||||
 | 
						constructor( {code, name, territory} ) { | 
				
			||||||
 | 
							this.code = code; | 
				
			||||||
 | 
							this.name = name; | 
				
			||||||
 | 
							this.territory = territory; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Layout { | 
				
			||||||
 | 
						constructor( {name, description, short_description} ) { | 
				
			||||||
 | 
							this.name = name; | 
				
			||||||
 | 
							this.description = description; | 
				
			||||||
 | 
							this.short_description = short_description; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Session { | 
				
			||||||
 | 
						constructor( {key, name, comment} ) { | 
				
			||||||
 | 
							this.key = key; | 
				
			||||||
 | 
							this.name = name; | 
				
			||||||
 | 
							this.comment = comment; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class User { | 
				
			||||||
 | 
						constructor( {display_name, username, language, layout, image, home_directory, session, logged_in} ) { | 
				
			||||||
 | 
							this.display_name = display_name; | 
				
			||||||
 | 
							this.username = username; | 
				
			||||||
 | 
							this.language = language; | 
				
			||||||
 | 
							this.layout = layout; | 
				
			||||||
 | 
							this.image = image; | 
				
			||||||
 | 
							this.home_directory = home_directory; | 
				
			||||||
 | 
							this.session = session; | 
				
			||||||
 | 
							this.logged_in = logged_in; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Battery { | 
				
			||||||
 | 
						constructor( {name, level, status}) { | 
				
			||||||
 | 
							this.name = name; | 
				
			||||||
 | 
							this.level = level; | 
				
			||||||
 | 
							this.status = status; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_mockData = { | 
				
			||||||
 | 
						languages: [ | 
				
			||||||
 | 
							Language({ | 
				
			||||||
 | 
								name: 'English', | 
				
			||||||
 | 
								code: 'en_US.utf8', | 
				
			||||||
 | 
								territory: 'USA' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Language({ | 
				
			||||||
 | 
								name: 'Catalan', | 
				
			||||||
 | 
								code: 'ca_ES.utf8', | 
				
			||||||
 | 
								territory: 'Spain' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Language({ | 
				
			||||||
 | 
								name: 'French', | 
				
			||||||
 | 
								code: 'fr_FR.utf8', | 
				
			||||||
 | 
								territory: 'France' | 
				
			||||||
 | 
							}) | 
				
			||||||
 | 
						], | 
				
			||||||
 | 
						layouts: [ | 
				
			||||||
 | 
							Layout({ | 
				
			||||||
 | 
								name: 'us', | 
				
			||||||
 | 
								short_description: 'en', | 
				
			||||||
 | 
								description: 'English (US)' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Layout({ | 
				
			||||||
 | 
								name: 'at', | 
				
			||||||
 | 
								short_description: 'de', | 
				
			||||||
 | 
								description: 'German (Austria)' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Layout({ | 
				
			||||||
 | 
								name: 'us rus', | 
				
			||||||
 | 
								short_description: 'ru', | 
				
			||||||
 | 
								description: 'Russian (US, phonetic)' | 
				
			||||||
 | 
							}) | 
				
			||||||
 | 
						], | 
				
			||||||
 | 
						sessions: [ | 
				
			||||||
 | 
							Session({ | 
				
			||||||
 | 
								key: 'gnome', | 
				
			||||||
 | 
								name: 'GNOME', | 
				
			||||||
 | 
								comment: 'This session logs you into GNOME' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Session({ | 
				
			||||||
 | 
								key: 'cinnamon', | 
				
			||||||
 | 
								name: 'Cinnamon', | 
				
			||||||
 | 
								comment: 'This session logs you into Cinnamon' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Session({ | 
				
			||||||
 | 
								key: 'plasma', | 
				
			||||||
 | 
								name: 'Plasma', | 
				
			||||||
 | 
								comment: 'Plasma by KDE' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Session({ | 
				
			||||||
 | 
								key: 'awesome', | 
				
			||||||
 | 
								name: 'Awesome wm', | 
				
			||||||
 | 
								comment: 'An Awesome WM' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Session({ | 
				
			||||||
 | 
								key: 'mate', | 
				
			||||||
 | 
								name: 'MATE', | 
				
			||||||
 | 
								comment: 'This session logs you into MATE' | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							Session({ | 
				
			||||||
 | 
								key: 'openbox', | 
				
			||||||
 | 
								name: 'Openbox', | 
				
			||||||
 | 
								comment: 'This session logs you into Openbox' | 
				
			||||||
 | 
							}) | 
				
			||||||
 | 
						], | 
				
			||||||
 | 
						users: [ | 
				
			||||||
 | 
							User({ | 
				
			||||||
 | 
								display_name: 'Clark Kent', | 
				
			||||||
 | 
								username: 'superman', | 
				
			||||||
 | 
								language: null, | 
				
			||||||
 | 
								layout: null, | 
				
			||||||
 | 
								image: '/usr/share/web-greeter/themes/default/img/antergos-logo-user', | 
				
			||||||
 | 
								home_directory: '/home/superman', | 
				
			||||||
 | 
								session: 'gnome', | 
				
			||||||
 | 
								logged_in: false, | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							User({ | 
				
			||||||
 | 
								display_name: 'Bruce Wayne', | 
				
			||||||
 | 
								username: 'batman', | 
				
			||||||
 | 
								language: null, | 
				
			||||||
 | 
								layout: null, | 
				
			||||||
 | 
								image: '/usr/share/web-greeter/themes/default/img/antergos-logo-user', | 
				
			||||||
 | 
								home_directory: '/home/batman', | 
				
			||||||
 | 
								session: 'cinnamon', | 
				
			||||||
 | 
								logged_in: false, | 
				
			||||||
 | 
							}), | 
				
			||||||
 | 
							User({ | 
				
			||||||
 | 
								display_name: 'Peter Parker', | 
				
			||||||
 | 
								username: 'spiderman', | 
				
			||||||
 | 
								language: null, | 
				
			||||||
 | 
								layout: null, | 
				
			||||||
 | 
								image: '/usr/share/web-greeter/themes/default/img/antergos-logo-user', | 
				
			||||||
 | 
								home_directory: '/home/spiderman', | 
				
			||||||
 | 
								session: 'MATE', | 
				
			||||||
 | 
								logged_in: false, | 
				
			||||||
 | 
							}) | 
				
			||||||
 | 
						], | 
				
			||||||
 | 
						battery: Battery({ | 
				
			||||||
 | 
							name: "Battery 0", | 
				
			||||||
 | 
							level: 85, | 
				
			||||||
 | 
							state: "Discharging" | 
				
			||||||
 | 
						}) | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Greeter { | 
				
			||||||
 | 
						constructor() { | 
				
			||||||
 | 
							if ('lightdm' in window) { | 
				
			||||||
 | 
								return window.lightdm; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							window.lightdm = this; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return window.lightdm; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_authentication_user = null; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The username of the user being authenticated or {@link null} | 
				
			||||||
 | 
						 * if no authentication is in progress | 
				
			||||||
 | 
						 * @type {String|Null} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get authentication_user() { | 
				
			||||||
 | 
							return this._authentication_user; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_autologin_guest = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the guest account should be automatically logged | 
				
			||||||
 | 
						 * into when the timer expires. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get autologin_guest() { | 
				
			||||||
 | 
							return this._autologin_guest; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_autologin_timeout = 100; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The number of seconds to wait before automatically logging in. | 
				
			||||||
 | 
						 * @type {Number} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get autologin_timeout() { | 
				
			||||||
 | 
							return this._autologin_timeout; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_autologin_user = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The username with which to automattically log in when the timer expires. | 
				
			||||||
 | 
						 * @type {String} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get autologin_user() { | 
				
			||||||
 | 
							return this._autologin_user; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_batteryData = _mockData.battery; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Gets the battery data. | 
				
			||||||
 | 
						 * @type {Battery} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get batteryData() { | 
				
			||||||
 | 
							return this._batteryData; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_brightness = 50; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Gets the brightness | 
				
			||||||
 | 
						 * @type {Number} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get brightness() { | 
				
			||||||
 | 
							return this._brightness; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Sets the brightness | 
				
			||||||
 | 
						 * @param {Number} quantity The quantity to set | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						set brightness( quantity ) { | 
				
			||||||
 | 
							this._brightness = quantity; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_can_access_battery = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter can access to battery data. | 
				
			||||||
 | 
						 * @type {boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get can_access_battery() { | 
				
			||||||
 | 
							return this._can_access_battery; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_can_access_brightness = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter can control display brightness. | 
				
			||||||
 | 
						 * @type {boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get can_access_brightness() { | 
				
			||||||
 | 
							return this._can_access_brightness; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_can_hibernate = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter can make the system hibernate. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get can_hibernate() { | 
				
			||||||
 | 
							return this._can_hibernate; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_can_restart = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter can make the system restart. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get can_restart() { | 
				
			||||||
 | 
							return this._can_restart; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_can_shutdown = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter can make the system shutdown. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get can_shutdown() { | 
				
			||||||
 | 
							return this._can_shutdown; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_can_suspend = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter can make the system suspend/sleep. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get can_suspend() { | 
				
			||||||
 | 
							return this._can_suspend; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_default_session = "awesome"; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The name of the default session. | 
				
			||||||
 | 
						 * @type {String} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get default_session() { | 
				
			||||||
 | 
							return this._default_session; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_has_guest_account = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not guest sessions are supported. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get has_guest_account() { | 
				
			||||||
 | 
							return this._has_guest_account; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_hide_users_hint = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not user accounts should be hidden. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get hide_users_hint() { | 
				
			||||||
 | 
							return this._hide_users_hint; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_hostname = "Web browser"; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The system's hostname. | 
				
			||||||
 | 
						 * @type {String} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get hostname() { | 
				
			||||||
 | 
							return this._hostname; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_in_authentication = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter is in the process of authenticating. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get in_authentication() { | 
				
			||||||
 | 
							return this._in_authentication; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_is_authenticated = true; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter has successfully authenticated. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get is_authenticated() { | 
				
			||||||
 | 
							return this._is_authenticated; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_language = null; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The current language or {@link null} if no language. | 
				
			||||||
 | 
						 * @type {Language|null} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get language() { | 
				
			||||||
 | 
							return this._language; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_languages = _mockData.languages; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * A list of languages to present to the user. | 
				
			||||||
 | 
						 * @type {Language[]} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get languages() { | 
				
			||||||
 | 
							return this._languages; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_layout = _mockData.layouts[0]; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The currently active layout for the selected user. | 
				
			||||||
 | 
						 * @type {Layout} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get layout() { | 
				
			||||||
 | 
							return this._layout; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_layouts = _mockData.layouts; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * A list of keyboard layouts to present to the user. | 
				
			||||||
 | 
						 * @type {Layout[]} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get layouts() { | 
				
			||||||
 | 
							return this._layouts; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_lock_hint = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the greeter was started as a lock screen. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get lock_hint() { | 
				
			||||||
 | 
							return this._lock_hint; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_select_guest_hint = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Whether or not the guest account should be selected by default. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get select_guest_hint() { | 
				
			||||||
 | 
							return this.select_guest_hint; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_select_user_hint = ""; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * The username to select by default. | 
				
			||||||
 | 
						 * @type {String} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get select_user_hint() { | 
				
			||||||
 | 
							return this.select_user_hint; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_sessions = _mockData.sessions; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * List of available sessions. | 
				
			||||||
 | 
						 * @type {Session[]} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get sessions() { | 
				
			||||||
 | 
							return this._sessions; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_show_manual_login_hint = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Check if a manual login option should be shown. If {@link true}, the theme should | 
				
			||||||
 | 
						 * provide a way for a username to be entered manually. Otherwise, themes that show | 
				
			||||||
 | 
						 * a user list may limit logins to only those users. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get show_manual_login_hint() { | 
				
			||||||
 | 
							return this._show_manual_login_hint; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_show_remote_login_hint = false; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Check if a remote login option should be shown. If {@link true}, the theme should provide | 
				
			||||||
 | 
						 * a way for a user to log into a remote desktop server. | 
				
			||||||
 | 
						 * @type {Boolean} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 * @internal | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get show_remote_login_hint() { | 
				
			||||||
 | 
							return this._show_remote_login_hint; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_users = _mockData.users; | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * List of available users. | 
				
			||||||
 | 
						 * @type {User[]} | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get users() { | 
				
			||||||
 | 
							return this.authentication_user; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Starts the authentication procedure for a user. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @param {String|null} username A username or {@link null} to prompt for a username. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						authenticate( username ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Starts the authentication procedure for the guest user. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						authenticate_as_guest() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Updates the battery data | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						batteryUpdate() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Set the brightness to quantity | 
				
			||||||
 | 
						 * @param {Number} quantity The quantity to set | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						brightnessSet( quantity ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Increase the brightness by quantity | 
				
			||||||
 | 
						 * @param {Number} quantity The quantity to increase | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						brightnessIncrease( quantity ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Decrease the brightness by quantity | 
				
			||||||
 | 
						 * @param {Number} quantity The quantity to decrease | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						brightnessDecrease( quantity ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Cancel user authentication that is currently in progress. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						cancel_authentication() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Cancel the automatic login. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						cancel_autologin() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Get the value of a hint. | 
				
			||||||
 | 
						 * @param {String} name The name of the hint to get. | 
				
			||||||
 | 
						 * @returns {String|Boolean|Number|null} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get_hint( name ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Triggers the system to hibernate. | 
				
			||||||
 | 
						 * @returns {Boolean} {@link true} if hibernation initiated, otherwise {@link false} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						hibernate() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Provide a response to a prompt. | 
				
			||||||
 | 
						 * @param {*} response | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						respond( response ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Triggers the system to restart. | 
				
			||||||
 | 
						 * @returns {Boolean} {@link true} if restart initiated, otherwise {@link false} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						restart() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Set the language for the currently authenticated user. | 
				
			||||||
 | 
						 * @param {String} language The language in the form of a locale specification (e.g. | 
				
			||||||
 | 
						 *     'de_DE.UTF-8') | 
				
			||||||
 | 
						 * @returns {Boolean} {@link true} if successful, otherwise {@link false} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						set_language( language ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Triggers the system to shutdown. | 
				
			||||||
 | 
						 * @returns {Boolean} {@link true} if shutdown initiated, otherwise {@link false} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						shutdown() { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Start a session for the authenticated user. | 
				
			||||||
 | 
						 * @param {String|null} session The session to log into or {@link null} to use the default. | 
				
			||||||
 | 
						 * @returns {Boolean} {@link true} if successful, otherwise {@link false} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						start_session( session ) { | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Triggers the system to suspend/sleep. | 
				
			||||||
 | 
						 * @returns {Boolean} {@link true} if suspend/sleep initiated, otherwise {@link false} | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						suspend() {} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GreeterConfig { | 
				
			||||||
 | 
						constructor() { | 
				
			||||||
 | 
							if ('greeter_config' in window) { | 
				
			||||||
 | 
								return window.greeter_config; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							window.greeter_config = this; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_branding = { | 
				
			||||||
 | 
							background_images_dir: "/usr/share/backgrounds", | 
				
			||||||
 | 
							logo_image: "/usr/share/web-greeter/themes/default/img/antergos-logo-user.png", | 
				
			||||||
 | 
							user_image: "/usr/share/web-greeter/themes/default/img/antergos.png" | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_greeter = { | 
				
			||||||
 | 
							debug_mode: true, | 
				
			||||||
 | 
							detect_theme_errors: true, | 
				
			||||||
 | 
							screensaver_timeout: 300, | 
				
			||||||
 | 
							secure_mode: true, | 
				
			||||||
 | 
							time_format: "LT", | 
				
			||||||
 | 
							time_language: "auto", | 
				
			||||||
 | 
							theme: "none" | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_features = { | 
				
			||||||
 | 
							battery: true, | 
				
			||||||
 | 
							backlight: { | 
				
			||||||
 | 
								enabled: true, | 
				
			||||||
 | 
								value: 10, | 
				
			||||||
 | 
								steps: 0 | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Holds keys/values from the `branding` section of the config file. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @type {object} branding | 
				
			||||||
 | 
						 * @property {string} background_images_dir Path to directory that contains background images | 
				
			||||||
 | 
						 *                                      for use in greeter themes. | 
				
			||||||
 | 
						 * @property {string} logo                  Path to distro logo image for use in greeter themes. | 
				
			||||||
 | 
						 * @property {string} user_image            Default user image/avatar. This is used by greeter themes | 
				
			||||||
 | 
						 *                                      for users that have not configured a `.face` image. | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get branding() { | 
				
			||||||
 | 
							return this._branding; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Holds keys/values from the `greeter` section of the config file. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @type {object}  greeter | 
				
			||||||
 | 
						 * @property {boolean} debug_mode          Greeter theme debug mode. | 
				
			||||||
 | 
						 * @property {boolean} detect_theme_errors Provide an option to load a fallback theme when theme | 
				
			||||||
 | 
						 *                                     errors are detected. | 
				
			||||||
 | 
						 * @property {number}  screensaver_timeout Blank the screen after this many seconds of inactivity. | 
				
			||||||
 | 
						 * @property {boolean} secure_mode         Don't allow themes to make remote http requests. | 
				
			||||||
 | 
						 * @property {string}  time_format         A moment.js format string to be used by the greeter to | 
				
			||||||
 | 
						 *                                     generate localized time for display. | 
				
			||||||
 | 
						 * @property {string}  time_language       Language to use when displaying the time or `auto` | 
				
			||||||
 | 
						 *                                     to use the system's language. | 
				
			||||||
 | 
						 * @property {string}  theme               The name of the theme to be used by the greeter. | 
				
			||||||
 | 
						 * @readonly | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get greeter() { | 
				
			||||||
 | 
							return this._greeter; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Holds keys/values from the `features` section of the config file. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @type {Object}      features | 
				
			||||||
 | 
						 * @property {Boolean} battery				 Enable greeter and themes to ger battery status. | 
				
			||||||
 | 
						 * @property {Object}  backlight | 
				
			||||||
 | 
						 * @property {Boolean} enabled				 Enable greeter and themes to control display backlight. | 
				
			||||||
 | 
						 * @property {Number}  value					 The amount to increase/decrease brightness by greeter. | 
				
			||||||
 | 
						 * @property {Number}  steps					 How many steps are needed to do the change. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get features() { | 
				
			||||||
 | 
							return this._features; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ThemeUtils { | 
				
			||||||
 | 
						constructor() { | 
				
			||||||
 | 
							if ("theme_utils" in window) { | 
				
			||||||
 | 
								return window.theme_utils; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							moment.locale( window.navigator.languages ) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							localized_invalid_date = moment('today', '!@#'); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Binds `this` to class, `context`, for all of the class's methods. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @arg {object} context An ES6 class instance with at least one method. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @return {object} `context` with `this` bound to it for all of its methods. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						bind_this( context ) { | 
				
			||||||
 | 
							let excluded_methods = ['constructor']; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							function not_excluded( _method, _context ) { | 
				
			||||||
 | 
								let is_excluded = excluded_methods.findIndex( excluded_method => _method === excluded_method ) > -1, | 
				
			||||||
 | 
									is_method = 'function' === typeof _context[_method]; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								return is_method && !is_excluded; | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for ( let obj = context; obj; obj = Object.getPrototypeOf( obj ) ) { | 
				
			||||||
 | 
								// Stop once we have traveled all the way up the inheritance chain
 | 
				
			||||||
 | 
								if ( 'Object' === obj.constructor.name ) { | 
				
			||||||
 | 
									break; | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for ( let method of Object.getOwnPropertyNames( obj ) ) { | 
				
			||||||
 | 
									if ( not_excluded( method, context ) ) { | 
				
			||||||
 | 
										context[method] = context[method].bind( context ); | 
				
			||||||
 | 
									} | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return context; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dirlist() { | 
				
			||||||
 | 
							return [] | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/** | 
				
			||||||
 | 
						 * Get the current time in a localized format. Time format and language are auto-detected | 
				
			||||||
 | 
						 * by default, but can be set manually in the greeter config file. | 
				
			||||||
 | 
						 *   * `language` defaults to the system's language, but can be set manually in the config file. | 
				
			||||||
 | 
						 *   * When `time_format` config file option has a valid value, time will be formatted | 
				
			||||||
 | 
						 *     according to that value. | 
				
			||||||
 | 
						 *   * When `time_format` does not have a valid value, the time format will be `LT` | 
				
			||||||
 | 
						 *     which is `1:00 PM` or `13:00` depending on the system's locale. | 
				
			||||||
 | 
						 * | 
				
			||||||
 | 
						 * @return {string} The current localized time. | 
				
			||||||
 | 
						 */ | 
				
			||||||
 | 
						get_current_localized_time() { | 
				
			||||||
 | 
							if ( null === time_language ) { | 
				
			||||||
 | 
								let config = greeter_config.greeter, | 
				
			||||||
 | 
									manual_language = ( '' !== config.time_language && 'auto' !== config.time_language ), | 
				
			||||||
 | 
									manual_time_format = ( '' !== config.time_format && 'auto' !== config.time_format ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								time_language =  manual_language ? config.time_language : window.navigator.language; | 
				
			||||||
 | 
								time_format = manual_time_format ? config.time_format : 'LT'; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if ( manual_language ) { | 
				
			||||||
 | 
									moment.locale( time_language ); | 
				
			||||||
 | 
								} | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let local_time = moment().format( time_format ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if ( local_time === localized_invalid_date ) { | 
				
			||||||
 | 
								local_time = moment().format( 'LT' ); | 
				
			||||||
 | 
							} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return local_time; | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new ThemeUtils(); | 
				
			||||||
 | 
					new GreeterConfig(); | 
				
			||||||
 | 
					new Greeter(); | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue