15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @fileoverview User pod row implementation. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('login', function() { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Number of displayed columns depending on user pod count. 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {Array.<number>} 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @const 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var COLUMNS = [0, 1, 2, 3, 4, 5, 4, 4, 4, 5, 5, 6, 6, 5, 5, 6, 6, 6, 6]; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether to preselect the first pod automatically on login screen. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var PRESELECT_FIRST_POD = true; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wallpaper load delay in milliseconds. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var WALLPAPER_LOAD_DELAY_MS = 500; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wallpaper load delay in milliseconds. TODO(nkostylev): Tune this constant. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var WALLPAPER_BOOT_LOAD_DELAY_MS = 100; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Maximum time for which the pod row remains hidden until all user images 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * have been loaded. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {number} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var POD_ROW_IMAGES_LOAD_TIMEOUT_MS = 3000; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Public session help topic identifier. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {number} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @const 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var HELP_TOPIC_PUBLIC_SESSION = 3041033; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Oauth token status. These must match UserManager::OAuthTokenStatus. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @enum {number} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var OAuthTokenStatus = { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UNKNOWN: 0, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INVALID_OLD: 1, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VALID_OLD: 2, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INVALID_NEW: 3, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VALID_NEW: 4 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Tab order for user pods. Update these when adding new controls. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @enum {number} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @const 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var UserPodTabOrder = { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POD_INPUT: 1, // Password input fields (and whole pods themselves). 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HEADER_BAR: 2, // Buttons on the header bar (Shutdown, Add User). 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ACTION_BOX: 3, // Action box buttons. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PAD_MENU_ITEM: 4 // User pad menu items (Remove this user). 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus and tab order are organized as follows: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (1) all user pods have tab index 1 so they are traversed first; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (2) when a user pod is activated, its tab index is set to -1 and its 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // main input field gets focus and tab index 1; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (3) buttons on the header bar have tab index 2 so they follow user pods; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (4) Action box buttons have tab index 3 and follow header bar buttons; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (5) lastly, focus jumps to the Status Area and back to user pods. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 'Focus' event is handled by a capture handler for the whole document 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and in some cases 'mousedown' event handlers are used instead of 'click' 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handlers where it's necessary to prevent 'focus' event from being fired. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Helper function to remove a class from given element. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!HTMLElement} el Element whose class list to change. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} cl Class to remove. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function removeClass(el, cl) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) el.classList.remove(cl); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a user pod. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {HTMLDivElement} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var UserPod = cr.ui.define(function() { 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var node = $('user-pod-template').cloneNode(true); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node.removeAttribute('id'); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return node; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Stops event propagation from the any user pod child element. 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e Event to handle. 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function stopEventPropagation(e) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Prevent default so that we don't trigger a 'focus' event. 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.preventDefault(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unique salt added to user image URLs to prevent caching. Dictionary with 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * user names as keys. 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {Object} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserPod.userImageSalt_ = {}; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserPod.prototype = { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: HTMLDivElement.prototype, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tabIndex = UserPodTabOrder.POD_INPUT; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.tabIndex = UserPodTabOrder.ACTION_BOX; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mousedown has to be used instead of click to be able to prevent 'focus' 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // event later. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addEventListener('mousedown', 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.handleMouseDown_.bind(this)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.signinButtonElement.addEventListener('click', 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.activate.bind(this)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.addEventListener('mousedown', 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) stopEventPropagation); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.addEventListener('click', 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.handleActionAreaButtonClick_.bind(this)); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.addEventListener('keydown', 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.handleActionAreaButtonKeyDown_.bind(this)); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.addEventListener('click', 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.handleRemoveCommandClick_.bind(this)); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.addEventListener('keydown', 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.handleRemoveCommandKeyDown_.bind(this)); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.addEventListener('blur', 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.handleRemoveCommandBlur_.bind(this)); 1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (this.actionBoxRemoveUserWarningButtonElement) { 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) this.actionBoxRemoveUserWarningButtonElement.addEventListener( 160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 'click', 161ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.handleRemoveUserConfirmationClick_.bind(this)); 162ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Initializes the pod after its properties set and added to a pod row. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initialize: function() { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.passwordElement.addEventListener('keydown', 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.parentNode.handleKeyDown.bind(this.parentNode)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.passwordElement.addEventListener('keypress', 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.handlePasswordKeyPress_.bind(this)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.imageElement.addEventListener('load', 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.parentNode.handlePodImageLoad.bind(this.parentNode, this)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets tab order for pod elements to its initial state. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resetTabOrder: function() { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tabIndex = UserPodTabOrder.POD_INPUT; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mainInput.tabIndex = -1; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handles keypress event (i.e. any textual input) on password input. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e Keypress Event object. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlePasswordKeyPress_: function(e) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When tabbing from the system tray a tab key press is received. Suppress 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this so as not to type a tab character into the password field. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (e.keyCode == 9) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.preventDefault(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets signed in indicator element. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLDivElement} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get signedInIndicatorElement() { 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.signed-in-indicator'); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets image element. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLImageElement} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get imageElement() { 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.user-image'); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets name element. 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLDivElement} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get nameElement() { 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.name'); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets password field. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLInputElement} 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get passwordElement() { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.password'); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets Caps Lock hint image. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLImageElement} 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get capslockHintElement() { 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.capslock-hint'); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets user signin button. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLInputElement} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get signinButtonElement() { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.signin-button'); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets action box area. 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {!HTMLInputElement} 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get actionBoxAreaElement() { 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.action-box-area'); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Gets user type icon area. 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {!HTMLInputElement} 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get userTypeIconAreaElement() { 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return this.querySelector('.user-type-icon-area'); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets action box menu. 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!HTMLInputElement} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get actionBoxMenuElement() { 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.action-box-menu'); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Gets action box menu title. 2747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @type {!HTMLInputElement} 2757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 2767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) get actionBoxMenuTitleElement() { 2777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return this.querySelector('.action-box-menu-title'); 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /** 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets action box menu title, user name item. 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {!HTMLInputElement} 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get actionBoxMenuTitleNameElement() { 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.action-box-menu-title-name'); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets action box menu title, user email item. 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {!HTMLInputElement} 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get actionBoxMenuTitleEmailElement() { 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.action-box-menu-title-email'); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets action box menu, remove user command item. 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {!HTMLInputElement} 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get actionBoxMenuCommandElement() { 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.action-box-menu-remove-command'); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Gets action box menu, remove user command item div. 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {!HTMLInputElement} 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get actionBoxMenuRemoveElement() { 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.action-box-menu-remove'); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Gets action box menu, remove user command item div. 3147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @type {!HTMLInputElement} 3157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 316a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) get actionBoxRemoveUserWarningElement() { 317a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return this.querySelector('.action-box-remove-user-warning'); 3187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 3197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /** 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Gets action box menu, remove user command item div. 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @type {!HTMLInputElement} 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 324a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) get actionBoxRemoveUserWarningButtonElement() { 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return this.querySelector( 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) '.remove-warning-button'); 3277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 3287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /** 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the user pod element. 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update: function() { 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.imageElement.src = 'chrome://userimage/' + this.user.username + 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) '?id=' + UserPod.userImageSalt_[this.user.username]; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.nameElement.textContent = this.user_.displayName; 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.signedInIndicatorElement.hidden = !this.user_.signedIn; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var needSignin = this.needGaiaSignin; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.passwordElement.hidden = needSignin; 341ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.signinButtonElement.hidden = !needSignin; 342ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 343ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.updateActionBoxArea(); 344ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 345ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 346ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch updateActionBoxArea: function() { 347ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.actionBoxAreaElement.hidden = this.user_.publicAccount; 348ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.actionBoxMenuRemoveElement.hidden = !this.user_.canRemove; 349ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.setAttribute( 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'aria-label', loadTimeData.getStringF( 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'podMenuButtonAccessibleName', this.user_.emailAddress)); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.setAttribute( 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'aria-label', loadTimeData.getString( 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'podMenuRemoveItemAccessibleName')); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuTitleNameElement.textContent = this.user_.isOwner ? 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getStringF('ownerUserPattern', this.user_.displayName) : 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.user_.displayName; 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuTitleEmailElement.textContent = this.user_.emailAddress; 36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.actionBoxMenuTitleEmailElement.hidden = 36190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.user_.locallyManagedUser; 36290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuCommandElement.textContent = 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getString('removeUser'); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.passwordElement.setAttribute('aria-label', loadTimeData.getStringF( 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'passwordFieldAccessibleName', this.user_.emailAddress)); 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.userTypeIconAreaElement.hidden = !this.user_.locallyManagedUser; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The user that this pod represents. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {!Object} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_: undefined, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get user() { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.user_; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set user(userDict) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.user_ = userDict; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.update(); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether Gaia signin is required for this user. 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get needGaiaSignin() { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gaia signin is performed if the user has an invalid oauth token and is 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not currently signed in (i.e. not the lock screen). 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Locally managed users never require GAIA signin. 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.user.oauthTokenStatus != OAuthTokenStatus.VALID_OLD && 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.user.oauthTokenStatus != OAuthTokenStatus.VALID_NEW && 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !this.user.signedIn && !this.user.locallyManagedUser; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets main input element. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {(HTMLButtonElement|HTMLInputElement)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get mainInput() { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.signinButtonElement.hidden) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.signinButtonElement; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.passwordElement; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Whether action box button is in active state. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get isActionBoxMenuActive() { 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.actionBoxAreaElement.classList.contains('active'); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set isActionBoxMenuActive(active) { 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (active == this.isActionBoxMenuActive) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (active) { 418eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.actionBoxMenuRemoveElement.hidden = !this.user_.canRemove; 419a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (this.actionBoxRemoveUserWarningElement) 420a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) this.actionBoxRemoveUserWarningElement.hidden = true; 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear focus first if another pod is focused. 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!this.parentNode.isFocused(this)) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.parentNode.focusPod(undefined, true); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.focus(); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.classList.add('active'); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.classList.remove('active'); 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Whether action box button is in hovered state. 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {boolean} 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get isActionBoxMenuHovered() { 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.actionBoxAreaElement.classList.contains('hovered'); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set isActionBoxMenuHovered(hovered) { 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (hovered == this.isActionBoxMenuHovered) 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (hovered) { 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.classList.add('hovered'); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.classList.remove('hovered'); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the image element of the user. 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateUserImage: function() { 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserPod.userImageSalt_[this.user.username] = new Date().getTime(); 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.update(); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Focuses on input element. 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focusInput: function() { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var needSignin = this.needGaiaSignin; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.signinButtonElement.hidden = !needSignin; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.passwordElement.hidden = needSignin; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move tabIndex from the whole pod to the main input. 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.tabIndex = -1; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.mainInput.focus(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Activates the pod. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} True if activated successfully. 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) activate: function() { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.signinButtonElement.hidden) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Switch to Gaia signin. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.showSigninUI(); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!this.passwordElement.value) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oobe.disableSigninUI(); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('authenticateUser', 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [this.user.username, this.passwordElement.value]); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Shows signin UI for this user. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) showSigninUI: function() { 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.parentNode.showSigninUI(this.user.emailAddress); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets the input field and updates the tab order of pod controls. 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} takeFocus If true, input field takes focus. 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reset: function(takeFocus) { 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.passwordElement.value = ''; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (takeFocus) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusInput(); // This will set a custom tab order. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.resetTabOrder(); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handles a click event on action area button. 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e Click event. 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleActionAreaButtonClick_: function(e) { 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.parentNode.disabled) 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isActionBoxMenuActive = !this.isActionBoxMenuActive; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handles a keydown event on action area button. 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e KeyDown event. 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleActionAreaButtonKeyDown_: function(e) { 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.disabled) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (e.keyIdentifier) { 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'Enter': 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'U+0020': // Space 53190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (this.parentNode.focusedPod_ && !this.isActionBoxMenuActive) 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isActionBoxMenuActive = true; 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'Up': 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'Down': 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.isActionBoxMenuActive) { 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.tabIndex = 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserPodTabOrder.PAD_MENU_ITEM; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.focus(); 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'U+001B': // Esc 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isActionBoxMenuActive = false; 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'U+0009': // Tab 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.parentNode.focusPod(); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isActionBoxMenuActive = false; 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handles a click event on remove user command. 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e Click event. 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleRemoveCommandClick_: function(e) { 561a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (this.user.locallyManagedUser || this.user.isDesktopUser) { 5627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this.showRemoveWarning_(); 5637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 5647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 5657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (this.isActionBoxMenuActive) 5667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) chrome.send('removeUser', [this.user.username]); 5677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 5687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /** 5707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Shows remove warning for managed users. 5717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 5727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) showRemoveWarning_: function() { 5737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this.actionBoxMenuRemoveElement.hidden = true; 574a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) this.actionBoxRemoveUserWarningElement.hidden = false; 5757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 5767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /** 5787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Handles a click event on remove user confirmation button. 5797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * @param {Event} e Click event. 5807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 5817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) handleRemoveUserConfirmationClick_: function(e) { 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.isActionBoxMenuActive) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('removeUser', [this.user.username]); 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handles a keydown event on remove command. 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e KeyDown event. 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleRemoveCommandKeyDown_: function(e) { 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.disabled) 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (e.keyIdentifier) { 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'Enter': 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome.send('removeUser', [this.user.username]); 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'Up': 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'Down': 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'U+001B': // Esc 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.focus(); 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isActionBoxMenuActive = false; 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxAreaElement.focus(); 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.isActionBoxMenuActive = false; 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handles a blur event on remove command. 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e Blur event. 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleRemoveCommandBlur_: function(e) { 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.disabled) 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.actionBoxMenuRemoveElement.tabIndex = -1; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handles mousedown event on a user pod. 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e Mousedown event. 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleMouseDown_: function(e) { 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.parentNode.disabled) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 631ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!this.signinButtonElement.hidden && !this.isActionBoxMenuActive) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.showSigninUI(); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prevent default so that we don't trigger 'focus' event. 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.preventDefault(); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Creates a public account user pod. 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @constructor 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @extends {UserPod} 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var PublicAccountUserPod = cr.ui.define(function() { 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var node = UserPod(); 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var extras = $('public-account-user-pod-extras-template').children; 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < extras.length; ++i) { 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var el = extras[i].cloneNode(true); 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node.appendChild(el); 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return node; 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PublicAccountUserPod.prototype = { 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) __proto__: UserPod.prototype, 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * "Enter" button in expanded side pane. 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {!HTMLButtonElement} 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get enterButtonElement() { 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.querySelector('.enter-button'); 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Boolean flag of whether the pod is showing the side pane. The flag 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * controls whether 'expanded' class is added to the pod's class list and 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * resets tab order because main input element changes when the 'expanded' 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * state changes. 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {boolean} 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get expanded() { 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.classList.contains('expanded'); 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set expanded(expanded) { 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.expanded == expanded) 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.resetTabOrder(); 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.classList.toggle('expanded', expanded); 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var self = this; 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.classList.add('animating'); 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.addEventListener('webkitTransitionEnd', function f(e) { 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.removeEventListener('webkitTransitionEnd', f); 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.classList.remove('animating'); 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accessibility focus indicator does not move with the focused 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // element. Sends a 'focus' event on the currently focused element 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // so that accessibility focus indicator updates its location. 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (document.activeElement) 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) document.activeElement.dispatchEvent(new Event('focus')); 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }); 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get needGaiaSignin() { 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get mainInput() { 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.expanded) 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.enterButtonElement; 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.nameElement; 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) decorate: function() { 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserPod.prototype.decorate.call(this); 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.classList.remove('need-password'); 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.classList.add('public-account'); 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.nameElement.addEventListener('keydown', (function(e) { 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (e.keyIdentifier == 'Enter') { 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.parentNode.activatedPod = this; 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Stop this keydown event from bubbling up to PodRow handler. 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.stopPropagation(); 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Prevent default so that we don't trigger a 'click' event on the 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // newly focused "Enter" button. 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.preventDefault(); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }).bind(this)); 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var learnMore = this.querySelector('.learn-more'); 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) learnMore.addEventListener('mousedown', stopEventPropagation); 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) learnMore.addEventListener('click', this.handleLearnMoreEvent); 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) learnMore.addEventListener('keydown', this.handleLearnMoreEvent); 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) learnMore = this.querySelector('.side-pane-learn-more'); 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) learnMore.addEventListener('click', this.handleLearnMoreEvent); 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) learnMore.addEventListener('keydown', this.handleLearnMoreEvent); 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.enterButtonElement.addEventListener('click', (function(e) { 740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.enterButtonElement.disabled = true; 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome.send('launchPublicAccount', [this.user.username]); 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }).bind(this)); 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Updates the user pod element. 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update: function() { 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserPod.prototype.update.call(this); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.side-pane-name').textContent = 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.user_.displayName; 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.querySelector('.info').textContent = 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loadTimeData.getStringF('publicAccountInfoFormat', 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.user_.enterpriseDomain); 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) focusInput: function() { 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move tabIndex from the whole pod to the main input. 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.tabIndex = -1; 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT; 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.mainInput.focus(); 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reset: function(takeFocus) { 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!takeFocus) 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.expanded = false; 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.enterButtonElement.disabled = false; 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserPod.prototype.reset.call(this, takeFocus); 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) activate: function() { 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.expanded = true; 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.focusInput(); 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleMouseDown_: function(e) { 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.parentNode.disabled) 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.parentNode.focusPod(this); 7862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.parentNode.activatedPod = this; 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Prevent default so that we don't trigger 'focus' event. 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) e.preventDefault(); 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handle mouse and keyboard events for the learn more button. 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Triggering the button causes information about public sessions to be 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * shown. 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} event Mouse or keyboard event. 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleLearnMoreEvent: function(event) { 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (event.type) { 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Show informaton on left click. Let any other clicks propagate. 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'click': 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (event.button != 0) 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Show informaton when <Return> or <Space> is pressed. Let any other 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // key presses propagate. 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 'keydown': 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (event.keyCode) { 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 13: // Return. 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 32: // Space. 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome.send('launchHelpApp', [HELP_TOPIC_PUBLIC_SESSION]); 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) stopEventPropagation(event); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 822ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Creates a user pod to be used only in desktop chrome. 823ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @constructor 824ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @extends {UserPod} 825ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 826ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch var DesktopUserPod = cr.ui.define(function() { 827ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Don't just instantiate a UserPod(), as this will call decorate() on the 828ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // parent object, and add duplicate event listeners. 829ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch var node = $('user-pod-template').cloneNode(true); 830ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch node.removeAttribute('id'); 831ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return node; 832ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }); 833ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 834ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DesktopUserPod.prototype = { 835ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch __proto__: UserPod.prototype, 836ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 837ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** @override */ 838ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch decorate: function() { 839ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch UserPod.prototype.decorate.call(this); 840ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 841ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 842ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** @override */ 843ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch focusInput: function() { 844ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch var isLockedUser = this.user.needsSignin; 845ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.signinButtonElement.hidden = isLockedUser; 846ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.passwordElement.hidden = !isLockedUser; 847ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 848ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Move tabIndex from the whole pod to the main input. 849ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.tabIndex = -1; 850ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT; 851ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.mainInput.focus(); 852ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 853ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 854ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** @override */ 855ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch update: function() { 856ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // TODO(noms): Use the actual profile avatar for local profiles once the 857ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // new, non-pixellated avatars are available. 858ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.imageElement.src = this.user.emailAddress == '' ? 859ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 'chrome://theme/IDR_USER_MANAGER_DEFAULT_AVATAR' : 860ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.user.userImage; 861ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.nameElement.textContent = this.user_.displayName; 862ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch var isLockedUser = this.user.needsSignin; 863ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.passwordElement.hidden = !isLockedUser; 864ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.signinButtonElement.hidden = isLockedUser; 865ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 866ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch UserPod.prototype.updateActionBoxArea.call(this); 867ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 868ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 869ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** @override */ 870ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch activate: function() { 871ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.launchUser(this.user.emailAddress, this.user.displayName); 872ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return true; 873ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 874ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 875ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** @override */ 876ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch handleMouseDown_: function(e) { 877ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (this.parentNode.disabled) 878ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 879ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 880ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Don't sign in until the user presses the button. Just activate the pod. 881ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Oobe.clearErrors(); 882ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.parentNode.lastFocusedPod_ = 883ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch this.parentNode.getPodWithUsername_(this.user.emailAddress); 884ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 885ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 886ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** @override */ 887a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) handleRemoveUserConfirmationClick_: function(e) { 888a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chrome.send('removeUser', [this.user.profilePath]); 889ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }, 890ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 891ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 892ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a new pod row element. 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @extends {HTMLDivElement} 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var PodRow = cr.ui.define('podrow'); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PodRow.prototype = { 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) __proto__: HTMLDivElement.prototype, 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this user pod row is shown for the first time. 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) firstShown_: true, 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the initial wallpaper load after boot has been requested. Used 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // only if |Oobe.getInstance().shouldLoadWallpaperOnBoot()| is true. 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bootWallpaperLoaded_: false, 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if inside focusPod(). 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) insideFocusPod_: false, 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if user pod has been activated with keyboard. 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In case of activation with keyboard we delay wallpaper change. 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyboardActivated_: false, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focused pod. 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focusedPod_: undefined, 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activated pod, i.e. the pod of current login attempt. 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) activatedPod_: undefined, 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pod that was most recently focused, if any. 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lastFocusedPod_: undefined, 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When moving through users quickly at login screen, set a timeout to 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prevent loading intermediate wallpapers. 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadWallpaperTimeout_: null, 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pods whose initial images haven't been loaded yet. 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) podsWithPendingImages_: [], 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** @override */ 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decorate: function() { 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.style.left = 0; 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Event listeners that are installed for the time period during which 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the element is visible. 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.listeners_ = { 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus: [this.handleFocus_.bind(this), true], 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) click: [this.handleClick_.bind(this), false], 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mousemove: [this.handleMouseMove_.bind(this), false], 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keydown: [this.handleKeyDown.bind(this), false] 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns all the pods in this pod row. 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {NodeList} 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get pods() { 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.children; 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Return true if user pod row has only single user pod in it. 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {boolean} 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get isSinglePod() { 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.children.length == 1; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns pod with the given username (null if there is no such pod). 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} username Username to be matched. 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {Object} Pod with the given username. null if pod hasn't been 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found. 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getPodWithUsername_: function(username) { 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) { 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod.user.username == username) 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pod; 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * True if the the pod row is disabled (handles no user interaction). 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {boolean} 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disabled_: false, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get disabled() { 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.disabled_; 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set disabled(value) { 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled_ = value; 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var controls = this.querySelectorAll('button,input'); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, control; control = controls[i]; ++i) { 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) control.disabled = value; 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Creates a user pod from given email. 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} email User's email. 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) createUserPod: function(user) { 9972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var userPod; 998ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (user.isDesktopUser) 999ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch userPod = new DesktopUserPod({user: user}); 1000ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch else if (user.publicAccount) 10012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) userPod = new PublicAccountUserPod({user: user}); 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) userPod = new UserPod({user: user}); 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) userPod.hidden = false; 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return userPod; 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Add an existing user pod to this pod row. 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {!Object} user User info dictionary. 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} animated Whether to use init animation. 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addUserPod: function(user, animated) { 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var userPod = this.createUserPod(user); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (animated) { 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) userPod.classList.add('init'); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) userPod.nameElement.classList.add('init'); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.appendChild(userPod); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) userPod.initialize(); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns index of given pod or -1 if not found. 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {UserPod} pod Pod to look up. 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) indexOf_: function(pod) { 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.pods.length; ++i) { 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod == this.pods[i]) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return i; 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return -1; 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Start first time show animation. 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startInitAnimation: function() { 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Schedule init animation. 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) { 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setTimeout(removeClass, 500 + i * 70, pod, 'init'); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setTimeout(removeClass, 700 + i * 70, pod.nameElement, 'init'); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Start login success animation. 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) startAuthenticatedAnimation: function() { 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var activated = this.indexOf_(this.activatedPod_); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (activated == -1) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) { 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i < activated) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.classList.add('left'); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (i > activated) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.classList.add('right'); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.classList.add('zoom'); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Populates pod row with given existing users and start init animation. 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {array} users Array of existing user emails. 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} animated Whether to use init animation. 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadPods: function(users, animated) { 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear existing pods. 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.innerHTML = ''; 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusedPod_ = undefined; 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.activatedPod_ = undefined; 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.lastFocusedPod_ = undefined; 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Populate the pod row. 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < users.length; ++i) { 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addUserPod(users[i], animated); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) { 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.podsWithPendingImages_.push(pod); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we eventually show the pod row, even if some image is stuck. 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setTimeout(function() { 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('pod-row').classList.remove('images-loading'); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, POD_ROW_IMAGES_LOAD_TIMEOUT_MS); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var columns = users.length < COLUMNS.length ? 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) COLUMNS[users.length] : COLUMNS[COLUMNS.length - 1]; 10932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var rows = Math.floor((users.length - 1) / columns) + 1; 10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cancel any pending resize operation. 10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.removeEventListener('mouseout', this.deferredResizeListener_); 10972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!this.columns || !this.rows) { 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set initial dimensions. 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.resize_(columns, rows); 11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (columns != this.columns || rows != this.rows) { 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Defer the resize until mouse cursor leaves the pod row. 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.deferredResizeListener_ = function(e) { 11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!findAncestorByClass(e.toElement, 'podrow')) { 11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.resize_(columns, rows); 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }.bind(this); 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.addEventListener('mouseout', this.deferredResizeListener_); 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(this.preselectedPod); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Resizes the pod row and cancel any pending resize operations. 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {number} columns Number of columns. 11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {number} rows Number of rows. 11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @private 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) resize_: function(columns, rows) { 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.removeEventListener('mouseout', this.deferredResizeListener_); 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.columns = columns; 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.rows = rows; 1124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (this.parentNode == Oobe.getInstance().currentScreen) { 1125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Oobe.getInstance().updateScreenSize(this.parentNode); 1126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 11282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 11302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Number of columns. 11312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {?number} 11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 11332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set columns(columns) { 11342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cannot use 'columns' here. 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.setAttribute('ncolumns', columns); 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get columns() { 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.getAttribute('ncolumns'); 11392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 11422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Number of rows. 11432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type {?number} 11442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set rows(rows) { 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Cannot use 'rows' here. 11472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.setAttribute('nrows', rows); 11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get rows() { 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return this.getAttribute('nrows'); 11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Whether the pod is currently focused. 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {UserPod} pod Pod to check for focus. 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Pod focus status. 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isFocused: function(pod) { 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.focusedPod_ == pod; 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Focuses a given user pod or clear focus when given null. 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {UserPod=} podToFocus User pod to focus (undefined clears focus). 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean=} opt_force If true, forces focus update even when 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * podToFocus is already focused. 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focusPod: function(podToFocus, opt_force) { 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.isFocused(podToFocus) && !opt_force) { 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.keyboardActivated_ = false; 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure there's only one focusPod operation happening at a time. 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.insideFocusPod_) { 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.keyboardActivated_ = false; 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.insideFocusPod_ = true; 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearTimeout(this.loadWallpaperTimeout_); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) { 1183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!this.isSinglePod) { 11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pod.isActionBoxMenuActive = false; 1185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod != podToFocus) { 1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pod.isActionBoxMenuHovered = false; 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.classList.remove('focused'); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.classList.remove('faded'); 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.reset(false); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clear any error messages for previous pod. 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!this.isFocused(podToFocus)) 11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Oobe.clearErrors(); 11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hadFocus = !!this.focusedPod_; 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusedPod_ = podToFocus; 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (podToFocus) { 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) podToFocus.classList.remove('faded'); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) podToFocus.classList.add('focused'); 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) podToFocus.reset(true); // Reset and give focus. 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hadFocus && this.keyboardActivated_) { 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delay wallpaper loading to let user tab through pods without lag. 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.loadWallpaperTimeout_ = window.setTimeout( 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.loadWallpaper_.bind(this), WALLPAPER_LOAD_DELAY_MS); 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!this.firstShown_) { 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load wallpaper immediately if there no pod was focused 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // previously, and it is not a boot into user pod list case. 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.loadWallpaper_(); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.firstShown_ = false; 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.lastFocusedPod_ = podToFocus; 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.insideFocusPod_ = false; 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.keyboardActivated_ = false; 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Loads wallpaper for the active user pod, if any. 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadWallpaper_: function() { 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.focusedPod_) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('loadWallpaper', [this.focusedPod_.user.username]); 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets wallpaper to the last active user's wallpaper, if any. 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loadLastWallpaper: function() { 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.lastFocusedPod_) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send('loadWallpaper', [this.lastFocusedPod_.user.username]); 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns the currently activated pod. 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {UserPod} 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get activatedPod() { 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.activatedPod_; 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set activatedPod(pod) { 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod && pod.activate()) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.activatedPod_ = pod; 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The pod of the signed-in user, if any; null otherwise. 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {?UserPod} 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get lockedPod() { 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) { 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod.user.signedIn) 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pod; 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The pod that is preselected on user pod row show. 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type {?UserPod} 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get preselectedPod() { 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var lockedPod = this.lockedPod; 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var preselectedPod = PRESELECT_FIRST_POD ? 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lockedPod || this.pods[0] : lockedPod; 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return preselectedPod; 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets input UI. 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {boolean} takeFocus True to take focus. 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reset: function(takeFocus) { 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled = false; 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.activatedPod_) 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.activatedPod_.reset(takeFocus); 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 128390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * Restores input focus to current selected pod, if there is any. 128490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) */ 128590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) refocusCurrentPod: function() { 128690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (this.focusedPod_) { 128790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) this.focusedPod_.focusInput(); 128890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 128990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) }, 129090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 129190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) /** 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Clears focused pod password field. 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) clearFocusedPod: function() { 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!this.disabled && this.focusedPod_) 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.focusedPod_.reset(true); 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Shows signin UI. 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} email Email for signin UI. 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) showSigninUI: function(email) { 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear any error messages that might still be around. 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oobe.clearErrors(); 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled = true; 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.lastFocusedPod_ = this.getPodWithUsername_(email); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oobe.showSigninUI(email); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates current image of a user. 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} username User for which to update the image. 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateUserImage: function(username) { 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pod = this.getPodWithUsername_(username); 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.updateUserImage(); 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Resets OAuth token status (invalidates it). 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} username User for which to reset the status. 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resetUserOAuthTokenStatus: function(username) { 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var pod = this.getPodWithUsername_(username); 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pod) { 13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pod.user.oauthTokenStatus = OAuthTokenStatus.INVALID_OLD; 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pod.update(); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('Failed to update Gaia state for: ' + username); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handler of click event. 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e Click Event object. 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleClick_: function(e) { 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.disabled) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clear all menus if the click is outside pod menu and its 13452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // button area. 13462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!findAncestorByClass(e.target, 'action-box-menu') && 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !findAncestorByClass(e.target, 'action-box-area')) { 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0, pod; pod = this.pods[i]; ++i) 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pod.isActionBoxMenuActive = false; 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clears focus if not clicked on a pod and if there's more than one pod. 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var pod = findAncestorByClass(e.target, 'pod'); 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ((!pod || pod.parentNode != this) && !this.isSinglePod) { 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (pod) 1359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pod.isActionBoxMenuHovered = true; 1360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Return focus back to single pod. 13622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.isSinglePod) { 13632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.focusPod(this.focusedPod_, true /* force */); 1364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!pod) 1365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.focusedPod_.isActionBoxMenuHovered = false; 13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 13682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 13702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Handler of mouse move event. 13712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {Event} e Click Event object. 13722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @private 13732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 13742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handleMouseMove_: function(e) { 13752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.disabled) 13762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 13772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (e.webkitMovementX == 0 && e.webkitMovementY == 0) 13782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 13792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Defocus (thus hide) action box, if it is focused on a user pod 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and the pointer is not hovering over it. 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var pod = findAncestorByClass(e.target, 'pod'); 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (document.activeElement && 13842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) document.activeElement.parentNode != pod && 13852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) document.activeElement.classList.contains('action-box-area')) { 13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) document.activeElement.parentNode.focus(); 13872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pod) 13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pod.isActionBoxMenuHovered = true; 13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Hide action boxes on other user pods. 1393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (var i = 0, p; p = this.pods[i]; ++i) 1394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (p != pod && !p.isActionBoxMenuActive) 13952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p.isActionBoxMenuHovered = false; 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handles focus event. 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e Focus Event object. 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleFocus_: function(e) { 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.disabled) 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (e.target.parentNode == this) { 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Focus on a pod 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (e.target.classList.contains('focused')) 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.target.focusInput(); 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(e.target); 14122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 14132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var pod = findAncestorByClass(e.target, 'pod'); 14162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pod && pod.parentNode == this) { 14172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Focus on a control of a pod but not on the action area button. 14182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!pod.classList.contains('focused') && 14192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !e.target.classList.contains('action-box-button')) { 14202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.focusPod(pod); 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.target.focus(); 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clears pod focus when we reach here. It means new focus is neither 14272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on a pod nor on a button/input for a pod. 14282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do not "defocus" user pod when it is a single pod. 14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // That means that 'focused' class will not be removed and 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // input field/button will always be visible. 14312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!this.isSinglePod) 14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.focusPod(); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Handler of keydown event. 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Event} e KeyDown Event object. 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleKeyDown: function(e) { 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.disabled) 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var editing = e.target.tagName == 'INPUT' && e.target.value; 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (e.keyIdentifier) { 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'Left': 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!editing) { 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.keyboardActivated_ = true; 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.focusedPod_ && this.focusedPod_.previousElementSibling) 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(this.focusedPod_.previousElementSibling); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(this.lastElementChild); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.stopPropagation(); 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'Right': 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!editing) { 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.keyboardActivated_ = true; 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.focusedPod_ && this.focusedPod_.nextElementSibling) 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(this.focusedPod_.nextElementSibling); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.focusPod(this.firstElementChild); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.stopPropagation(); 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'Enter': 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.focusedPod_) { 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.activatedPod = this.focusedPod_; 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) e.stopPropagation(); 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 'U+001B': // Esc 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!this.isSinglePod) 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.focusPod(); 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called right after the pod row is shown. 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleAfterShow: function() { 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force input focus for user pod on show and once transition ends. 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.focusedPod_) { 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var focusedPod = this.focusedPod_; 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var screen = this.parentNode; 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var self = this; 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focusedPod.addEventListener('webkitTransitionEnd', function f(e) { 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (e.target == focusedPod) { 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focusedPod.removeEventListener('webkitTransitionEnd', f); 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focusedPod.reset(true); 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify screen that it is ready. 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen.onShow(); 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Boot transition: load wallpaper. 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!self.bootWallpaperLoaded_ && 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Oobe.getInstance().shouldLoadWallpaperOnBoot()) { 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.loadWallpaperTimeout_ = window.setTimeout( 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.loadWallpaper_.bind(self), WALLPAPER_BOOT_LOAD_DELAY_MS); 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.bootWallpaperLoaded_ = true; 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called right before the pod row is shown. 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleBeforeShow: function() { 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var event in this.listeners_) { 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.ownerDocument.addEventListener( 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event, this.listeners_[event][0], this.listeners_[event][1]); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('login-header-bar').buttonsTabIndex = UserPodTabOrder.HEADER_BAR; 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the element is hidden. 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleHide: function() { 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var event in this.listeners_) { 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.ownerDocument.removeEventListener( 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event, this.listeners_[event][0], this.listeners_[event][1]); 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('login-header-bar').buttonsTabIndex = 0; 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when a pod's user image finishes loading. 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handlePodImageLoad: function(pod) { 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var index = this.podsWithPendingImages_.indexOf(pod); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (index == -1) { 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.podsWithPendingImages_.splice(index, 1); 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.podsWithPendingImages_.length == 0) { 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.classList.remove('images-loading'); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PodRow: PodRow 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 1548