JezerM
4 years ago
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