'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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* * * Copyright © 2015-2016 Antergos * * greeter.js * * This file is part of lightdm-webkit-theme-antergos * * lightdm-webkit-theme-antergos is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, * or any later version. * * lightdm-webkit-theme-antergos is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * The following additional terms are in effect as per Section 7 of this license: * * The preservation of all legal notices and author attributions in * the material or in the Appropriate Legal Notices displayed * by works containing it is required. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * This is used to access our main class from within jQuery callbacks. */ var _self = null; /** * Capitalize a string. * * @returns {string} */ String.prototype.capitalize = function () { return this.charAt(0).toUpperCase() + this.slice(1); }; /** * This is the theme's main class object. It contains almost all the theme's logic. */ var AntergosTheme = (function () { function AntergosTheme() { _classCallCheck(this, AntergosTheme); if (null !== _self) { return _self; } else { _self = this; } this.debug = this.cache_get('debug', 'enabled'); 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.lang = window.navigator.language.split('-')[0].toLowerCase(); this.translations = window.ant_translations; if ('undefined' === typeof window.navigator.languages) { window.navigator.languages = [window.navigator.language]; } this.initialize(); } _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(); this.register_callbacks(); } /** * Add text to the debug log element (accessible from the login screen). * * @param {string} text - To be added to the log. */ }, { key: 'log', value: function 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', index = 0; 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; index += 1; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } 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', index = 0; 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; index += 1; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return localStorage.setItem(key, value); } /** * Register callbacks for the LDM Greeter as well as any others that haven't been registered * elsewhere. */ }, { key: 'register_callbacks', value: function register_callbacks() { $(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; } /** * Initialize the user list. */ }, { key: 'prepare_user_list', value: function prepare_user_list() { var tux = 'img/antergos-logo-user.png', template; // Loop through the array of LightDMUser objects to create our user list. var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = lightdm.users[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var user = _step3.value; var last_session = this.cache_get('user', user.name, 'session'), image_src = user.image.length ? user.image : tux; 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'); } this.log('Last session for ' + user.name + ' was: ' + last_session); 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'; // 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).children('img').on('error', this.image_not_found); } // END for ( var user of lightdm.users ) } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } 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 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 _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = lightdm.sessions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var session = _step4.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) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } $('.dropdown-toggle').dropdown(); } /** * 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" }, template; var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = undefined; try { for (var _iterator5 = Object.keys(actions)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { var action = _step5.value; var cmd = 'can_' + action; template = '\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t'; if (lightdm[cmd]) { $(template).appendTo($(this.$actions_container)).click(this.system_action_handler); } } // END for (var [action, icon] of actions) } catch (err) { _didIteratorError5 = true; _iteratorError5 = err; } finally { try { if (!_iteratorNormalCompletion5 && _iterator5.return) { _iterator5.return(); } } finally { if (_didIteratorError5) { throw _iteratorError5; } } } $('[data-toggle=tooltip]').tooltip(); $('.modal').modal({ show: false }); } }, { key: 'initialize_clock', value: function initialize_clock() { var _this = this; var saved_format = this.cache_get('clock', 'time_format'), format = null !== saved_format ? saved_format : 'LT', detected_language = this.lang; // Workaround for moment.js bug: https://github.com/moment/moment/issues/2856 var _iteratorNormalCompletion6 = true; var _didIteratorError6 = false; var _iteratorError6 = undefined; try { for (var _iterator6 = window.navigator.languages[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { var lang = _step6.value; try { detected_language = lang.split('-')[0].toLowerCase(); break; } catch (err) { this.log(String(err)); } } } catch (err) { _didIteratorError6 = true; _iteratorError6 = err; } finally { try { if (!_iteratorNormalCompletion6 && _iterator6.return) { _iterator6.return(); } } finally { if (_didIteratorError6) { throw _iteratorError6; } } } if (null === detected_language) { detected_language = 'en'; } moment.locale(detected_language); this.$clock.html(moment().format(format)); setInterval(function () { _this.$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. */ }, { key: 'show_user_list', value: function show_user_list() { if ($(this.$clock_container).hasClass('in')) { $('#trigger').trigger('click'); this.user_list_visible = true; } if ($(this.$user_list).length <= 1) { $(this.$user_list).find('a').trigger('click', this); } } }, { key: 'prepare_login_panel_header', value: function prepare_login_panel_header() { var greeting = this.translations.greeting ? this.translations.greeting : 'Welcome!'; $('.welcome').text(greeting); $('#hostname').append(lightdm.hostname); } }, { key: 'prepare_translations', value: function prepare_translations() { if (!this.translations.hasOwnProperty(this.lang)) { var _iteratorNormalCompletion7 = true; var _didIteratorError7 = false; var _iteratorError7 = undefined; try { for (var _iterator7 = window.navigator.languages[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { var lang = _step7.value; if (this.translations.hasOwnProperty(lang)) { this.lang = lang; break; } } } catch (err) { _didIteratorError7 = true; _iteratorError7 = err; } finally { try { if (!_iteratorNormalCompletion7 && _iterator7.return) { _iterator7.return(); } } finally { if (_didIteratorError7) { throw _iteratorError7; } } } } if (!this.translations.hasOwnProperty(this.lang)) { this.lang = 'en'; } 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). */ }, { 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); }); } /** * 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('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(); _self.log('Session for ' + user_id + ' is ' + user_session); $('[data-session-id="' + user_session + '"]').parent().trigger('click', this); $('#session-list').removeClass('hidden').show(); $('#passwordArea').show(); $('.dropdown-toggle').dropdown(); _self.auth_pending = true; lightdm.start_authentication(user_id); } /** * Cancel the pending authentication. * * @param {object} event - jQuery.Event object from 'click' event. */ }, { key: 'cancel_authentication', value: function cancel_authentication(event) { var selectors = ['#statusArea', '#timerArea', '#passwordArea', '#session-list']; var _iteratorNormalCompletion8 = true; var _didIteratorError8 = false; var _iteratorError8 = undefined; try { for (var _iterator8 = selectors[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { var selector = _step8.value; $(selector).hide(); } } catch (err) { _didIteratorError8 = true; _iteratorError8 = err; } finally { try { if (!_iteratorNormalCompletion8 && _iterator8.return) { _iterator8.return(); } } finally { if (_didIteratorError8) { throw _iteratorError8; } } } lightdm.cancel_authentication(); _self.log('Cancelled authentication.'); // 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%'); } $('.hovered').removeClass('hovered').siblings().show(); $('.fa-toggle-down').show(); _self.selected_user = null; _self.auth_pending = false; } /** * 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 = this.translations.auth_failed[this.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. 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.provide_secret($('#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 _this2 = this; var action = $(this).attr('id'), $modal = $('.modal'); $modal.find('.btn-primary').text(_self.translations[action]).click(action, function (event) { $(_this2).off('click'); lightdm[event.data](); }); $modal.find('.btn-default').click(function () { $(_this2).next().off('click'); }); $modal.modal('toggle'); } /** * User image on('error') handler. */ }, { key: 'image_not_found', value: function image_not_found(source) { source.onerror = ""; source.src = 'img/antergos-logo-user.png'; return true; } /** * LightDM Callback - Show password prompt to user. * * @param text */ }, { key: 'show_prompt', value: function show_prompt(text) { $('#passwordField').val(""); $('#passwordArea').show(); $('#passwordField').focus(); } /** * LightDM Callback - Show message to user. * * @param msg */ }, { key: 'show_message', value: function show_message(msg) { if (msg.length > 0) { $(this.$msg_area).html(msg); $('#passwordArea').hide(); $(this.$msg_area_container).show(); } } }]); return AntergosTheme; })(); /** * Initialize the theme once the window has loaded. */ $(window).load(function () { _self = new AntergosTheme(); }); //# sourceMappingURL=greeter-compiled.js.map