diff --git a/themes/_vendor/js/mock.js b/themes/_vendor/js/mock.js index d752e10..26f7949 100644 --- a/themes/_vendor/js/mock.js +++ b/themes/_vendor/js/mock.js @@ -25,26 +25,184 @@ * along with this program. If not, see . */ +let _greeter = null; + if ('undefined' !== typeof lightdm) { throw new Error('Cannot use LightDM Mock while the greeter is running!'); } -let LightDMGreeter, - LightDMSession, - LightDMUser, - LightDMLanguage, - LightDMLayout; -window.lightdm = {}; +/** + * Interface for object that holds info about a session. Session objects are not + * created by the theme's code, but rather by the {@link lightdm} class. + * @interface + */ +let LightDMSession = { + /** + * The comment for the session. + * @type {String} + * @readonly + */ + comment: '', + + /** + * The key for the session. + * @type {String} + * @readonly + */ + key: '', + + /** + * The name for the session. + * @type {String} + * @readonly + */ + name: '' +}; /** - * Class which implements the LightDMGreeter Interface. + * Interface for object that holds info about a language on this system. Language objects are not + * created by the theme's code, but rather by the {@link lightdm} class. + * @interface */ -LightDMGreeter = class { +let LightDMLanguage = { + /** + * The code for the language. + * @type {String} + * @readonly + */ + code: '', + + /** + * The name for the language. + * @type {String} + * @readonly + */ + name: '', + + /** + * The territory for the language. + * @type {String} + * @readonly + */ + territory: '' +}; + + +/** + * Interface for object that holds info about a keyboard layout on this system. Language + * objects are not created by the theme's code, but rather by the {@link lightdm} class. + * @interface + */ +let LightDMLayout = { + /** + * The description for the layout. + * @type {String} + * @readonly + */ + description: '', + + /** + * The name for the layout. + * @type {String} + * @readonly + */ + name: '', + + /** + * The territory for the layout. + * @type {String} + * @readonly + */ + short_description: '' +}; + + +/** + * Interface for object that holds info about a user account on this system. User + * objects are not created by the theme's code, but rather by the {@link lightdm} class. + * @interface + */ +let LightDMUser = { + /** + * The display name for the user. + * @type {String} + */ + display_name: '', + + /** + * The language for the user. + * @type {String} + */ + language: '', + + /** + * The keyboard layout for the user. + * @type {String} + */ + layout: '', + + /** + * The image for the user. + * @type {String} + */ + image: '', + + /** + * The home_directory for the user. + * @type {String} + */ + home_directory: '', + + /** + * The username for the user. + * @type {String} + */ + username: '', + + /** + * Whether or not the user is currently logged in. + * @type {Boolean} + */ + logged_in: false, + + /** + * The last session that the user logged into. + * @type {String|null} + */ + session: '', + + /** + * @deprecated See {@link LightDMUser.username}. + * @type {String} + */ + name: '', + + /** + * @deprecated See {@link LightDMUser.display_name}. + * @type {String} + */ + real_name: '' +}; + + +/** + * Singleton class which implements the LightDMGreeter Interface. Greeter themes will + * interact directly with this class to facilitate the user log in processes. + * The greeter will automatically create an instance of this class when it starts. + * The instance can be accessed through the {@link lightdm} global variable. + */ +window.lightdm = class LightDMGreeter { constructor() { + if ( null !== _greeter ) { + return _greeter; + } + + _greeter = this; this._mock_data = MockData; + this._initialize(); } @@ -367,242 +525,9 @@ LightDMGreeter = class { }; /** - * Interface for object that holds info about a session. Session objects are not - * created by the theme's code, but rather by the {@link lightdm} class. - */ -LightDMSession = class { - /** - * @private - */ - constructor( {name, key, comment} ) { - this._name = name; - this._key = key; - this._comment = comment; - } - - /** - * The comment for the session. - * @type {String} - * @readonly - */ - get comment() { - return this._comment; - } - - /** - * The key for the session. - * @type {String} - * @readonly - */ - get key() { - return this._key; - } - - /** - * The name for the session. - * @type {String} - * @readonly - */ - get name() { - return this._name; - } - -}; - - -/** - * Interface for object that holds info about a language on this system. Language objects are not - * created by the theme's code, but rather by the {@link lightdm} class. + * Mock data to simulate the greeter's API in any web browser. + * @type {Object} */ -LightDMLanguage = class { - /** - * @private - */ - constructor( {name, code, territory} ) { - this._name = name; - this._code = code; - this._territory = territory; - } - - /** - * The code for the language. - * @type {String} - * @readonly - */ - get code() { - return this._code; - } - - /** - * The name for the language. - * @type {String} - * @readonly - */ - get name() { - return this._name; - } - - /** - * The territory for the language. - * @type {String} - * @readonly - */ - get territory() { - return this._territory; - } - -}; - -/** - * Interface for object that holds info about a keyboard layout on this system. Language - * objects are not created by the theme's code, but rather by the {@link lightdm} class. - */ -LightDMLayout = class { - /** - * @private - */ - constructor( {name, short_description, description} ) { - this._name = name; - this._short_description = short_description; - this._description = description; - } - - /** - * The description for the layout. - * @type {String} - * @readonly - */ - get description() { - return this._description; - } - - /** - * The name for the layout. - * @type {String} - * @readonly - */ - get name() { - return this._name; - } - - /** - * The territory for the layout. - * @type {String} - * @readonly - */ - get short_description() { - return this._short_description; - } - -}; - - -/** - * Interface for object that holds info about a user account on this system. User - * objects are not created by the theme's code, but rather by the {@link lightdm} class. - */ -LightDMUser = class { - /** - * @private - */ - constructor( user_info ) { - for ( let property_name of user_info.keys() ) { - this[`_${property_name}`] = user_info[property_name]; - } - } - - /** - * The display name for the user. - * @type {String} - * @readonly - */ - get display_name() { - return this._display_name; - } - - /** - * The language for the user. - * @type {String} - * @readonly - */ - get language() { - return this._language; - } - - /** - * The keyboard layout for the user. - * @type {String} - * @readonly - */ - get layout() { - return this._layout; - } - - /** - * The image for the user. - * @type {String} - * @readonly - */ - get image() { - return this._image; - } - - /** - * The home_directory for the user. - * @type {String} - * @readonly - */ - get home_directory() { - return this._home_directory; - } - - /** - * The username for the user. - * @type {String} - * @readonly - */ - get username() { - return this._username; - } - - /** - * Whether or not the user is currently logged in. - * @type {Boolean} - * @readonly - */ - get logged_in() { - return this._logged_in; - } - - /** - * The last session that the user logged into. - * @type {String|null} - * @readonly - */ - get session() { - return this._session; - } - - /** - * @deprecated See {@link LightDMUser.username}. - * @type {String} - * @readonly - */ - get name() { - return this._username; - } - - /** - * @deprecated See {@link LightDMUser.display_name}. - * @type {String} - * @readonly - */ - get real_name() { - return this._display_name; - } - -}; - const MockData = { greeter: { default_values: {string: '', int: 0, bool: false, list: [], 'null': null}, @@ -619,24 +544,92 @@ const MockData = { 'null': ['language', 'layout'] } }, + /** + * @property {Object[]} languages + */ languages: [ + /** + * @implements {LightDMLanguage} + * @instance + */ {name: 'English', code: 'en_US.utf8', territory: 'USA'}, + /** + * @implements {LightDMLanguage} + * @instance + */ {name: 'Catalan', code: 'ca_ES.utf8', territory: 'Spain'}, + /** + * @implements {LightDMLanguage} + * @instance + */ {name: 'French', code: 'fr_FR.utf8', territory: 'France'} ], + /** + * @property {Object[]} layouts + */ layouts: [ + /** @implements {LightDMLayout} */ {name: 'us', short_description: 'en', description: 'English (US)'}, + /** @implements {LightDMLayout} */ {name: 'at', short_description: 'de', description: 'German (Austria)'}, + /** @implements {LightDMLayout} */ {name: 'us rus', short_description: 'ru', description: 'Russian (US, phonetic)'} ], - sessions: [ - {key: 'gnome', name: 'GNOME', comment: 'This session logs you into GNOME'}, - {key: 'cinnamon', name: 'Cinnamon', comment: 'This session logs you into Cinnamon'}, - {key: 'plasma', name: 'Plasma', comment: 'Plasma by KDE'}, - {key: 'mate', name: 'MATE', comment: 'This session logs you into MATE'}, - {key: 'openbox', name: 'Openbox', comment: 'This session logs you into Openbox'} - ], + /** + * @property {Object} sessions + */ + sessions: { + /** + * @property {Object} gnome + * @implements {LightDMSession} + */ + gnome: { + key: 'gnome', + name: 'GNOME', + comment: 'This session logs you into GNOME' + }, + /** + * @property {Object} cinnamon + * @implements {LightDMSession} + */ + cinnamon: { + key: 'cinnamon', + name: 'Cinnamon', + comment: 'This session logs you into Cinnamon' + }, + /** + * @property {Object} plasma + * @implements {LightDMSession} + */ + plasma: { + key: 'plasma', + name: 'Plasma', + comment: 'Plasma by KDE' + }, + /** + * @property {Object} mate + * @implements {LightDMSession} + */ + mate: { + key: 'mate', + name: 'MATE', + comment: 'This session logs you into MATE' + }, + /** + * @property {Object} openbox + * @implements {LightDMSession} + */ + openbox: { + key: 'openbox', + name: 'Openbox', + comment: 'This session logs you into Openbox' + } + }, + /** + * @property {Object[]} users + */ users: [ + /** @implements {LightDMUser} */ { display_name: 'Clark Kent', language: null, @@ -646,11 +639,11 @@ const MockData = { username: 'superman', logged_in: false, session: 'gnome', - /* --->> DEPRECATED! <<--- */ + name: 'superman', real_name: 'Clark Kent' - /* --->> DEPRECATED! <<--- */ }, + /** @implements {LightDMUser} */ { display_name: 'Bruce Wayne', language: null, @@ -660,11 +653,11 @@ const MockData = { username: 'batman', logged_in: false, session: 'cinnamon', - /* --->> DEPRECATED! <<--- */ + name: 'batman', real_name: 'Bruce Wayne' - /* --->> DEPRECATED! <<--- */ }, + /** @implements {LightDMUser} */ { display_name: 'Peter Parker', language: null, @@ -674,10 +667,9 @@ const MockData = { username: 'spiderman', logged_in: false, session: 'MATE', - /* --->> DEPRECATED! <<--- */ + name: 'spiderman', real_name: 'Peter Parker' - /* --->> DEPRECATED! <<--- */ } ] }; @@ -826,4 +818,4 @@ function _lightdm_mock_get_user(username) { } */ -window.lightdm = new LightDMGreeter(); +new window.lightdm();