Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3083)

Unified Diff: chrome/browser/resources/login.js

Issue 7980012: [ChromeOS] Reland - Make WebUI login use only needed resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/login.html ('k') | chrome/browser/resources/login_ui.css » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/login.js
diff --git a/chrome/browser/resources/login.js b/chrome/browser/resources/login.js
deleted file mode 100644
index 9445b91711a18415b03978fbc5335b51476a5a7e..0000000000000000000000000000000000000000
--- a/chrome/browser/resources/login.js
+++ /dev/null
@@ -1,679 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * @fileoverview Login Screen
- * This is the main code for the login screen.
- */
-
-/**
- * Simple common assertion API
- * @param {*} condition The condition to test. Note that this may be used to
- * test whether a value is defined or not, and we don't want to force a
- * cast to Boolean.
- * @param {string=} opt_message A message to use in any error.
- */
-function assert(condition, opt_message) {
- if (condition)
- return;
-
- var msg = 'Assertion failed';
- if (opt_message)
- msg = msg + ': ' + opt_message;
- throw new Error(msg);
-}
-
-var LoginScreen = (function() {
- 'use strict';
-
- function LoginScreen() {
- }
-
- LoginScreen.prototype = {
- /**
- * The guest card object
- * @type {Slider|undefined}
- * private
- */
- guestCard_: null,
-
- /**
- * The Slider object to use for scrolling through users.
- * @type {Slider|undefined}
- */
- slider_: null,
-
- /**
- * Template to use for creating new 'user-card' elements
- * @type {!Element|undefined}
- */
- userCardTemplate_: null,
-
- /**
- * Indicates whether the shift key is down.
- * @type {bool}
- */
- isShiftPressed_: false,
-
- /**
- * Indicates whether the alt key is down.
- * @type {bool}
- */
- isAltPressed_: false,
-
- /**
- * Indicates whether the ctrl key is down.
- * @type {bool}
- */
- isCtrlPressed_: false,
-
- /**
- * Holds all event handlers tied to users (and so subject to removal when
- * the user list is refreshed)
- * @type {!EventTracker}
- */
- userEvents_: null,
-
- /**
- * Removes all children of an element which have a given class in
- * their classList.
- * @param {!Element} element The parent element to examine.
- * @param {string} className The class to look for.
- */
- removeChildrenByClassName_: function (element, className) {
- var child = element.firstElementChild;
- while (child) {
- var prev = child;
- child = child.nextElementSibling;
- if (prev.classList.contains(className))
- element.removeChild(prev);
- }
- },
-
- /**
- * Search an elements ancestor chain for the nearest element that is a
- * member of the specified class.
- * @param {!Element} element The element to start searching from.
- * @param {string} className The name of the class to locate.
- * @return {Element} The first ancestor of the specified class or null.
- */
- getParentByClassName_: function(element, className) {
- for (var e = element; e; e = e.parentElement) {
- if (e.classList.contains(className))
- return e;
- }
- return null;
- },
-
- /**
- * Create a new user element and attach it to the end of the slider.
- * @param {!Element} parent The element where the user should be inserted.
- * @param {!Object} user The user object to user box for.
- */
- addUser: function(parent, user, index) {
- // Make a deep copy of the template and clear its ID
- var containerElement = this.userCardTemplate_.cloneNode(true);
- this.userCardTemplate_.id = null;
-
- var userElement = containerElement.getElementsByClassName('user')[0];
- assert(userElement, 'Expected user-template to have a user child');
- assert(typeof(user.name) == 'string',
- 'Expected every user to have a name.');
-
- userElement.setAttribute('display-name', user.name);
- userElement.setAttribute('user-name', user.emailAddress);
- userElement.setAttribute('user-index', index);
-
- // Find the span element (if any) and fill it in with the app name
- var span = userElement.querySelector('span');
- if (span)
- span.textContent = user.name;
-
- // Fill in the image
- var userImg = userElement.getElementsByClassName('user-image')[0];
- if (userImg) {
- userImg.style.backgroundImage = "url('" + user.imageUrl + "')";
- // We put a click handler just on the user image - so clicking on the
- // margins between users doesn't do anything
- var self = this;
- this.userEvents_.add(userImg, 'click', function(e) {
- self.userClick(e);
- }, false);
- }
- var userLoginBox =
- userElement.getElementsByClassName('user-login-box')[0];
- var guestLoginBox =
- userElement.getElementsByClassName('guest-login-box')[0];
- var isGuest = !user.email_address;
- if (!isGuest) {
- containerElement.addEventListener(Slider.EventType.ACTIVATE,
- this.userActivateCard);
- containerElement.addEventListener(Slider.EventType.DEACTIVATE,
- this.userDeactivateCard);
-
- var deleteButton =
- userElement.getElementsByClassName('delete-button')[0];
- deleteButton.addEventListener('click', this.userDeleteCard);
-
- userLoginBox.addEventListener('keypress', function(e) {
- userLoginKeyPress(e, userElement);
- });
- } else {
- this.guestCard_ = containerElement;
-
- containerElement.addEventListener(Slider.EventType.ACTIVATE,
- this.guestActivateCard);
- containerElement.addEventListener(Slider.EventType.DEACTIVATE,
- this.guestDeactivateCard);
-
- userLoginBox.hidden = true;
-
- var loginButton =
- guestLoginBox.getElementsByClassName('loginbutton')[0];
- loginButton.addEventListener('click', function(e) {
- chrome.send('launchIncognito', []);
- // Don't allow the click to trigger a link or anything
- e.preventDefault();
- // Prevent the user-frame from receiving the event.
- e.stopPropagation();
- }, true);
- }
-
- // Insert at the end of the provided page
- parent.appendChild(containerElement);
- // Display the container element
- containerElement.hidden = false;
- },
-
- /**
- * Invoked when a user is clicked
- * @param {Event} e The click event.
- */
- userClick: function(e) {
- var target = e.currentTarget;
- var user = this.getParentByClassName_(target, 'user');
- assert(user, 'userClick should have been on a descendant of a user');
-
- var userIndex = user.getAttribute('user-index');
- assert(userIndex, 'unexpected user without userIndex');
-
- if (this.slider.currentCardIndex == null) {
- this.slider.currentCardIndex = userIndex;
- } else {
- // get out of user selected mode.
- this.slider.currentCardIndex = null;
- }
-
- // Don't allow the click to trigger a link or anything
- e.preventDefault();
- // Prevent the user-frame from receiving the event.
- e.stopPropagation();
- },
-
- /**
- * Invoked when the selected user card changes
- * @param {Event} e The selection changed event.
- */
- userFrameSelectionChanged: function(e) {
- var userCards = $('user-list').getElementsByClassName('user-card');
- for (var i = 0; i < userCards.length; i++) {
- if (e.activeCardIndex == null || i == e.activeCardIndex) {
- userCards[i].classList.remove('user-card-grayed');
- } else {
- userCards[i].classList.add('user-card-grayed');
- }
- }
- },
-
- /**
- * Invoked when the guest card is activated.
- * @param {Event} e The Activate Card event
- */
- guestActivateCard: function(e) {
- var card = e.target;
- var user = card.getElementsByClassName('user')[0];
-
- // Focus the card.
- user.classList.add('focus');
-
- assert(user, 'user element not found');
-
- // Hide the guest box.
- var guestBox = user.querySelector('span');
- guestBox.hidden = true;
-
- // This is a guest.
- var guestLoginBox = user.getElementsByClassName('guest-login-box')[0];
- assert(guestLoginBox, 'guest login box not found');
- // Show the guest login box.
- guestLoginBox.hidden = false;
- },
-
- /**
- * Invoked when the guest card is deactivated.
- * @param {Event} e The Deactivate Card event
- */
- guestDeactivateCard: function(e) {
- var card = e.target;
- var user = card.getElementsByClassName('user')[0];
- assert(user, 'user element not found');
- // Show the guest box.
- var guestBox = user.querySelector('span');
- guestBox.hidden = false;
- // Unfocus the card.
- user.classList.remove('focus');
- // Hide the guest login box
- var guestLoginBox = user.getElementsByClassName('guest-login-box')[0];
- assert(guestLoginBox, 'guest login box not found');
- guestLoginBox.hidden = true;
- },
-
- /**
- * Invoked when the user card delete button is clicked
- * @param {Event} e The Click event.
- */
- userDeleteCard: function(e) {
- var deleteButton = e.target;
- var userImageBorderBox = deleteButton.parentNode;
- var userElement = userImageBorderBox.parentNode;
- var userCard = userElement.parentNode;
- $('user-list').removeChild(userCard);
-
- // Update the user indicies
- var usersOnList = $('user-list').getElementsByClassName('user-card');
- for (var userIndex = 0; userIndex < usersOnList.length; userIndex++) {
- var uElement = usersOnList[userIndex].getElementsByClassName('user')[0];
- uElement.setAttribute('user-index', userIndex);
- }
- this.updateSliderCards();
-
- chrome.send('removeUser', [getUserName(userElement)]);
- },
-
- /**
- * Invoked when the user card is activated.
- * @param {Event} e The Activate Card event
- */
- userActivateCard: function(e) {
- var card = e.target;
- var user = card.getElementsByClassName('user')[0];
- assert(user, 'user element not found');
-
- // Focus the card.
- user.classList.add('focus');
-
- // Hide the email box.
- var emailBox = user.querySelector('span');
- emailBox.hidden = true;
-
- // Show the login box
- var userLoginBox = user.getElementsByClassName('user-login-box')[0];
- assert(userLoginBox, 'user login box not found');
- userLoginBox.hidden = false;
-
- // Clear and focus the password box.
- var passwordBox = userLoginBox.getElementsByClassName('passwordbox')[0];
- assert(passwordBox, 'passwordBox element not found');
- passwordBox.value = '';
- passwordBox.focus();
-
- // Show the delete button.
- var deleteButton = user.getElementsByClassName('delete-button')[0];
- deleteButton.hidden = false;
- },
-
- /**
- * Invoked when the user card is deactivated.
- * @param {Event} e The Deactivate Card event
- */
- userDeactivateCard: function(e) {
- var card = e.target;
- var user = card.getElementsByClassName('user')[0];
- assert(user, 'user element not found');
-
- // Unfocus the card.
- user.classList.remove('focus');
-
- // Hide the user login box
- var userLoginBox = user.getElementsByClassName('user-login-box')[0];
- assert(userLoginBox, 'user login box not found');
- userLoginBox.hidden = true;
-
- // Show the email box.
- var emailBox = user.querySelector('span');
- emailBox.hidden = false;
-
- // Hide the delete button.
- var deleteButton = user.getElementsByClassName('delete-button')[0];
- deleteButton.hidden = true;
- },
-
- /**
- * Invoked whenever the users in user-list have changed so that
- * the Slider knows about the new elements.
- */
- updateSliderCards: function() {
- var userCards = $('user-list').getElementsByClassName('user-card');
- var cardArray = [];
- for (var i = 0; i < userCards.length; i++)
- cardArray[i] = userCards[i];
- this.slider.setCards(cardArray, 0);
- },
-
- getUsersCallback: function(users) {
- this.userEvents_.removeAll();
- // grab the add-user-card before we remove it from the list.
- var addUserCard = $('add-user-card');
- // remove all user cards
- this.removeChildrenByClassName_($('user-list'), 'user-card');
-
- // Add the "Add User" card to the user list.
- $('user-list').appendChild(addUserCard);
- // Add the users to the user list.
- for (var i = 0; i < users.length; i++) {
- var user = users[i];
- this.addUser($('user-list'), user, i + 1);
- }
-
- // Tell the slider about the pages
- this.updateSliderCards();
-
- var dummy = $('user-frame').offsetWidth;
- $('user-frame').style.visibility = 'visible';
- },
-
- /**
- * Returns the 'display-name' attribute of a 'user' element.
- * @param {!Element} element The 'user' element.
- */
- getDisplayName: function(userElement) {
- // TODO: verify type of user element
- return userElement.getAttribute('display-name');
- },
-
- /**
- * Returns the 'user-name' attribute of a 'user' element.
- * @param {!Element} element The 'user' element.
- */
- getUserName: function(userElement) {
- // TODO: verify type of user element
- return userElement.getAttribute('user-name');
- },
-
- /**
- * Handles keyboard navigation of the login screen.
- * @param {!Event} element The keypress event.
- */
- userLoginKeyPress: function(e, userElement) {
- if (e.keyCode == 13) {
- e.preventDefault();
- assert(userElement.classList.contains('user'),
- 'The parent element is not a user element.');
-
- var userImg = userElement.getElementsByClassName('user-image')[0];
- var userLoginBox =
- userElement.getElementsByClassName('user-login-box')[0];
- var passwordBox = userLoginBox.getElementsByClassName('passwordbox')[0];
-
- var userName = getUserName(userElement);
- var password = passwordBox.value;
- if (password.length > 0) {
- chrome.send('authenticateUser', [userName, password]);
- return false;
- }
- }
- return true;
- },
-
- loginKeyDown: function(e) {
- switch (e.keyCode) {
- // shift key down
- case 16:
- this.isShiftPressed_ = true;
- break;
- // ctrl key down
- case 17:
- this.isCtrlPressed_ = true;
- break;
- // alt key down
- case 18:
- this.isAltPressed_ = true;
- break;
- }
- var keystroke = String.fromCharCode(e.keyCode);
- switch (keystroke) {
- case 'U':
- if (this.isAltPressed_) {
- this.slider.currentCardIndex = 0;
- // focus the email box.
- var emailBox =
- $('add-user-card').getElementsByClassName('emailbox')[0];
- assert(emailBox, 'Add User e-mail box not found');
- emailBox.focus();
- }
- break;
- case 'P':
- if (this.isAltPressed_) {
- if (this.slider.currentCard == null) {
- this.slider.currentCardIndex = 0;
- }
- var passwordBox =
- this.slider.currentCard.getElementsByClassName('passwordbox')[0];
- assert(passwordBox, 'password box not found');
- passwordBox.focus();
- }
- break;
- case 'B':
- if (this.isAltPressed_) {
- var guestElement =
- this.guestCard_.getElementsByClassName('user')[0];
- var guestIndex = guestElement.getAttribute('user-index');
- assert(guestIndex, 'unexpected user without userIndex');
- this.slider.currentCardIndex = guestIndex;
- setTimeout(function() {
- // TODO(fsamuel): Make this call a common function.
- chrome.send('launchIncognito', []);
- }, 50);
- }
- break;
- default:
- switch (e.keyCode) {
- // enter pressed.
- case 13:
- if (this.slider.currentCard == guestCard_) {
- // TODO(fsamuel): Enter Incognito mode
- }
- break;
- // escape pressed.
- case 27:
- // If we pressed the escape key then don't select any user.
- this.slider.currentCardIndex = null;
- break;
- // left arrow pressed.
- case 37:
- if (this.slider.currentCardIndex == null) {
- // TODO(fsamuel): This should be go to last active card + 1
- this.slider.currentCardIndex = this.slider.cardCount() - 1;
- } else if (this.slider.currentCardIndex > 0) {
- this.slider.currentCardIndex -= 1;
- }
- break;
- // right arrow pressed.
- case 39:
- if (this.slider.currentCardIndex == null) {
- // TODO(fsamuel): This should be go to last active card - 1
- this.slider.currentCardIndex = 0;
- } else if (this.slider.currentCardIndex <
- this.slider.cardCount() - 1) {
- this.slider.currentCardIndex += 1;
- }
- break;
- } // switch
- } // switch
- },
-
- loginKeyUp: function(e) {
- switch (e.keyCode) {
- // shift key up.
- case 16:
- this.isShiftPressed_ = false;
- break;
- // ctrl key up.
- case 17:
- this.isCtrlPressed_ = false;
- break;
- // alt key up.
- case 18:
- this.isAltPressed_ = false;
- break;
- }
- },
-
- /**
- * Creates the Add User card and inserts it into the slider.
- * TODO(fsamuel): This is here only temporarily. We should eventually remove
- * this card.
- */
- initializeAddUserCard: function(e) {
- var emailBox = $('add-user-card').getElementsByClassName('emailbox')[0];
- assert(emailBox, 'Add User e-mail box not found');
- var passwordBox =
- $('add-user-card').getElementsByClassName('passwordbox')[0];
- assert(passwordBox, 'Add User password box not found');
-
- var user = $('add-user-card').getElementsByClassName('user')[0];
- // Clicking the Add User icon hides the icon and shows
- // the user name and password input boxes
- var self = this;
- $('add-user').addEventListener('click', function(e) {
- self.userClick(e);
- });
- $('add-user-card').addEventListener(Slider.EventType.ACTIVATE,
- function(e) {
- //$('add-user-spacer').style.display = 'block';
- // Focus the card.
- user.classList.add('focus');
-
- // Hide the Add User Icon, and show the input boxes.
- $('add-user').parentNode.hidden = true;
- $('add-user-box').hidden = false;
-
- // Focus the email box and clear the password box.
- emailBox.focus();
- passwordBox.value = '';
- }, false);
-
- $('add-user-card').addEventListener(Slider.EventType.DEACTIVATE,
- function(e) {
- //$('add-user-spacer').style.display = 'none';
- // Unfocus the card.
- user.classList.remove('focus');
-
- $('add-user').parentNode.hidden = false;
- $('add-user-box').hidden = true;
- document.body.focus();
- }, false);
-
- // Prevent blurring of a textfield if focus is shifted to the body.
- // This makes sure that the keyboard remains up until we hide the
- // Add User box.
- var focusedElement = null;
- emailBox.addEventListener('focus', function(e) {
- focusedElement = emailBox;
- });
- passwordBox.addEventListener('focus', function(e) {
- focusedElement = passwordBox;
- });
- document.body.addEventListener('focus', function(e) {
- if (focusedElement) {
- focusedElement.focus();
- e.preventDefault();
- }
- });
-
- // Prevent the slider from receiving click events and canceling
- // the Add User card.
- $('add-user-box').addEventListener('click', function(e) {
- e.preventDefault();
- e.stopPropagation();
- }, false);
-
- emailBox.addEventListener('keypress', function(e) {
- e.stopPropagation();
- if (e.keyCode == 13) {
- if (emailBox.value.length > 0) {
- passwordBox.focus();
- }
- }
- });
-
- passwordBox.addEventListener('keypress', function(e) {
- if (e.keyCode == 13) {
- chrome.send('authenticateUser', [emailBox.value, passwordBox.value]);
- }
- }, true);
- },
-
- initialize: function() {
- this.userEvents_ = new EventTracker();
- // Request data on the users so we can fill them in.
- // Note that this is kicked off asynchronously. 'getUsersCallback' will
- // be invoked at some point after this function returns.
- chrome.send('getUsers');
-
- // Prevent touch events from triggering any sort of native scrolling
- document.addEventListener('touchmove', function(e) {
- e.preventDefault();
- }, true);
-
- this.userCardTemplate_ = $('user-template');
- this.userCardTemplate_.id = null;
- $('user-list').removeChild(this.userCardTemplate_);
- $('user-frame').addEventListener(Slider.EventType.SELECTION_CHANGED,
- this.userFrameSelectionChanged);
-
- // Initialize the slider without any cards at the moment
- this.slider = new Slider($('user-frame'), $('user-list'), []);
- this.slider.initialize();
-
- this.initializeAddUserCard();
-
- // Bind on bubble phase
- var self = this;
- $('user-frame').addEventListener('click', function() {
- self.slider.currentCardIndex = null;
- }, false);
- document.addEventListener('keydown', function(e) {
- self.loginKeyDown(e);
- }, true);
- document.addEventListener('keyup', function(e) {
- self.loginKeyUp(e);
- }, true);
- }
- };
-
- return LoginScreen;
-})();
-
-
-var getUsersCallback = null;
-
-document.addEventListener('DOMContentLoaded', function() {
- var loginScreenObj = new LoginScreen();
- getUsersCallback = function(users) {
- // call with the appropriate this.
- loginScreenObj.getUsersCallback(users);
- }
- loginScreenObj.initialize();
-}, false);
-
-// Disable text selection.
-document.onselectstart = function(e) {
- e.preventDefault();
-}
-
-// Disable dragging.
-document.ondragstart = function(e) {
- e.preventDefault();
-}
« no previous file with comments | « chrome/browser/resources/login.html ('k') | chrome/browser/resources/login_ui.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698