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