diff --git a/themes/antergos/.babelrc b/themes/antergos/.babelrc index 5bc0a01..c62aed3 100644 --- a/themes/antergos/.babelrc +++ b/themes/antergos/.babelrc @@ -1,3 +1,10 @@ { -"presets": ["/usr/lib/node_modules/babel-preset-es2015"] + "plugins": [ + [ + "/usr/lib/node_modules/babel-plugin-transform-es2015-spread", + { + "loose": true + } + ] + ] } \ No newline at end of file diff --git a/themes/antergos/.gitignore b/themes/antergos/.gitignore index 01d866b..c78758d 100644 --- a/themes/antergos/.gitignore +++ b/themes/antergos/.gitignore @@ -6,45 +6,7 @@ ## Directory-based project format: .idea/ -# if you remove the above rule, at least ignore the following: -# User-specific stuff: -# .idea/workspace.xml -# .idea/tasks.xml -# .idea/dictionaries - -# Sensitive or high-churn files: -# .idea/dataSources.ids -# .idea/dataSources.xml -# .idea/sqlDataSources.xml -# .idea/dynamic.xml -# .idea/uiDesigner.xml - -# Gradle: -# .idea/gradle.xml -# .idea/libraries - -# Mongo Explorer plugin: -# .idea/mongoSettings.xml - -## File-based project format: -*.ipr -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties +node_modules/ diff --git a/themes/antergos/js/greeter-compiled.js b/themes/antergos/js/greeter-compiled.js index e3fa253..b7fdfd6 100644 --- a/themes/antergos/js/greeter-compiled.js +++ b/themes/antergos/js/greeter-compiled.js @@ -1,13 +1,3 @@ -'use strict'; - -var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - /* * * Copyright © 2015-2016 Antergos @@ -39,8 +29,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** * This is used to access our classes from within jQuery callbacks. */ -var _self = null; -var _bg_self = null; +let _self = null; +let _bg_self = null; /** * Capitalize a string. @@ -54,11 +44,9 @@ String.prototype.capitalize = function () { /** * This is the base class for the theme's components. */ +class GreeterThemeComponent { -var GreeterThemeComponent = (function () { - function GreeterThemeComponent() { - _classCallCheck(this, GreeterThemeComponent); - + constructor() { this.debug = this.cache_get('debug', 'enabled'); this.lang = window.navigator.language.split('-')[0].toLowerCase(); this.translations = window.ant_translations; @@ -75,860 +63,582 @@ var GreeterThemeComponent = (function () { * * @param {string} text - To be added to the log. */ - - _createClass(GreeterThemeComponent, [{ - key: 'log', - value: function log(text) { - if ('true' === this.debug) { - console.log(text); - } - $('#logArea').append(text + '
'); + log(text) { + if ('true' === this.debug) { + console.log(text); } + $('#logArea').append(`${ text }
`); + } - /** - * Get a key's value from localStorage. Keys can have two or more parts. - * For example: "ant:user:john:session". - * - * @param {...string} key_parts - Strings that are combined to form the key. - */ - - }, { - key: 'cache_get', - value: function cache_get() { - var key = 'ant'; - - for (var _len = arguments.length, key_parts = Array(_len), _key = 0; _key < _len; _key++) { - key_parts[_key] = arguments[_key]; - } - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = key_parts[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var part = _step.value; - - key += ':' + part; - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } + /** + * Get a key's value from localStorage. Keys can have two or more parts. + * For example: "ant:user:john:session". + * + * @param {...string} key_parts - Strings that are combined to form the key. + */ + cache_get(...key_parts) { + var key = `ant`; - return localStorage.getItem(key); + for (var part of key_parts) { + key += `:${ part }`; } + return localStorage.getItem(key); + } - /** - * Set a key's value in localStorage. Keys can have two or more parts. - * For example: "ant:user:john:session". - * - * @param {string} value - The value to set. - * @param {...string} key_parts - Strings that are combined to form the key. - */ - - }, { - key: 'cache_set', - value: function cache_set(value) { - var key = 'ant'; - - for (var _len2 = arguments.length, key_parts = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - key_parts[_key2 - 1] = arguments[_key2]; - } - - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = key_parts[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var part = _step2.value; - - key += ':' + part; - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } + /** + * Set a key's value in localStorage. Keys can have two or more parts. + * For example: "ant:user:john:session". + * + * @param {string} value - The value to set. + * @param {...string} key_parts - Strings that are combined to form the key. + */ + cache_set(value, ...key_parts) { + var key = `ant`; - return localStorage.setItem(key, value); + for (var part of key_parts) { + key += `:${ part }`; } + return localStorage.setItem(key, value); + } - /** - * Get some values from `lightdm-webkit2-greeter.conf` and save them for later. - */ - - }, { - key: 'init_config_values', - value: function init_config_values() { - var logo = '', - user_image = '', - background_images = [], - background_images_dir = ''; - - if ('undefined' !== typeof config) { - if (this instanceof AntergosTheme) { - logo = config.get_str('branding', 'logo') || ''; - user_image = config.get_str('branding', 'user_image') || ''; - } else if (this instanceof AntergosBackgroundManager) { - background_images_dir = config.get_str('branding', 'background_images') || ''; - if (background_images_dir) { - background_images = greeterutil.dirlist(background_images_dir) || []; - } + /** + * Get some values from `lightdm-webkit2-greeter.conf` and save them for later. + */ + init_config_values() { + let logo = '', + user_image = '', + background_images = [], + background_images_dir = ''; + + if ('undefined' !== typeof config) { + if (this instanceof AntergosTheme) { + logo = config.get_str('branding', 'logo') || ''; + user_image = config.get_str('branding', 'user_image') || ''; + } else if (this instanceof AntergosBackgroundManager) { + background_images_dir = config.get_str('branding', 'background_images') || ''; + if (background_images_dir) { + background_images = greeterutil.dirlist(background_images_dir) || []; + } - if (background_images.length) { - var images = []; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = background_images[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var file = _step3.value; - - if (file.match(/(png|PNG)|(jpg|JPEG)|(bmp|BMP)/)) { - images.push(file); - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } + if (background_images.length) { + let images = []; + for (var file of background_images) { + if (file.match(/(png|PNG)|(jpg|JPEG)|(bmp|BMP)/)) { + images.push(file); } - - background_images = images; } + background_images = images; } } - - this.logo = logo; - this.user_image = user_image; - this.background_images = background_images; - this.background_images_dir = background_images_dir; } - }]); - return GreeterThemeComponent; -})(); + this.logo = logo; + this.user_image = user_image; + this.background_images = background_images; + this.background_images_dir = background_images_dir; + } +} /** * This class handles the theme's background switcher. */ +class AntergosBackgroundManager extends GreeterThemeComponent { -var AntergosBackgroundManager = (function (_GreeterThemeComponen) { - _inherits(AntergosBackgroundManager, _GreeterThemeComponen); - - function AntergosBackgroundManager() { - var _ret; - - _classCallCheck(this, AntergosBackgroundManager); - - var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(AntergosBackgroundManager).call(this)); + constructor() { + super(); if (null === _bg_self) { - _bg_self = _this; + _bg_self = this; } - _this.current_background = _this.cache_get('background_manager', 'current_background'); + this.current_background = this.cache_get('background_manager', 'current_background'); - if (!_this.background_images_dir.length || !_this.background_images.length) { - _this.log('AntergosBackgroundManager: [ERROR] No background images detected.'); + if (!this.background_images_dir.length || !this.background_images.length) { + this.log('AntergosBackgroundManager: [ERROR] No background images detected.'); $('.header').fadeTo(300, 0.5, function () { $('.header').css("background", '#000000'); }).fadeTo(300, 1); } - return _ret = _bg_self, _possibleConstructorReturn(_this, _ret); + return _bg_self; } - _createClass(AntergosBackgroundManager, [{ - key: 'initialize', - value: function initialize() { - if (!this.current_background) { - // For backwards compatibility - if (null !== localStorage.getItem('bgsaved') && '0' === localStorage.getItem('bgrandom')) { - this.current_background = localStorage.getItem('bgsaved'); - this.cache_set(this.current_background, 'background_manager', 'current_background'); - localStorage.removeItem('bgrandom'); - localStorage.removeItem('bgsaved'); - } else if ('0' === localStorage.getItem('bgrandom')) { - this.current_background = this.get_random_image(); - this.cache_set('true', 'background_manager', 'random_background'); - localStorage.removeItem('bgrandom'); - } + initialize() { + if (!this.current_background) { + // For backwards compatibility + if (null !== localStorage.getItem('bgsaved') && '0' === localStorage.getItem('bgrandom')) { + this.current_background = localStorage.getItem('bgsaved'); + this.cache_set(this.current_background, 'background_manager', 'current_background'); + localStorage.removeItem('bgrandom'); + localStorage.removeItem('bgsaved'); + } else if ('0' === localStorage.getItem('bgrandom')) { + this.current_background = this.get_random_image(); + this.cache_set('true', 'background_manager', 'random_background'); + localStorage.removeItem('bgrandom'); } + } - if (!this.current_background) { - // For current and future versions - var current_background = this.cache_get('background_manager', 'current_background'), - random_background = this.cache_get('background_manager', 'random_background'); - - if ('true' === random_background || !current_background) { - current_background = this.get_random_image(); - } + if (!this.current_background) { + // For current and future versions + let current_background = this.cache_get('background_manager', 'current_background'), + random_background = this.cache_get('background_manager', 'random_background'); - this.current_background = current_background; + if ('true' === random_background || !current_background) { + current_background = this.get_random_image(); } - this.do_background(); + this.current_background = current_background; } - }, { - key: 'do_background', - value: function do_background() { - $('.header').fadeTo(300, 0.5, function () { - var tpl = 'url(\'file://' + this.current_background + '\')'; - $('.header').css("background-image", tpl); - }).fadeTo(300, 1); - } - }, { - key: 'get_random_image', - value: function get_random_image() { - var random_bg = undefined; - random_bg = Math.floor(Math.random() * this.background_images.length); + this.do_background(); + } - return this.background_images[random_bg]; - } - }, { - key: 'setup_background_thumbnails', - value: function setup_background_thumbnails() { - if (this.background_images.length) { - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = this.background_images[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var image_file = _step4.value; - - var $link = $(''), - $img_el = $link.children('img'), - tpl = 'file://' + image_file; - - $link.addClass('bg clearfix').attr('data-img', tpl); - $img_el.attr('src', tpl); - - $link.appendTo($('.bgs')).click(this.background_selected_handler); - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } + do_background() { + $('.header').fadeTo(300, 0.5, function () { + let tpl = `url('file://${ this.current_background }')`; + $('.header').css("background-image", tpl); + }).fadeTo(300, 1); + } + + get_random_image() { + let random_bg; + + random_bg = Math.floor(Math.random() * this.background_images.length); + + return this.background_images[random_bg]; + } + + setup_background_thumbnails() { + if (this.background_images.length) { + for (var image_file of this.background_images) { + let $link = $(''), + $img_el = $link.children('img'), + tpl = `file://${ image_file }`; + + $link.addClass('bg clearfix').attr('data-img', tpl); + $img_el.attr('src', tpl); + + $link.appendTo($('.bgs')).click(this.background_selected_handler); } } - }, { - key: 'background_selected_handler', - value: function background_selected_handler(event) { - var img = $(this).attr('data-img'); - - if ('random' === img) { - this.cache_set('true', 'background_manager', 'randmom_background'); - img = this.get_random_image(); - } + } - this.cache_set(img, 'background_manager', 'current_background'); - this.current_background = img; + background_selected_handler(event) { + let img = $(this).attr('data-img'); - this.do_background(); + if ('random' === img) { + this.cache_set('true', 'background_manager', 'randmom_background'); + img = this.get_random_image(); } - }]); - return AntergosBackgroundManager; -})(GreeterThemeComponent); + this.cache_set(img, 'background_manager', 'current_background'); + this.current_background = img; + + this.do_background(); + } +} /** * This is the theme's main class object. It contains almost all the theme's logic. */ +class AntergosTheme extends GreeterThemeComponent { -var AntergosTheme = (function (_GreeterThemeComponen2) { - _inherits(AntergosTheme, _GreeterThemeComponen2); - - function AntergosTheme() { - var _ret2; - - _classCallCheck(this, AntergosTheme); - - var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(AntergosTheme).call(this)); - + constructor() { + super(); if (null === _self) { - _self = _this2; - } - _this2.tux = 'img/antergos-logo-user.png'; - _this2.user_list_visible = false; - _this2.auth_pending = false; - _this2.selected_user = null; - _this2.$user_list = $('#user-list2'); - _this2.$session_list = $('#sessions'); - _this2.$clock_container = $('#collapseOne'); - _this2.$clock = $("#current_time"); - _this2.$actions_container = $("#actionsArea"); - _this2.$msg_area_container = $('#statusArea'); - _this2.$msg_area = $('#showMsg'); - _this2.background_manager = new AntergosBackgroundManager(); - - _this2.background_manager.initialize(); - _this2.initialize(); - - return _ret2 = _self, _possibleConstructorReturn(_this2, _ret2); - } - - _createClass(AntergosTheme, [{ - key: 'initialize', - value: function initialize() { - this.prepare_translations(); - this.do_static_translations(); - this.initialize_clock(); - this.prepare_login_panel_header(); - this.prepare_user_list(); - this.prepare_session_list(); - this.prepare_system_action_buttons(); - $("#login").addClass("in"); - this.register_callbacks(); - this.background_manager.setup_background_thumbnails(); - } + _self = this; + } + this.tux = 'img/antergos-logo-user.png'; + this.user_list_visible = false; + this.auth_pending = false; + this.selected_user = null; + this.$user_list = $('#user-list2'); + this.$session_list = $('#sessions'); + this.$clock_container = $('#collapseOne'); + this.$clock = $("#current_time"); + this.$actions_container = $("#actionsArea"); + this.$msg_area_container = $('#statusArea'); + this.$msg_area = $('#showMsg'); + this.background_manager = new AntergosBackgroundManager(); + + this.background_manager.initialize(); + this.initialize(); + + return _self; + } - /** - * Register callbacks for the LDM Greeter as well as any others that haven't been registered - * elsewhere. - */ - - }, { - key: 'register_callbacks', - value: function register_callbacks() { - var events = 'shown.bs.collapse, hidden.bs.collapse'; - - this.$user_list.parents('.collapse').on(events, this.user_list_collapse_handler); - $(document).keydown(this.key_press_handler); - $('.cancel_auth').click(this.cancel_authentication); - $('.submit_passwd').click(this.submit_password); - - window.show_prompt = this.show_prompt; - window.show_message = this.show_message; - window.start_authentication = this.start_authentication; - window.cancel_authentication = this.cancel_authentication; - window.authentication_complete = this.authentication_complete; - window.autologin_timer_expired = this.cancel_authentication; - } + initialize() { + this.prepare_translations(); + this.do_static_translations(); + this.initialize_clock(); + this.prepare_login_panel_header(); + this.prepare_user_list(); + this.prepare_session_list(); + this.prepare_system_action_buttons(); + $("#login").addClass("in"); + this.register_callbacks(); + this.background_manager.setup_background_thumbnails(); + } - /** - * Initialize the user list. - */ - - }, { - key: 'prepare_user_list', - value: function prepare_user_list() { - var template; - - // Loop through the array of LightDMUser objects to create our user list. - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = lightdm.users[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var user = _step5.value; - - var last_session = this.cache_get('user', user.name, 'session'), - image_src = user.image.length ? user.image : this.user_image; - - if (null === last_session) { - // For backwards compatibility - last_session = localStorage.getItem(user.name); - if (null === last_session) { - // This user has never logged in before let's enable the system's default - // session. - last_session = lightdm.default_session; - } - this.cache_set(last_session, 'user', user.name, 'session'); - } + /** + * Register callbacks for the LDM Greeter as well as any others that haven't been registered + * elsewhere. + */ + register_callbacks() { + var events = 'shown.bs.collapse, hidden.bs.collapse'; + + this.$user_list.parents('.collapse').on(events, this.user_list_collapse_handler); + $(document).keydown(this.key_press_handler); + $('.cancel_auth').click(this.cancel_authentication); + $('.submit_passwd').click(this.submit_password); + + window.show_prompt = this.show_prompt; + window.show_message = this.show_message; + window.start_authentication = this.start_authentication; + window.cancel_authentication = this.cancel_authentication; + window.authentication_complete = this.authentication_complete; + window.autologin_timer_expired = this.cancel_authentication; + } - this.log('Last session for ' + user.name + ' was: ' + last_session); + /** + * Initialize the user list. + */ + prepare_user_list() { + var template; - template = '\n\t\t\t\t\n\t\t\t\t\t' + user.display_name + '\n\t\t\t\t\t' + user.display_name + '\n\t\t\t\t\t\n\t\t\t\t'; + // Loop through the array of LightDMUser objects to create our user list. + for (var user of lightdm.users) { + var last_session = this.cache_get('user', user.name, 'session'), + image_src = user.image.length ? user.image : this.user_image; - // Register event handler here so we don't have to iterate over the users again later. - $(template).appendTo(this.$user_list).click(this.start_authentication).on('error.antergos', this.user_image_error_handler); - } // END for ( var user of lightdm.users ) - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5.return) { - _iterator5.return(); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } + if (null === last_session) { + // For backwards compatibility + last_session = localStorage.getItem(user.name); + if (null === last_session) { + // This user has never logged in before let's enable the system's default + // session. + last_session = lightdm.default_session; } + this.cache_set(last_session, 'user', user.name, 'session'); } - if ($(this.$user_list).children().length > 3) { - // Make the user list two columns instead of one. - $(this.$user_list).css('column-count', '2').parent().css('max-width', '85%'); - } - } + this.log(`Last session for ${ user.name } was: ${ last_session }`); - /** - * Initialize the session selection dropdown. - */ - - }, { - key: 'prepare_session_list', - value: function prepare_session_list() { - // Loop through the array of LightDMSession objects to create our session list. - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; - - try { - for (var _iterator6 = lightdm.sessions[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var session = _step6.value; - - var css_class = session.name.replace(/ /g, ''), - template; - - this.log('Adding ' + session.name + ' to the session list...'); - - template = '\n\t\t\t\t
  • \n\t\t\t\t\t' + session.name + '\n\t\t\t\t
  • '; - - $(template).appendTo(this.$session_list).click(this.session_toggle_handler); - } // END for (var session of lightdm.sessions) - } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; - } finally { - try { - if (!_iteratorNormalCompletion6 && _iterator6.return) { - _iterator6.return(); - } - } finally { - if (_didIteratorError6) { - throw _iteratorError6; - } - } - } + template = ` + + ${ user.display_name } + ${ user.display_name } + + `; + + // Register event handler here so we don't have to iterate over the users again later. + $(template).appendTo(this.$user_list).click(this.start_authentication).on('error.antergos', this.user_image_error_handler); + } // END for ( var user of lightdm.users ) - $('.dropdown-toggle').dropdown(); + if ($(this.$user_list).children().length > 3) { + // Make the user list two columns instead of one. + $(this.$user_list).css('column-count', '2').parent().css('max-width', '85%'); } + } - /** - * Initialize the system action buttons - */ - - }, { - key: 'prepare_system_action_buttons', - value: function prepare_system_action_buttons() { - var actions = { - shutdown: "power-off", - hibernate: "asterisk", - suspend: "arrow-down", - restart: "refresh" - }, + /** + * Initialize the session selection dropdown. + */ + prepare_session_list() { + // Loop through the array of LightDMSession objects to create our session list. + for (var session of lightdm.sessions) { + var css_class = session.name.replace(/ /g, ''), template; - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; + this.log(`Adding ${ session.name } to the session list...`); - try { - for (var _iterator7 = Object.keys(actions)[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var action = _step7.value; + template = ` +
  • + ${ session.name } +
  • `; - var cmd = 'can_' + action; + $(template).appendTo(this.$session_list).click(this.session_toggle_handler); + } // END for (var session of lightdm.sessions) - template = '\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t'; + $('.dropdown-toggle').dropdown(); + } - if (lightdm[cmd]) { - $(template).appendTo($(this.$actions_container)).click(this.system_action_handler); - } - } // END for (var [action, icon] of actions) - } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; - } finally { - try { - if (!_iteratorNormalCompletion7 && _iterator7.return) { - _iterator7.return(); - } - } finally { - if (_didIteratorError7) { - throw _iteratorError7; - } - } + /** + * Initialize the system action buttons + */ + prepare_system_action_buttons() { + var actions = { + shutdown: "power-off", + hibernate: "asterisk", + suspend: "arrow-down", + restart: "refresh" + }, + template; + + for (var action of Object.keys(actions)) { + var cmd = `can_${ action }`; + + template = ` + + + `; + + if (lightdm[cmd]) { + $(template).appendTo($(this.$actions_container)).click(this.system_action_handler); } + } // END for (var [action, icon] of actions) - $('[data-toggle=tooltip]').tooltip(); - $('.modal').modal({ show: false }); - } - }, { - key: 'initialize_clock', - value: function initialize_clock() { - var _this3 = this; + $('[data-toggle=tooltip]').tooltip(); + $('.modal').modal({ show: false }); + } + + initialize_clock() { + var saved_format = this.cache_get('clock', 'time_format'), + format = null !== saved_format ? saved_format : 'LT'; - var saved_format = this.cache_get('clock', 'time_format'), - format = null !== saved_format ? saved_format : 'LT'; + moment.locale(window.navigator.languages); + this.$clock.html(moment().format(format)); - moment.locale(window.navigator.languages); + setInterval(() => { this.$clock.html(moment().format(format)); + }, 60000); + } - setInterval(function () { - _this3.$clock.html(moment().format(format)); - }, 60000); + /** + * Show the user list if its not already shown. This is used to allow the user to + * display the user list by pressing Enter or Spacebar. + */ + show_user_list() { + if ($(this.$clock_container).hasClass('in')) { + $('#trigger').trigger('click'); } + if ($(this.$user_list).length <= 1) { + $(this.$user_list).find('a').trigger('click', this); + } + } - /** - * Show the user list if its not already shown. This is used to allow the user to - * display the user list by pressing Enter or Spacebar. - */ + prepare_login_panel_header() { + var greeting = this.translations.greeting ? this.translations.greeting : 'Welcome!', + logo = '' !== this.logo ? this.logo : 'img/antergos.png'; - }, { - key: 'show_user_list', - value: function show_user_list() { - if ($(this.$clock_container).hasClass('in')) { - $('#trigger').trigger('click'); - } - if ($(this.$user_list).length <= 1) { - $(this.$user_list).find('a').trigger('click', this); + $('.welcome').text(greeting); + $('#hostname').append(lightdm.hostname); + $('[data-greeter-config="logo"]').attr('src', logo); + } + + prepare_translations() { + if (!this.translations.hasOwnProperty(this.lang)) { + for (var lang of window.navigator.languages) { + if (this.translations.hasOwnProperty(lang)) { + this.lang = lang; + break; + } } } - }, { - key: 'prepare_login_panel_header', - value: function prepare_login_panel_header() { - var greeting = this.translations.greeting ? this.translations.greeting : 'Welcome!', - logo = '' !== this.logo ? this.logo : 'img/antergos.png'; - - $('.welcome').text(greeting); - $('#hostname').append(lightdm.hostname); - $('[data-greeter-config="logo"]').attr('src', logo); + if (!this.translations.hasOwnProperty(this.lang)) { + this.lang = 'en'; } - }, { - key: 'prepare_translations', - value: function prepare_translations() { - if (!this.translations.hasOwnProperty(this.lang)) { - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; - - try { - for (var _iterator8 = window.navigator.languages[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var lang = _step8.value; - - if (this.translations.hasOwnProperty(lang)) { - this.lang = lang; - break; - } - } - } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; - } finally { - try { - if (!_iteratorNormalCompletion8 && _iterator8.return) { - _iterator8.return(); - } - } finally { - if (_didIteratorError8) { - throw _iteratorError8; - } - } - } - } - if (!this.translations.hasOwnProperty(this.lang)) { - this.lang = 'en'; - } - this.translations = this.translations[this.lang]; + this.translations = this.translations[this.lang]; + } + + /** + * Replace '${i18n}' with translated string for all elements that + * have the data-i18n attribute. This is for elements that are not generated + * dynamically (they can be found in index.html). + */ + do_static_translations() { + $('[data-i18n]').each(function () { + var key = $(this).attr('data-i18n'), + html = $(this).html(), + translated = _self.translations[key], + new_html = html.replace('${i18n}', translated); + + $(this).html(new_html); + }); + } + + /** + * Start the authentication process for the selected user. + * + * @param {object} event - jQuery.Event object from 'click' event. + */ + start_authentication(event) { + var user_id = $(this).attr('id'), + selector = `.${ user_id }`, + user_session = _self.cache_get('user', user_id, 'session'); + + if (_self.auth_pending || null !== _self.selected_user) { + lightdm.cancel_authentication(); + _self.log(`Authentication cancelled for ${ _self.selected_user }`); + _self.selected_user = null; } - /** - * Replace '${i18n}' with translated string for all elements that - * have the data-i18n attribute. This is for elements that are not generated - * dynamically (they can be found in index.html). - */ - - }, { - key: 'do_static_translations', - value: function do_static_translations() { - $('[data-i18n]').each(function () { - var key = $(this).attr('data-i18n'), - html = $(this).html(), - translated = _self.translations[key], - new_html = html.replace('${i18n}', translated); - - $(this).html(new_html); - }); + _self.log(`Starting authentication for ${ user_id }.`); + _self.selected_user = user_id; + + // CSS hack to workaround webkit bug + if ($(_self.$user_list).children().length > 3) { + $(_self.$user_list).css('column-count', 'initial').parent().css('max-width', '50%'); } + $(selector).addClass('hovered').siblings().hide(); + $('.fa-toggle-down').hide(); - /** - * Start the authentication process for the selected user. - * - * @param {object} event - jQuery.Event object from 'click' event. - */ - - }, { - key: 'start_authentication', - value: function start_authentication(event) { - var user_id = $(this).attr('id'), - selector = '.' + user_id, - user_session = _self.cache_get('user', user_id, 'session'); - - if (_self.auth_pending || null !== _self.selected_user) { - lightdm.cancel_authentication(); - _self.log('Authentication cancelled for ' + _self.selected_user); - _self.selected_user = null; - } + _self.log(`Session for ${ user_id } is ${ user_session }`); - _self.log('Starting authentication for ' + user_id + '.'); - _self.selected_user = user_id; + $(`[data-session-id="${ user_session }"]`).parent().trigger('click', this); - // CSS hack to workaround webkit bug - if ($(_self.$user_list).children().length > 3) { - $(_self.$user_list).css('column-count', 'initial').parent().css('max-width', '50%'); - } - $(selector).addClass('hovered').siblings().hide(); - $('.fa-toggle-down').hide(); + $('#session-list').removeClass('hidden').show(); + $('#passwordArea').show(); + $('.dropdown-toggle').dropdown(); - _self.log('Session for ' + user_id + ' is ' + user_session); + _self.auth_pending = true; - $('[data-session-id="' + user_session + '"]').parent().trigger('click', this); + lightdm.authenticate(user_id); + } - $('#session-list').removeClass('hidden').show(); - $('#passwordArea').show(); - $('.dropdown-toggle').dropdown(); + /** + * Cancel the pending authentication. + * + * @param {object} event - jQuery.Event object from 'click' event. + */ + cancel_authentication(event) { + var selectors = ['#statusArea', '#timerArea', '#passwordArea', '#session-list']; + + for (var selector of selectors) { + $(selector).hide(); + } + + lightdm.cancel_authentication(); - _self.auth_pending = true; + _self.log('Cancelled authentication.'); - lightdm.authenticate(user_id); + // CSS hack to work-around webkit bug + if ($(_self.$user_list).children().length > 3) { + $(_self.$user_list).css('column-count', '2').parent().css('max-width', '85%'); } - /** - * Cancel the pending authentication. - * - * @param {object} event - jQuery.Event object from 'click' event. - */ + $('.hovered').removeClass('hovered').siblings().show(); + $('.fa-toggle-down').show(); - }, { - key: 'cancel_authentication', - value: function cancel_authentication(event) { - var selectors = ['#statusArea', '#timerArea', '#passwordArea', '#session-list']; + _self.selected_user = null; + _self.auth_pending = false; + } - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; + /** + * Called when the user attempts to authenticate (inputs password). + * We check to see if the user successfully authenticated and if so tell the LDM + * Greeter to log them in with the session they selected. + */ + authentication_complete() { + var selected_session = $('.selected').attr('data-session-id'), + err_msg = _self.translations.auth_failed[_self.lang]; - try { - for (var _iterator9 = selectors[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var selector = _step9.value; + _self.auth_pending = false; + _self.cache_set(selected_session, 'user', lightdm.authentication_user, 'session'); - $(selector).hide(); - } - } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; - } finally { - try { - if (!_iteratorNormalCompletion9 && _iterator9.return) { - _iterator9.return(); - } - } finally { - if (_didIteratorError9) { - throw _iteratorError9; - } - } - } + $('#timerArea').hide(); - lightdm.cancel_authentication(); + if (lightdm.is_authenticated) { + // The user entered the correct password. Let's log them in. + $('body').fadeOut(1000); + lightdm.login(lightdm.authentication_user, selected_session); + } else { + // The user did not enter the correct password. Show error message. + $('#statusArea').show(); + } + } - _self.log('Cancelled authentication.'); + submit_password(event) { + lightdm.respond($('#passwordField').val()); + $('#passwordArea').hide(); + $('#timerArea').show(); + } - // CSS hack to work-around webkit bug - if ($(_self.$user_list).children().length > 3) { - $(_self.$user_list).css('column-count', '2').parent().css('max-width', '85%'); - } + session_toggle_handler(event) { + var $session = $(this).children('a'), + session_name = $session.text(), + session_key = $session.attr('data-session-id'); - $('.hovered').removeClass('hovered').siblings().show(); - $('.fa-toggle-down').show(); + $session.parents('.btn-group').find('.selected').attr('data-session-id', session_key).html(session_name); + } - _self.selected_user = null; - _self.auth_pending = false; + key_press_handler(event) { + var action; + switch (event.which) { + case 13: + action = _self.auth_pending ? _self.submit_password() : !_self.user_list_visible ? _self.show_user_list() : 0; + _self.log(action); + break; + case 27: + action = _self.auth_pending ? _self.cancel_authentication() : 0; + _self.log(action); + break; + case 32: + action = !_self.user_list_visible && !_self.auth_pending ? _self.show_user_list() : 0; + _self.log(action); + break; + default: + break; } + } - /** - * Called when the user attempts to authenticate (inputs password). - * We check to see if the user successfully authenticated and if so tell the LDM - * Greeter to log them in with the session they selected. - */ - - }, { - key: 'authentication_complete', - value: function authentication_complete() { - var selected_session = $('.selected').attr('data-session-id'), - err_msg = _self.translations.auth_failed[_self.lang]; - - _self.auth_pending = false; - _self.cache_set(selected_session, 'user', lightdm.authentication_user, 'session'); - - $('#timerArea').hide(); - - if (lightdm.is_authenticated) { - // The user entered the correct password. Let's log them in. - $('body').fadeOut(1000); - lightdm.login(lightdm.authentication_user, selected_session); - } else { - // The user did not enter the correct password. Show error message. - $('#statusArea').show(); - } - } - }, { - key: 'submit_password', - value: function submit_password(event) { - lightdm.respond($('#passwordField').val()); - $('#passwordArea').hide(); - $('#timerArea').show(); - } - }, { - key: 'session_toggle_handler', - value: function session_toggle_handler(event) { - var $session = $(this).children('a'), - session_name = $session.text(), - session_key = $session.attr('data-session-id'); - - $session.parents('.btn-group').find('.selected').attr('data-session-id', session_key).html(session_name); - } - }, { - key: 'key_press_handler', - value: function key_press_handler(event) { - var action; - switch (event.which) { - case 13: - action = _self.auth_pending ? _self.submit_password() : !_self.user_list_visible ? _self.show_user_list() : 0; - _self.log(action); - break; - case 27: - action = _self.auth_pending ? _self.cancel_authentication() : 0; - _self.log(action); - break; - case 32: - action = !_self.user_list_visible && !_self.auth_pending ? _self.show_user_list() : 0; - _self.log(action); - break; - default: - break; - } - } - }, { - key: 'system_action_handler', - value: function system_action_handler() { - var _this4 = this; - - var action = $(this).attr('id'), - $modal = $('.modal'); - - $modal.find('.btn-primary').text(_self.translations[action]).click(action, function (event) { - $(_this4).off('click'); - lightdm[event.data](); - }); - $modal.find('.btn-default').click(function () { - $(_this4).next().off('click'); - }); - - $modal.modal('toggle'); - } - }, { - key: 'user_list_collapse_handler', - value: function user_list_collapse_handler() { - _self.user_list_visible = _self.$user_list.hasClass('in') ? true : false; - } - }, { - key: 'user_image_error_handler', - value: function user_image_error_handler(event) { - $(this).off('error.antergos'); - $(this).attr('src', _self.tux); - } + system_action_handler() { + var action = $(this).attr('id'), + $modal = $('.modal'); - /** - * LightDM Callback - Show password prompt to user. - * - * @param text - * @param type - */ - - }, { - key: 'show_prompt', - value: function show_prompt(text, type) { - if ('password' === type) { - $('#passwordField').val(""); - $('#passwordArea').show(); - $('#passwordField').focus(); - } - } + $modal.find('.btn-primary').text(_self.translations[action]).click(action, event => { + $(this).off('click'); + lightdm[event.data](); + }); + $modal.find('.btn-default').click(() => { + $(this).next().off('click'); + }); - /** - * LightDM Callback - Show message to user. - * - * @param text - */ - - }, { - key: 'show_message', - value: function show_message(text, type) { - if (text.length > 0) { - $(this.$msg_area).html(text); - $('#passwordArea').hide(); - $(this.$msg_area_container).show(); - } + $modal.modal('toggle'); + } + + user_list_collapse_handler() { + _self.user_list_visible = _self.$user_list.hasClass('in') ? true : false; + } + + user_image_error_handler(event) { + $(this).off('error.antergos'); + $(this).attr('src', _self.tux); + } + + /** + * LightDM Callback - Show password prompt to user. + * + * @param text + * @param type + */ + show_prompt(text, type) { + if ('password' === type) { + $('#passwordField').val(""); + $('#passwordArea').show(); + $('#passwordField').focus(); } - }]); + } - return AntergosTheme; -})(GreeterThemeComponent); + /** + * LightDM Callback - Show message to user. + * + * @param text + */ + show_message(text, type) { + if (text.length > 0) { + $(this.$msg_area).html(text); + $('#passwordArea').hide(); + $(this.$msg_area_container).show(); + } + } +} /** * Initialize the theme once the window has loaded. */ - -$(window).load(function () { +$(window).load(() => { _self = new AntergosTheme(); }); diff --git a/themes/antergos/js/greeter-compiled.js.map b/themes/antergos/js/greeter-compiled.js.map index 1b9d03c..572d3bf 100644 --- a/themes/antergos/js/greeter-compiled.js.map +++ b/themes/antergos/js/greeter-compiled.js.map @@ -1 +1 @@ -{"version":3,"sources":["greeter.js"],"names":[],"mappings":"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","file":"greeter-compiled.js","sourcesContent":["/*\n *\n * Copyright © 2015-2016 Antergos\n *\n * greeter.js\n *\n * This file is part of lightdm-webkit-theme-antergos\n *\n * lightdm-webkit-theme-antergos is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License,\n * or any later version.\n *\n * lightdm-webkit-theme-antergos is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * The following additional terms are in effect as per Section 7 of this license:\n *\n * The preservation of all legal notices and author attributions in\n * the material or in the Appropriate Legal Notices displayed\n * by works containing it is required.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n\n/**\n * This is used to access our classes from within jQuery callbacks.\n */\nlet _self = null;\nlet _bg_self = null;\n\n\n/**\n * Capitalize a string.\n *\n * @returns {string}\n */\nString.prototype.capitalize = function() {\n\treturn this.charAt( 0 ).toUpperCase() + this.slice( 1 );\n};\n\n\n\n\n\n\n/**\n * This is the base class for the theme's components.\n */\nclass GreeterThemeComponent {\n\n\tconstructor() {\n\t\tthis.debug = this.cache_get( 'debug', 'enabled' );\n\t\tthis.lang = window.navigator.language.split( '-' )[ 0 ].toLowerCase();\n\t\tthis.translations = window.ant_translations;\n\n\t\tif ( 'undefined' === typeof window.navigator.languages ) {\n\t\t\twindow.navigator.languages = [ window.navigator.language ];\n\t\t}\n\n\t\tthis.init_config_values();\n\t}\n\n\n\t/**\n\t * Add text to the debug log element (accessible from the login screen).\n\t *\n\t * @param {string} text - To be added to the log.\n\t */\n\tlog( text ) {\n\t\tif ( 'true' === this.debug ) {\n\t\t\tconsole.log( text );\n\t\t}\n\t\t$( '#logArea' ).append( `${text}
    ` );\n\t}\n\n\n\t/**\n\t * Get a key's value from localStorage. Keys can have two or more parts.\n\t * For example: \"ant:user:john:session\".\n\t *\n\t * @param {...string} key_parts - Strings that are combined to form the key.\n\t */\n\tcache_get( ...key_parts ) {\n\t\tvar key = `ant`;\n\n\t\tfor ( var part of key_parts ) {\n\t\t\tkey += `:${part}`;\n\t\t}\n\t\treturn localStorage.getItem( key );\n\t}\n\n\n\t/**\n\t * Set a key's value in localStorage. Keys can have two or more parts.\n\t * For example: \"ant:user:john:session\".\n\t *\n\t * @param {string} value - The value to set.\n\t * @param {...string} key_parts - Strings that are combined to form the key.\n\t */\n\tcache_set( value, ...key_parts ) {\n\t\tvar key = `ant`;\n\n\t\tfor ( var part of key_parts ) {\n\t\t\tkey += `:${part}`;\n\t\t}\n\t\treturn localStorage.setItem( key, value );\n\t}\n\n\n\t/**\n\t * Get some values from `lightdm-webkit2-greeter.conf` and save them for later.\n\t */\n\tinit_config_values() {\n\t\tlet logo = '', user_image = '', background_images = [], background_images_dir = '';\n\n\t\tif ( 'undefined' !== typeof config ) {\n\t\t\tif ( this instanceof AntergosTheme ) {\n\t\t\t\tlogo = config.get_str( 'branding', 'logo' ) || '';\n\t\t\t\tuser_image = config.get_str( 'branding', 'user_image' ) || '';\n\n\t\t\t} else if ( this instanceof AntergosBackgroundManager ) {\n\t\t\t\tbackground_images_dir = config.get_str( 'branding', 'background_images' ) || '';\n\t\t\t\tif (background_images_dir) {\n\t\t\t\t\tbackground_images = greeterutil.dirlist(background_images_dir) || [];\n\t\t\t\t}\n\n\t\t\t\tif (background_images.length) {\n\t\t\t\t\tlet images = [];\n\t\t\t\t\tfor (var file of background_images) {\n\t\t\t\t\t\tif (file.match(/(png|PNG)|(jpg|JPEG)|(bmp|BMP)/)) {\n\t\t\t\t\t\t\timages.push(file);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbackground_images = images;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.logo = logo;\n\t\tthis.user_image = user_image;\n\t\tthis.background_images = background_images;\n\t\tthis.background_images_dir = background_images_dir;\n\t}\n}\n\n\n\n\n\n\n/**\n * This class handles the theme's background switcher.\n */\nclass AntergosBackgroundManager extends GreeterThemeComponent {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif ( null === _bg_self ) {\n\t\t\t_bg_self = this;\n\t\t}\n\n\t\tthis.current_background = this.cache_get( 'background_manager', 'current_background' );\n\n\t\tif ( ! this.background_images_dir.length || ! this.background_images.length ) {\n\t\t\tthis.log('AntergosBackgroundManager: [ERROR] No background images detected.');\n\n\t\t\t$( '.header' ).fadeTo( 300, 0.5, function() {\n\t\t\t\t$( '.header' ).css( \"background\", '#000000' );\n\t\t\t} ).fadeTo( 300, 1 );\n\n\t\t}\n\t\treturn _bg_self;\n\t}\n\n\n\tinitialize() {\n\t\tif ( ! this.current_background ) {\n\t\t\t// For backwards compatibility\n\t\t\tif ( null !== localStorage.getItem( 'bgsaved' ) && '0' === localStorage.getItem( 'bgrandom' ) ) {\n\t\t\t\tthis.current_background = localStorage.getItem( 'bgsaved' );\n\t\t\t\tthis.cache_set( this.current_background, 'background_manager', 'current_background' );\n\t\t\t\tlocalStorage.removeItem( 'bgrandom' );\n\t\t\t\tlocalStorage.removeItem( 'bgsaved' );\n\t\t\t} else if ( '0' === localStorage.getItem( 'bgrandom' ) ) {\n\t\t\t\tthis.current_background = this.get_random_image();\n\t\t\t\tthis.cache_set( 'true', 'background_manager', 'random_background' );\n\t\t\t\tlocalStorage.removeItem( 'bgrandom' );\n\t\t\t}\n\t\t}\n\n\t\tif ( ! this.current_background ) {\n\t\t\t// For current and future versions\n\t\t\tlet current_background = this.cache_get('background_manager', 'current_background' ),\n\t\t\t\trandom_background = this.cache_get('background_manager', 'random_background' );\n\n\t\t\tif ( 'true' === random_background || ! current_background ) {\n\t\t\t\tcurrent_background = this.get_random_image();\n\t\t\t}\n\n\t\t\tthis.current_background = current_background;\n\t\t}\n\n\t\tthis.do_background();\n\t}\n\n\n\tdo_background() {\n\t\t$( '.header' ).fadeTo( 300, 0.5, function() {\n\t\t\tlet tpl = `url('file://${this.current_background}')`;\n\t\t\t$( '.header' ).css( \"background-image\", tpl );\n\t\t} ).fadeTo( 300, 1 );\n\t}\n\n\n\tget_random_image() {\n\t\tlet random_bg;\n\n\t\trandom_bg = Math.floor( Math.random() * this.background_images.length );\n\n\t\treturn this.background_images[ random_bg ];\n\t}\n\n\tsetup_background_thumbnails() {\n\t\tif (this.background_images.length) {\n\t\t\tfor ( var image_file of this.background_images ) {\n\t\t\t\tlet $link = $(''),\n\t\t\t\t\t$img_el = $link.children('img'),\n\t\t\t\t\ttpl = `file://${image_file}`;\n\n\t\t\t\t$link.addClass('bg clearfix').attr('data-img', tpl);\n\t\t\t\t$img_el.attr('src', tpl);\n\n\t\t\t\t$link.appendTo($('.bgs')).click( this.background_selected_handler );\n\t\t\t}\n\t\t}\n\t}\n\n\n\tbackground_selected_handler( event ) {\n\t\tlet img = $(this).attr('data-img');\n\n\t\tif ('random' === img) {\n\t\t\tthis.cache_set('true', 'background_manager', 'randmom_background' );\n\t\t\timg = this.get_random_image();\n\t\t}\n\n\t\tthis.cache_set(img, 'background_manager', 'current_background' );\n\t\tthis.current_background = img;\n\n\t\tthis.do_background();\n\n\t}\n}\n\n\n\n\n\n\n/**\n * This is the theme's main class object. It contains almost all the theme's logic.\n */\nclass AntergosTheme extends GreeterThemeComponent {\n\n\tconstructor() {\n\t\tsuper();\n\t\tif ( null === _self ) {\n\t\t\t_self = this;\n\t\t}\n\t\tthis.tux = 'img/antergos-logo-user.png';\n\t\tthis.user_list_visible = false;\n\t\tthis.auth_pending = false;\n\t\tthis.selected_user = null;\n\t\tthis.$user_list = $( '#user-list2' );\n\t\tthis.$session_list = $( '#sessions' );\n\t\tthis.$clock_container = $( '#collapseOne' );\n\t\tthis.$clock = $( \"#current_time\" );\n\t\tthis.$actions_container = $( \"#actionsArea\" );\n\t\tthis.$msg_area_container = $( '#statusArea' );\n\t\tthis.$msg_area = $( '#showMsg' );\n\t\tthis.background_manager = new AntergosBackgroundManager();\n\n\t\tthis.background_manager.initialize();\n\t\tthis.initialize();\n\n\t\treturn _self;\n\t}\n\n\tinitialize() {\n\t\tthis.prepare_translations();\n\t\tthis.do_static_translations();\n\t\tthis.initialize_clock();\n\t\tthis.prepare_login_panel_header();\n\t\tthis.prepare_user_list();\n\t\tthis.prepare_session_list();\n\t\tthis.prepare_system_action_buttons();\n\t\t$( \"#login\" ).addClass( \"in\" );\n\t\tthis.register_callbacks();\n\t\tthis.background_manager.setup_background_thumbnails();\n\t}\n\n\n\t/**\n\t * Register callbacks for the LDM Greeter as well as any others that haven't been registered\n\t * elsewhere.\n\t */\n\tregister_callbacks() {\n\t\tvar events = 'shown.bs.collapse, hidden.bs.collapse';\n\n\t\tthis.$user_list.parents( '.collapse' ).on( events, this.user_list_collapse_handler );\n\t\t$( document ).keydown( this.key_press_handler );\n\t\t$( '.cancel_auth' ).click( this.cancel_authentication );\n\t\t$( '.submit_passwd' ).click( this.submit_password );\n\n\t\twindow.show_prompt = this.show_prompt;\n\t\twindow.show_message = this.show_message;\n\t\twindow.start_authentication = this.start_authentication;\n\t\twindow.cancel_authentication = this.cancel_authentication;\n\t\twindow.authentication_complete = this.authentication_complete;\n\t\twindow.autologin_timer_expired = this.cancel_authentication;\n\t}\n\n\t/**\n\t * Initialize the user list.\n\t */\n\tprepare_user_list() {\n\t\tvar template;\n\n\t\t// Loop through the array of LightDMUser objects to create our user list.\n\t\tfor ( var user of lightdm.users ) {\n\t\t\tvar last_session = this.cache_get( 'user', user.name, 'session' ),\n\t\t\t\timage_src = user.image.length ? user.image : this.user_image;\n\n\t\t\tif ( null === last_session ) {\n\t\t\t\t// For backwards compatibility\n\t\t\t\tlast_session = localStorage.getItem( user.name );\n\t\t\t\tif ( null === last_session ) {\n\t\t\t\t\t// This user has never logged in before let's enable the system's default\n\t\t\t\t\t// session.\n\t\t\t\t\tlast_session = lightdm.default_session;\n\t\t\t\t}\n\t\t\t\tthis.cache_set( last_session, 'user', user.name, 'session' );\n\t\t\t}\n\n\t\t\tthis.log( `Last session for ${user.name} was: ${last_session}` );\n\n\t\t\ttemplate = `\n\t\t\t\t\n\t\t\t\t\t\"${user.display_name}\"\n\t\t\t\t\t${user.display_name}\n\t\t\t\t\t\n\t\t\t\t`;\n\n\t\t\t// Register event handler here so we don't have to iterate over the users again later.\n\t\t\t$( template ).appendTo( this.$user_list ).click( this.start_authentication ).on('error.antergos', this.user_image_error_handler);\n\n\t\t} // END for ( var user of lightdm.users )\n\n\t\tif ( $( this.$user_list ).children().length > 3 ) {\n\t\t\t// Make the user list two columns instead of one.\n\t\t\t$( this.$user_list ).css( 'column-count', '2' ).parent().css( 'max-width', '85%' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Initialize the session selection dropdown.\n\t */\n\tprepare_session_list() {\n\t\t// Loop through the array of LightDMSession objects to create our session list.\n\t\tfor ( var session of lightdm.sessions ) {\n\t\t\tvar css_class = session.name.replace( / /g, '' ),\n\t\t\t\ttemplate;\n\n\t\t\tthis.log( `Adding ${session.name} to the session list...` );\n\n\t\t\ttemplate = `\n\t\t\t\t
  • \n\t\t\t\t\t${session.name}\n\t\t\t\t
  • `;\n\n\t\t\t$( template ).appendTo( this.$session_list ).click( this.session_toggle_handler );\n\n\t\t} // END for (var session of lightdm.sessions)\n\n\t\t$( '.dropdown-toggle' ).dropdown();\n\t}\n\n\t/**\n\t * Initialize the system action buttons\n\t */\n\tprepare_system_action_buttons() {\n\t\tvar actions = {\n\t\t\t\tshutdown: \"power-off\",\n\t\t\t\thibernate: \"asterisk\",\n\t\t\t\tsuspend: \"arrow-down\",\n\t\t\t\trestart: \"refresh\"\n\t\t\t},\n\t\t\ttemplate;\n\n\t\tfor ( var action of Object.keys( actions ) ) {\n\t\t\tvar cmd = `can_${action}`;\n\n\t\t\ttemplate = `\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t`;\n\n\t\t\tif ( lightdm[ cmd ] ) {\n\t\t\t\t$( template ).appendTo( $( this.$actions_container ) ).click( this.system_action_handler );\n\t\t\t}\n\t\t} // END for (var [action, icon] of actions)\n\n\t\t$( '[data-toggle=tooltip]' ).tooltip();\n\t\t$('.modal').modal({show: false});\n\t}\n\n\tinitialize_clock() {\n\t\tvar saved_format = this.cache_get( 'clock', 'time_format' ),\n\t\t\tformat = (null !== saved_format) ? saved_format : 'LT';\n\n\t\tmoment.locale( window.navigator.languages );\n\t\tthis.$clock.html( moment().format( format ) );\n\n\t\tsetInterval( () => {\n\t\t\tthis.$clock.html( moment().format( format ) );\n\t\t}, 60000 );\n\t}\n\n\n\t/**\n\t * Show the user list if its not already shown. This is used to allow the user to\n\t * display the user list by pressing Enter or Spacebar.\n\t */\n\tshow_user_list() {\n\t\tif ( $( this.$clock_container ).hasClass( 'in' ) ) {\n\t\t\t$( '#trigger' ).trigger( 'click' );\n\t\t}\n\t\tif ( $( this.$user_list ).length <= 1 ) {\n\t\t\t$( this.$user_list ).find( 'a' ).trigger( 'click', this );\n\t\t}\n\t}\n\n\n\tprepare_login_panel_header() {\n\t\tvar greeting = (this.translations.greeting) ? this.translations.greeting : 'Welcome!',\n\t\t\tlogo = ( '' !== this.logo ) ? this.logo : 'img/antergos.png';\n\n\t\t$( '.welcome' ).text( greeting );\n\t\t$( '#hostname' ).append( lightdm.hostname );\n\t\t$('[data-greeter-config=\"logo\"]').attr('src', logo);\n\t}\n\n\n\tprepare_translations() {\n\t\tif ( ! this.translations.hasOwnProperty( this.lang ) ) {\n\t\t\tfor ( var lang of window.navigator.languages ) {\n\t\t\t\tif ( this.translations.hasOwnProperty( lang ) ) {\n\t\t\t\t\tthis.lang = lang;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ( ! this.translations.hasOwnProperty( this.lang ) ) {\n\t\t\tthis.lang = 'en';\n\t\t}\n\n\t\tthis.translations = this.translations[ this.lang ];\n\t}\n\n\n\t/**\n\t * Replace '${i18n}' with translated string for all elements that\n\t * have the data-i18n attribute. This is for elements that are not generated\n\t * dynamically (they can be found in index.html).\n\t */\n\tdo_static_translations() {\n\t\t$( '[data-i18n]' ).each( function() {\n\t\t\tvar key = $( this ).attr( 'data-i18n' ),\n\t\t\t\thtml = $( this ).html(),\n\t\t\t\ttranslated = _self.translations[ key ],\n\t\t\t\tnew_html = html.replace( '${i18n}', translated );\n\n\t\t\t$( this ).html( new_html );\n\t\t} );\n\t}\n\n\n\t/**\n\t * Start the authentication process for the selected user.\n\t *\n\t * @param {object} event - jQuery.Event object from 'click' event.\n\t */\n\tstart_authentication( event ) {\n\t\tvar user_id = $( this ).attr( 'id' ),\n\t\t\tselector = `.${user_id}`,\n\t\t\tuser_session = _self.cache_get( 'user', user_id, 'session' );\n\n\t\tif ( _self.auth_pending || null !== _self.selected_user ) {\n\t\t\tlightdm.cancel_authentication();\n\t\t\t_self.log( `Authentication cancelled for ${_self.selected_user}` );\n\t\t\t_self.selected_user = null;\n\t\t}\n\n\t\t_self.log( `Starting authentication for ${user_id}.` );\n\t\t_self.selected_user = user_id;\n\n\t\t// CSS hack to workaround webkit bug\n\t\tif ( $( _self.$user_list ).children().length > 3 ) {\n\t\t\t$( _self.$user_list ).css( 'column-count', 'initial' ).parent().css( 'max-width', '50%' );\n\t\t}\n\t\t$( selector ).addClass( 'hovered' ).siblings().hide();\n\t\t$( '.fa-toggle-down' ).hide();\n\n\t\t_self.log( `Session for ${user_id} is ${user_session}` );\n\n\t\t$( `[data-session-id=\"${user_session}\"]` ).parent().trigger( 'click', this );\n\n\t\t$( '#session-list' ).removeClass( 'hidden' ).show();\n\t\t$( '#passwordArea' ).show();\n\t\t$( '.dropdown-toggle' ).dropdown();\n\n\t\t_self.auth_pending = true;\n\n\t\tlightdm.authenticate( user_id );\n\t}\n\n\n\t/**\n\t * Cancel the pending authentication.\n\t *\n\t * @param {object} event - jQuery.Event object from 'click' event.\n\t */\n\tcancel_authentication( event ) {\n\t\tvar selectors = [ '#statusArea', '#timerArea', '#passwordArea', '#session-list' ];\n\n\t\tfor ( var selector of selectors ) {\n\t\t\t$( selector ).hide();\n\t\t}\n\n\t\tlightdm.cancel_authentication();\n\n\t\t_self.log( 'Cancelled authentication.' );\n\n\t\t// CSS hack to work-around webkit bug\n\t\tif ( $( _self.$user_list ).children().length > 3 ) {\n\t\t\t$( _self.$user_list ).css( 'column-count', '2' ).parent().css( 'max-width', '85%' );\n\t\t}\n\n\t\t$( '.hovered' ).removeClass( 'hovered' ).siblings().show();\n\t\t$( '.fa-toggle-down' ).show();\n\n\t\t_self.selected_user = null;\n\t\t_self.auth_pending = false;\n\n\t}\n\n\n\t/**\n\t * Called when the user attempts to authenticate (inputs password).\n\t * We check to see if the user successfully authenticated and if so tell the LDM\n\t * Greeter to log them in with the session they selected.\n\t */\n\tauthentication_complete() {\n\t\tvar selected_session = $( '.selected' ).attr( 'data-session-id' ),\n\t\t\terr_msg = _self.translations.auth_failed[ _self.lang ];\n\n\t\t_self.auth_pending = false;\n\t\t_self.cache_set( selected_session, 'user', lightdm.authentication_user, 'session' );\n\n\t\t$( '#timerArea' ).hide();\n\n\t\tif ( lightdm.is_authenticated ) {\n\t\t\t// The user entered the correct password. Let's log them in.\n\t\t\t$('body').fadeOut(1000);\n\t\t\tlightdm.login( lightdm.authentication_user, selected_session );\n\t\t} else {\n\t\t\t// The user did not enter the correct password. Show error message.\n\t\t\t$( '#statusArea' ).show();\n\t\t}\n\t}\n\n\tsubmit_password( event ) {\n\t\tlightdm.respond( $( '#passwordField' ).val() );\n\t\t$( '#passwordArea' ).hide();\n\t\t$( '#timerArea' ).show();\n\t}\n\n\tsession_toggle_handler( event ) {\n\t\tvar $session = $( this ).children( 'a' ),\n\t\t\tsession_name = $session.text(),\n\t\t\tsession_key = $session.attr( 'data-session-id' );\n\n\t\t$session.parents( '.btn-group' ).find( '.selected' ).attr( 'data-session-id', session_key ).html( session_name );\n\t}\n\n\tkey_press_handler( event ) {\n\t\tvar action;\n\t\tswitch ( event.which ) {\n\t\t\tcase 13:\n\t\t\t\taction = _self.auth_pending ? _self.submit_password() : ! _self.user_list_visible ? _self.show_user_list() : 0;\n\t\t\t\t_self.log( action );\n\t\t\t\tbreak;\n\t\t\tcase 27:\n\t\t\t\taction = _self.auth_pending ? _self.cancel_authentication() : 0;\n\t\t\t\t_self.log( action );\n\t\t\t\tbreak;\n\t\t\tcase 32:\n\t\t\t\taction = (! _self.user_list_visible && ! _self.auth_pending) ? _self.show_user_list() : 0;\n\t\t\t\t_self.log( action );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsystem_action_handler() {\n\t\tvar action = $( this ).attr( 'id' ),\n\t\t\t$modal = $( '.modal' );\n\n\t\t$modal.find( '.btn-primary' ).text( _self.translations[ action ] ).click( action, ( event ) => {\n\t\t\t$( this ).off( 'click' );\n\t\t\tlightdm[ event.data ]();\n\t\t} );\n\t\t$modal.find( '.btn-default' ).click( () => {\n\t\t\t$( this ).next().off( 'click' );\n\t\t} );\n\n\t\t$modal.modal('toggle');\n\t}\n\n\n\tuser_list_collapse_handler() {\n\t\t_self.user_list_visible = _self.$user_list.hasClass( 'in' ) ? true : false;\n\t}\n\n\n\tuser_image_error_handler( event ) {\n\t\t$(this).off('error.antergos');\n\t\t$(this).attr('src', _self.tux);\n\t}\n\n\n\t/**\n\t * LightDM Callback - Show password prompt to user.\n\t *\n\t * @param text\n\t * @param type\n\t */\n\tshow_prompt( text, type ) {\n\t\tif ( 'password' === type ) {\n\t\t\t$( '#passwordField' ).val( \"\" );\n\t\t\t$( '#passwordArea' ).show();\n\t\t\t$( '#passwordField' ).focus();\n\t\t}\n\t}\n\n\t/**\n\t * LightDM Callback - Show message to user.\n\t *\n\t * @param text\n\t */\n\tshow_message( text, type ) {\n\t\tif ( text.length > 0 ) {\n\t\t\t$( this.$msg_area ).html( text );\n\t\t\t$( '#passwordArea' ).hide();\n\t\t\t$( this.$msg_area_container ).show();\n\t\t}\n\t}\n}\n\n\n/**\n * Initialize the theme once the window has loaded.\n */\n$( window ).load( () => {\n\t_self = new AntergosTheme();\n} );\n\n"]} \ No newline at end of file +{"version":3,"sources":["greeter.js"],"names":[],"mappings":"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","file":"greeter-compiled.js","sourcesContent":["/*\n *\n * Copyright © 2015-2016 Antergos\n *\n * greeter.js\n *\n * This file is part of lightdm-webkit-theme-antergos\n *\n * lightdm-webkit-theme-antergos is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License,\n * or any later version.\n *\n * lightdm-webkit-theme-antergos is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * The following additional terms are in effect as per Section 7 of this license:\n *\n * The preservation of all legal notices and author attributions in\n * the material or in the Appropriate Legal Notices displayed\n * by works containing it is required.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n\n/**\n * This is used to access our classes from within jQuery callbacks.\n */\nlet _self = null;\nlet _bg_self = null;\n\n\n/**\n * Capitalize a string.\n *\n * @returns {string}\n */\nString.prototype.capitalize = function() {\n\treturn this.charAt( 0 ).toUpperCase() + this.slice( 1 );\n};\n\n\n\n\n\n\n/**\n * This is the base class for the theme's components.\n */\nclass GreeterThemeComponent {\n\n\tconstructor() {\n\t\tthis.debug = this.cache_get( 'debug', 'enabled' );\n\t\tthis.lang = window.navigator.language.split( '-' )[ 0 ].toLowerCase();\n\t\tthis.translations = window.ant_translations;\n\n\t\tif ( 'undefined' === typeof window.navigator.languages ) {\n\t\t\twindow.navigator.languages = [ window.navigator.language ];\n\t\t}\n\n\t\tthis.init_config_values();\n\t}\n\n\n\t/**\n\t * Add text to the debug log element (accessible from the login screen).\n\t *\n\t * @param {string} text - To be added to the log.\n\t */\n\tlog( text ) {\n\t\tif ( 'true' === this.debug ) {\n\t\t\tconsole.log( text );\n\t\t}\n\t\t$( '#logArea' ).append( `${text}
    ` );\n\t}\n\n\n\t/**\n\t * Get a key's value from localStorage. Keys can have two or more parts.\n\t * For example: \"ant:user:john:session\".\n\t *\n\t * @param {...string} key_parts - Strings that are combined to form the key.\n\t */\n\tcache_get( ...key_parts ) {\n\t\tvar key = `ant`;\n\n\t\tfor ( var part of key_parts ) {\n\t\t\tkey += `:${part}`;\n\t\t}\n\t\treturn localStorage.getItem( key );\n\t}\n\n\n\t/**\n\t * Set a key's value in localStorage. Keys can have two or more parts.\n\t * For example: \"ant:user:john:session\".\n\t *\n\t * @param {string} value - The value to set.\n\t * @param {...string} key_parts - Strings that are combined to form the key.\n\t */\n\tcache_set( value, ...key_parts ) {\n\t\tvar key = `ant`;\n\n\t\tfor ( var part of key_parts ) {\n\t\t\tkey += `:${part}`;\n\t\t}\n\t\treturn localStorage.setItem( key, value );\n\t}\n\n\n\t/**\n\t * Get some values from `lightdm-webkit2-greeter.conf` and save them for later.\n\t */\n\tinit_config_values() {\n\t\tlet logo = '', user_image = '', background_images = [], background_images_dir = '';\n\n\t\tif ( 'undefined' !== typeof config ) {\n\t\t\tif ( this instanceof AntergosTheme ) {\n\t\t\t\tlogo = config.get_str( 'branding', 'logo' ) || '';\n\t\t\t\tuser_image = config.get_str( 'branding', 'user_image' ) || '';\n\n\t\t\t} else if ( this instanceof AntergosBackgroundManager ) {\n\t\t\t\tbackground_images_dir = config.get_str( 'branding', 'background_images' ) || '';\n\t\t\t\tif (background_images_dir) {\n\t\t\t\t\tbackground_images = greeterutil.dirlist(background_images_dir) || [];\n\t\t\t\t}\n\n\t\t\t\tif (background_images.length) {\n\t\t\t\t\tlet images = [];\n\t\t\t\t\tfor (var file of background_images) {\n\t\t\t\t\t\tif (file.match(/(png|PNG)|(jpg|JPEG)|(bmp|BMP)/)) {\n\t\t\t\t\t\t\timages.push(file);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbackground_images = images;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.logo = logo;\n\t\tthis.user_image = user_image;\n\t\tthis.background_images = background_images;\n\t\tthis.background_images_dir = background_images_dir;\n\t}\n}\n\n\n\n\n\n\n/**\n * This class handles the theme's background switcher.\n */\nclass AntergosBackgroundManager extends GreeterThemeComponent {\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tif ( null === _bg_self ) {\n\t\t\t_bg_self = this;\n\t\t}\n\n\t\tthis.current_background = this.cache_get( 'background_manager', 'current_background' );\n\n\t\tif ( ! this.background_images_dir.length || ! this.background_images.length ) {\n\t\t\tthis.log('AntergosBackgroundManager: [ERROR] No background images detected.');\n\n\t\t\t$( '.header' ).fadeTo( 300, 0.5, function() {\n\t\t\t\t$( '.header' ).css( \"background\", '#000000' );\n\t\t\t} ).fadeTo( 300, 1 );\n\n\t\t}\n\t\treturn _bg_self;\n\t}\n\n\n\tinitialize() {\n\t\tif ( ! this.current_background ) {\n\t\t\t// For backwards compatibility\n\t\t\tif ( null !== localStorage.getItem( 'bgsaved' ) && '0' === localStorage.getItem( 'bgrandom' ) ) {\n\t\t\t\tthis.current_background = localStorage.getItem( 'bgsaved' );\n\t\t\t\tthis.cache_set( this.current_background, 'background_manager', 'current_background' );\n\t\t\t\tlocalStorage.removeItem( 'bgrandom' );\n\t\t\t\tlocalStorage.removeItem( 'bgsaved' );\n\t\t\t} else if ( '0' === localStorage.getItem( 'bgrandom' ) ) {\n\t\t\t\tthis.current_background = this.get_random_image();\n\t\t\t\tthis.cache_set( 'true', 'background_manager', 'random_background' );\n\t\t\t\tlocalStorage.removeItem( 'bgrandom' );\n\t\t\t}\n\t\t}\n\n\t\tif ( ! this.current_background ) {\n\t\t\t// For current and future versions\n\t\t\tlet current_background = this.cache_get('background_manager', 'current_background' ),\n\t\t\t\trandom_background = this.cache_get('background_manager', 'random_background' );\n\n\t\t\tif ( 'true' === random_background || ! current_background ) {\n\t\t\t\tcurrent_background = this.get_random_image();\n\t\t\t}\n\n\t\t\tthis.current_background = current_background;\n\t\t}\n\n\t\tthis.do_background();\n\t}\n\n\n\tdo_background() {\n\t\t$( '.header' ).fadeTo( 300, 0.5, function() {\n\t\t\tlet tpl = `url('file://${this.current_background}')`;\n\t\t\t$( '.header' ).css( \"background-image\", tpl );\n\t\t} ).fadeTo( 300, 1 );\n\t}\n\n\n\tget_random_image() {\n\t\tlet random_bg;\n\n\t\trandom_bg = Math.floor( Math.random() * this.background_images.length );\n\n\t\treturn this.background_images[ random_bg ];\n\t}\n\n\tsetup_background_thumbnails() {\n\t\tif (this.background_images.length) {\n\t\t\tfor ( var image_file of this.background_images ) {\n\t\t\t\tlet $link = $(''),\n\t\t\t\t\t$img_el = $link.children('img'),\n\t\t\t\t\ttpl = `file://${image_file}`;\n\n\t\t\t\t$link.addClass('bg clearfix').attr('data-img', tpl);\n\t\t\t\t$img_el.attr('src', tpl);\n\n\t\t\t\t$link.appendTo($('.bgs')).click( this.background_selected_handler );\n\t\t\t}\n\t\t}\n\t}\n\n\n\tbackground_selected_handler( event ) {\n\t\tlet img = $(this).attr('data-img');\n\n\t\tif ('random' === img) {\n\t\t\tthis.cache_set('true', 'background_manager', 'randmom_background' );\n\t\t\timg = this.get_random_image();\n\t\t}\n\n\t\tthis.cache_set(img, 'background_manager', 'current_background' );\n\t\tthis.current_background = img;\n\n\t\tthis.do_background();\n\n\t}\n}\n\n\n\n\n\n\n\n/**\n * This is the theme's main class object. It contains almost all the theme's logic.\n */\nclass AntergosTheme extends GreeterThemeComponent {\n\n\tconstructor() {\n\t\tsuper();\n\t\tif ( null === _self ) {\n\t\t\t_self = this;\n\t\t}\n\t\tthis.tux = 'img/antergos-logo-user.png';\n\t\tthis.user_list_visible = false;\n\t\tthis.auth_pending = false;\n\t\tthis.selected_user = null;\n\t\tthis.$user_list = $( '#user-list2' );\n\t\tthis.$session_list = $( '#sessions' );\n\t\tthis.$clock_container = $( '#collapseOne' );\n\t\tthis.$clock = $( \"#current_time\" );\n\t\tthis.$actions_container = $( \"#actionsArea\" );\n\t\tthis.$msg_area_container = $( '#statusArea' );\n\t\tthis.$msg_area = $( '#showMsg' );\n\t\tthis.background_manager = new AntergosBackgroundManager();\n\n\t\tthis.background_manager.initialize();\n\t\tthis.initialize();\n\n\t\treturn _self;\n\t}\n\n\tinitialize() {\n\t\tthis.prepare_translations();\n\t\tthis.do_static_translations();\n\t\tthis.initialize_clock();\n\t\tthis.prepare_login_panel_header();\n\t\tthis.prepare_user_list();\n\t\tthis.prepare_session_list();\n\t\tthis.prepare_system_action_buttons();\n\t\t$( \"#login\" ).addClass( \"in\" );\n\t\tthis.register_callbacks();\n\t\tthis.background_manager.setup_background_thumbnails();\n\t}\n\n\n\t/**\n\t * Register callbacks for the LDM Greeter as well as any others that haven't been registered\n\t * elsewhere.\n\t */\n\tregister_callbacks() {\n\t\tvar events = 'shown.bs.collapse, hidden.bs.collapse';\n\n\t\tthis.$user_list.parents( '.collapse' ).on( events, this.user_list_collapse_handler );\n\t\t$( document ).keydown( this.key_press_handler );\n\t\t$( '.cancel_auth' ).click( this.cancel_authentication );\n\t\t$( '.submit_passwd' ).click( this.submit_password );\n\n\t\twindow.show_prompt = this.show_prompt;\n\t\twindow.show_message = this.show_message;\n\t\twindow.start_authentication = this.start_authentication;\n\t\twindow.cancel_authentication = this.cancel_authentication;\n\t\twindow.authentication_complete = this.authentication_complete;\n\t\twindow.autologin_timer_expired = this.cancel_authentication;\n\t}\n\n\t/**\n\t * Initialize the user list.\n\t */\n\tprepare_user_list() {\n\t\tvar template;\n\n\t\t// Loop through the array of LightDMUser objects to create our user list.\n\t\tfor ( var user of lightdm.users ) {\n\t\t\tvar last_session = this.cache_get( 'user', user.name, 'session' ),\n\t\t\t\timage_src = user.image.length ? user.image : this.user_image;\n\n\t\t\tif ( null === last_session ) {\n\t\t\t\t// For backwards compatibility\n\t\t\t\tlast_session = localStorage.getItem( user.name );\n\t\t\t\tif ( null === last_session ) {\n\t\t\t\t\t// This user has never logged in before let's enable the system's default\n\t\t\t\t\t// session.\n\t\t\t\t\tlast_session = lightdm.default_session;\n\t\t\t\t}\n\t\t\t\tthis.cache_set( last_session, 'user', user.name, 'session' );\n\t\t\t}\n\n\t\t\tthis.log( `Last session for ${user.name} was: ${last_session}` );\n\n\t\t\ttemplate = `\n\t\t\t\t\n\t\t\t\t\t\"${user.display_name}\"\n\t\t\t\t\t${user.display_name}\n\t\t\t\t\t\n\t\t\t\t`;\n\n\t\t\t// Register event handler here so we don't have to iterate over the users again later.\n\t\t\t$( template ).appendTo( this.$user_list ).click( this.start_authentication ).on('error.antergos', this.user_image_error_handler);\n\n\t\t} // END for ( var user of lightdm.users )\n\n\t\tif ( $( this.$user_list ).children().length > 3 ) {\n\t\t\t// Make the user list two columns instead of one.\n\t\t\t$( this.$user_list ).css( 'column-count', '2' ).parent().css( 'max-width', '85%' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Initialize the session selection dropdown.\n\t */\n\tprepare_session_list() {\n\t\t// Loop through the array of LightDMSession objects to create our session list.\n\t\tfor ( var session of lightdm.sessions ) {\n\t\t\tvar css_class = session.name.replace( / /g, '' ),\n\t\t\t\ttemplate;\n\n\t\t\tthis.log( `Adding ${session.name} to the session list...` );\n\n\t\t\ttemplate = `\n\t\t\t\t
  • \n\t\t\t\t\t${session.name}\n\t\t\t\t
  • `;\n\n\t\t\t$( template ).appendTo( this.$session_list ).click( this.session_toggle_handler );\n\n\t\t} // END for (var session of lightdm.sessions)\n\n\t\t$( '.dropdown-toggle' ).dropdown();\n\t}\n\n\t/**\n\t * Initialize the system action buttons\n\t */\n\tprepare_system_action_buttons() {\n\t\tvar actions = {\n\t\t\t\tshutdown: \"power-off\",\n\t\t\t\thibernate: \"asterisk\",\n\t\t\t\tsuspend: \"arrow-down\",\n\t\t\t\trestart: \"refresh\"\n\t\t\t},\n\t\t\ttemplate;\n\n\t\tfor ( var action of Object.keys( actions ) ) {\n\t\t\tvar cmd = `can_${action}`;\n\n\t\t\ttemplate = `\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t`;\n\n\t\t\tif ( lightdm[ cmd ] ) {\n\t\t\t\t$( template ).appendTo( $( this.$actions_container ) ).click( this.system_action_handler );\n\t\t\t}\n\t\t} // END for (var [action, icon] of actions)\n\n\t\t$( '[data-toggle=tooltip]' ).tooltip();\n\t\t$('.modal').modal({show: false});\n\t}\n\n\tinitialize_clock() {\n\t\tvar saved_format = this.cache_get( 'clock', 'time_format' ),\n\t\t\tformat = (null !== saved_format) ? saved_format : 'LT';\n\n\t\tmoment.locale( window.navigator.languages );\n\t\tthis.$clock.html( moment().format( format ) );\n\n\t\tsetInterval( () => {\n\t\t\tthis.$clock.html( moment().format( format ) );\n\t\t}, 60000 );\n\t}\n\n\n\t/**\n\t * Show the user list if its not already shown. This is used to allow the user to\n\t * display the user list by pressing Enter or Spacebar.\n\t */\n\tshow_user_list() {\n\t\tif ( $( this.$clock_container ).hasClass( 'in' ) ) {\n\t\t\t$( '#trigger' ).trigger( 'click' );\n\t\t}\n\t\tif ( $( this.$user_list ).length <= 1 ) {\n\t\t\t$( this.$user_list ).find( 'a' ).trigger( 'click', this );\n\t\t}\n\t}\n\n\n\tprepare_login_panel_header() {\n\t\tvar greeting = (this.translations.greeting) ? this.translations.greeting : 'Welcome!',\n\t\t\tlogo = ( '' !== this.logo ) ? this.logo : 'img/antergos.png';\n\n\t\t$( '.welcome' ).text( greeting );\n\t\t$( '#hostname' ).append( lightdm.hostname );\n\t\t$('[data-greeter-config=\"logo\"]').attr('src', logo);\n\t}\n\n\n\tprepare_translations() {\n\t\tif ( ! this.translations.hasOwnProperty( this.lang ) ) {\n\t\t\tfor ( var lang of window.navigator.languages ) {\n\t\t\t\tif ( this.translations.hasOwnProperty( lang ) ) {\n\t\t\t\t\tthis.lang = lang;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ( ! this.translations.hasOwnProperty( this.lang ) ) {\n\t\t\tthis.lang = 'en';\n\t\t}\n\n\t\tthis.translations = this.translations[ this.lang ];\n\t}\n\n\n\t/**\n\t * Replace '${i18n}' with translated string for all elements that\n\t * have the data-i18n attribute. This is for elements that are not generated\n\t * dynamically (they can be found in index.html).\n\t */\n\tdo_static_translations() {\n\t\t$( '[data-i18n]' ).each( function() {\n\t\t\tvar key = $( this ).attr( 'data-i18n' ),\n\t\t\t\thtml = $( this ).html(),\n\t\t\t\ttranslated = _self.translations[ key ],\n\t\t\t\tnew_html = html.replace( '${i18n}', translated );\n\n\t\t\t$( this ).html( new_html );\n\t\t} );\n\t}\n\n\n\t/**\n\t * Start the authentication process for the selected user.\n\t *\n\t * @param {object} event - jQuery.Event object from 'click' event.\n\t */\n\tstart_authentication( event ) {\n\t\tvar user_id = $( this ).attr( 'id' ),\n\t\t\tselector = `.${user_id}`,\n\t\t\tuser_session = _self.cache_get( 'user', user_id, 'session' );\n\n\t\tif ( _self.auth_pending || null !== _self.selected_user ) {\n\t\t\tlightdm.cancel_authentication();\n\t\t\t_self.log( `Authentication cancelled for ${_self.selected_user}` );\n\t\t\t_self.selected_user = null;\n\t\t}\n\n\t\t_self.log( `Starting authentication for ${user_id}.` );\n\t\t_self.selected_user = user_id;\n\n\t\t// CSS hack to workaround webkit bug\n\t\tif ( $( _self.$user_list ).children().length > 3 ) {\n\t\t\t$( _self.$user_list ).css( 'column-count', 'initial' ).parent().css( 'max-width', '50%' );\n\t\t}\n\t\t$( selector ).addClass( 'hovered' ).siblings().hide();\n\t\t$( '.fa-toggle-down' ).hide();\n\n\t\t_self.log( `Session for ${user_id} is ${user_session}` );\n\n\t\t$( `[data-session-id=\"${user_session}\"]` ).parent().trigger( 'click', this );\n\n\t\t$( '#session-list' ).removeClass( 'hidden' ).show();\n\t\t$( '#passwordArea' ).show();\n\t\t$( '.dropdown-toggle' ).dropdown();\n\n\t\t_self.auth_pending = true;\n\n\t\tlightdm.authenticate( user_id );\n\t}\n\n\n\t/**\n\t * Cancel the pending authentication.\n\t *\n\t * @param {object} event - jQuery.Event object from 'click' event.\n\t */\n\tcancel_authentication( event ) {\n\t\tvar selectors = [ '#statusArea', '#timerArea', '#passwordArea', '#session-list' ];\n\n\t\tfor ( var selector of selectors ) {\n\t\t\t$( selector ).hide();\n\t\t}\n\n\t\tlightdm.cancel_authentication();\n\n\t\t_self.log( 'Cancelled authentication.' );\n\n\t\t// CSS hack to work-around webkit bug\n\t\tif ( $( _self.$user_list ).children().length > 3 ) {\n\t\t\t$( _self.$user_list ).css( 'column-count', '2' ).parent().css( 'max-width', '85%' );\n\t\t}\n\n\t\t$( '.hovered' ).removeClass( 'hovered' ).siblings().show();\n\t\t$( '.fa-toggle-down' ).show();\n\n\t\t_self.selected_user = null;\n\t\t_self.auth_pending = false;\n\n\t}\n\n\n\t/**\n\t * Called when the user attempts to authenticate (inputs password).\n\t * We check to see if the user successfully authenticated and if so tell the LDM\n\t * Greeter to log them in with the session they selected.\n\t */\n\tauthentication_complete() {\n\t\tvar selected_session = $( '.selected' ).attr( 'data-session-id' ),\n\t\t\terr_msg = _self.translations.auth_failed[ _self.lang ];\n\n\t\t_self.auth_pending = false;\n\t\t_self.cache_set( selected_session, 'user', lightdm.authentication_user, 'session' );\n\n\t\t$( '#timerArea' ).hide();\n\n\t\tif ( lightdm.is_authenticated ) {\n\t\t\t// The user entered the correct password. Let's log them in.\n\t\t\t$('body').fadeOut(1000);\n\t\t\tlightdm.login( lightdm.authentication_user, selected_session );\n\t\t} else {\n\t\t\t// The user did not enter the correct password. Show error message.\n\t\t\t$( '#statusArea' ).show();\n\t\t}\n\t}\n\n\tsubmit_password( event ) {\n\t\tlightdm.respond( $( '#passwordField' ).val() );\n\t\t$( '#passwordArea' ).hide();\n\t\t$( '#timerArea' ).show();\n\t}\n\n\tsession_toggle_handler( event ) {\n\t\tvar $session = $( this ).children( 'a' ),\n\t\t\tsession_name = $session.text(),\n\t\t\tsession_key = $session.attr( 'data-session-id' );\n\n\t\t$session.parents( '.btn-group' ).find( '.selected' ).attr( 'data-session-id', session_key ).html( session_name );\n\t}\n\n\tkey_press_handler( event ) {\n\t\tvar action;\n\t\tswitch ( event.which ) {\n\t\t\tcase 13:\n\t\t\t\taction = _self.auth_pending ? _self.submit_password() : ! _self.user_list_visible ? _self.show_user_list() : 0;\n\t\t\t\t_self.log( action );\n\t\t\t\tbreak;\n\t\t\tcase 27:\n\t\t\t\taction = _self.auth_pending ? _self.cancel_authentication() : 0;\n\t\t\t\t_self.log( action );\n\t\t\t\tbreak;\n\t\t\tcase 32:\n\t\t\t\taction = (! _self.user_list_visible && ! _self.auth_pending) ? _self.show_user_list() : 0;\n\t\t\t\t_self.log( action );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsystem_action_handler() {\n\t\tvar action = $( this ).attr( 'id' ),\n\t\t\t$modal = $( '.modal' );\n\n\t\t$modal.find( '.btn-primary' ).text( _self.translations[ action ] ).click( action, ( event ) => {\n\t\t\t$( this ).off( 'click' );\n\t\t\tlightdm[ event.data ]();\n\t\t} );\n\t\t$modal.find( '.btn-default' ).click( () => {\n\t\t\t$( this ).next().off( 'click' );\n\t\t} );\n\n\t\t$modal.modal('toggle');\n\t}\n\n\n\tuser_list_collapse_handler() {\n\t\t_self.user_list_visible = _self.$user_list.hasClass( 'in' ) ? true : false;\n\t}\n\n\n\tuser_image_error_handler( event ) {\n\t\t$(this).off('error.antergos');\n\t\t$(this).attr('src', _self.tux);\n\t}\n\n\n\t/**\n\t * LightDM Callback - Show password prompt to user.\n\t *\n\t * @param text\n\t * @param type\n\t */\n\tshow_prompt( text, type ) {\n\t\tif ( 'password' === type ) {\n\t\t\t$( '#passwordField' ).val( \"\" );\n\t\t\t$( '#passwordArea' ).show();\n\t\t\t$( '#passwordField' ).focus();\n\t\t}\n\t}\n\n\t/**\n\t * LightDM Callback - Show message to user.\n\t *\n\t * @param text\n\t */\n\tshow_message( text, type ) {\n\t\tif ( text.length > 0 ) {\n\t\t\t$( this.$msg_area ).html( text );\n\t\t\t$( '#passwordArea' ).hide();\n\t\t\t$( this.$msg_area_container ).show();\n\t\t}\n\t}\n}\n\n\n/**\n * Initialize the theme once the window has loaded.\n */\n$( window ).load( () => {\n\t_self = new AntergosTheme();\n} );\n\n"]} \ No newline at end of file diff --git a/themes/antergos/js/greeter.js b/themes/antergos/js/greeter.js index 05135c0..3993e21 100644 --- a/themes/antergos/js/greeter.js +++ b/themes/antergos/js/greeter.js @@ -263,6 +263,7 @@ class AntergosBackgroundManager extends GreeterThemeComponent { + /** * This is the theme's main class object. It contains almost all the theme's logic. */