Index: chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js |
diff --git a/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js b/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js |
deleted file mode 100644 |
index 6f05f55333469c3522217c7c64b51ddc941837f5..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js |
+++ /dev/null |
@@ -1,1592 +0,0 @@ |
-// Copyright (c) 2013 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 Locally managed user creation flow screen. |
- */ |
- |
-login.createScreen('LocallyManagedUserCreationScreen', |
- 'managed-user-creation', function() { |
- var MAX_NAME_LENGTH = 50; |
- var UserImagesGrid = options.UserImagesGrid; |
- var ButtonImages = UserImagesGrid.ButtonImages; |
- |
- var ManagerPod = cr.ui.define(function() { |
- var node = $('managed-user-creation-manager-template').cloneNode(true); |
- node.removeAttribute('id'); |
- node.removeAttribute('hidden'); |
- return node; |
- }); |
- |
- ManagerPod.userImageSalt_ = {}; |
- |
- /** |
- * UI element for displaying single account in list of possible managers for |
- * new locally managed user. |
- * @type {Object} |
- */ |
- ManagerPod.prototype = { |
- __proto__: HTMLDivElement.prototype, |
- |
- /** @override */ |
- decorate: function() { |
- // Mousedown has to be used instead of click to be able to prevent 'focus' |
- // event later. |
- this.addEventListener('mousedown', |
- this.handleMouseDown_.bind(this)); |
- var screen = $('managed-user-creation'); |
- var managerPod = this; |
- var managerPodList = screen.managerList_; |
- var hideManagerPasswordError = function(element) { |
- managerPod.passwordElement.classList.remove('password-error'); |
- $('bubble').hide(); |
- }; |
- |
- screen.configureTextInput( |
- this.passwordElement, |
- screen.updateNextButtonForManager_.bind(screen), |
- screen.validIfNotEmpty_.bind(screen), |
- function(element) { |
- screen.getScreenButton('next').focus(); |
- }, |
- hideManagerPasswordError); |
- |
- this.passwordElement.addEventListener('keydown', function(e) { |
- switch (e.keyIdentifier) { |
- case 'Up': |
- managerPodList.selectNextPod(-1); |
- e.stopPropagation(); |
- break; |
- case 'Down': |
- managerPodList.selectNextPod(+1); |
- e.stopPropagation(); |
- break; |
- } |
- }); |
- }, |
- |
- /** |
- * Updates UI elements from user data. |
- */ |
- update: function() { |
- this.imageElement.src = 'chrome://userimage/' + this.user.username + |
- '?id=' + ManagerPod.userImageSalt_[this.user.username]; |
- |
- this.nameElement.textContent = this.user.displayName; |
- this.emailElement.textContent = this.user.emailAddress; |
- }, |
- |
- showPasswordError: function() { |
- this.passwordElement.classList.add('password-error'); |
- $('bubble').showTextForElement( |
- this.passwordElement, |
- loadTimeData.getString('createManagedUserWrongManagerPasswordText'), |
- cr.ui.Bubble.Attachment.BOTTOM, |
- 24, 4); |
- }, |
- |
- /** |
- * Brings focus to password field. |
- */ |
- focusInput: function() { |
- this.passwordElement.focus(); |
- }, |
- |
- /** |
- * Gets image element. |
- * @type {!HTMLImageElement} |
- */ |
- get imageElement() { |
- return this.querySelector('.managed-user-creation-manager-image'); |
- }, |
- |
- /** |
- * Gets name element. |
- * @type {!HTMLDivElement} |
- */ |
- get nameElement() { |
- return this.querySelector('.managed-user-creation-manager-name'); |
- }, |
- |
- /** |
- * Gets e-mail element. |
- * @type {!HTMLDivElement} |
- */ |
- get emailElement() { |
- return this.querySelector('.managed-user-creation-manager-email'); |
- }, |
- |
- /** |
- * Gets password element. |
- * @type {!HTMLDivElement} |
- */ |
- get passwordElement() { |
- return this.querySelector('.managed-user-creation-manager-password'); |
- }, |
- |
- /** |
- * Gets password enclosing block. |
- * @type {!HTMLDivElement} |
- */ |
- get passwordBlock() { |
- return this.querySelector('.password-block'); |
- }, |
- |
- /** @override */ |
- handleMouseDown_: function(e) { |
- this.parentNode.selectPod(this); |
- // Prevent default so that we don't trigger 'focus' event. |
- e.preventDefault(); |
- }, |
- |
- /** |
- * The user that this pod represents. |
- * @type {!Object} |
- */ |
- user_: undefined, |
- get user() { |
- return this.user_; |
- }, |
- set user(userDict) { |
- this.user_ = userDict; |
- this.update(); |
- }, |
- }; |
- |
- var ManagerPodList = cr.ui.define('div'); |
- |
- /** |
- * UI element for selecting manager account for new managed user. |
- * @type {Object} |
- */ |
- ManagerPodList.prototype = { |
- __proto__: HTMLDivElement.prototype, |
- |
- selectedPod_: null, |
- |
- /** @override */ |
- decorate: function() { |
- }, |
- |
- /** |
- * Returns all the pods in this pod list. |
- * @type {NodeList} |
- */ |
- get pods() { |
- return this.children; |
- }, |
- |
- addPod: function(manager) { |
- var managerPod = new ManagerPod({user: manager}); |
- this.appendChild(managerPod); |
- managerPod.update(); |
- }, |
- |
- clearPods: function() { |
- this.innerHTML = ''; |
- this.selectedPod_ = null; |
- }, |
- |
- selectPod: function(podToSelect) { |
- if ((this.selectedPod_ == podToSelect) && !!podToSelect) { |
- podToSelect.focusInput(); |
- return; |
- } |
- this.selectedPod_ = podToSelect; |
- for (var i = 0, pod; pod = this.pods[i]; ++i) { |
- if (pod != podToSelect) { |
- pod.classList.remove('focused'); |
- pod.passwordElement.value = ''; |
- pod.passwordBlock.hidden = true; |
- } |
- } |
- if (!podToSelect) |
- return; |
- podToSelect.classList.add('focused'); |
- podToSelect.passwordBlock.hidden = false; |
- podToSelect.passwordElement.value = ''; |
- podToSelect.focusInput(); |
- chrome.send('managerSelectedOnLocallyManagedUserCreationFlow', |
- [podToSelect.user.username]); |
- }, |
- |
- /** |
- * Select pod next to currently selected one in given |direction|. |
- * @param {integer} direction - +1 for selecting pod below current, -1 for |
- * selecting pod above current. |
- * @type {boolean} returns if selected pod has changed. |
- */ |
- selectNextPod: function(direction) { |
- if (!this.selectedPod_) |
- return false; |
- var index = -1; |
- for (var i = 0, pod; pod = this.pods[i]; ++i) { |
- if (pod == this.selectedPod_) { |
- index = i; |
- break; |
- } |
- } |
- if (-1 == index) |
- return false; |
- index = index + direction; |
- if (index < 0 || index >= this.pods.length) |
- return false; |
- this.selectPod(this.pods[index]); |
- return true; |
- } |
- }; |
- |
- var ImportPod = cr.ui.define(function() { |
- var node = $('managed-user-creation-import-template').cloneNode(true); |
- node.removeAttribute('id'); |
- node.removeAttribute('hidden'); |
- return node; |
- }); |
- |
- /** |
- * UI element for displaying single supervised user in list of possible users |
- * for importing existing users. |
- * @type {Object} |
- */ |
- ImportPod.prototype = { |
- __proto__: HTMLDivElement.prototype, |
- |
- /** @override */ |
- decorate: function() { |
- // Mousedown has to be used instead of click to be able to prevent 'focus' |
- // event later. |
- this.addEventListener('mousedown', this.handleMouseDown_.bind(this)); |
- var screen = $('managed-user-creation'); |
- var importList = screen.importList_; |
- }, |
- |
- /** |
- * Updates UI elements from user data. |
- */ |
- update: function() { |
- this.imageElement.src = this.user.avatarurl; |
- this.nameElement.textContent = this.user.name; |
- if (this.user.exists) { |
- if (this.user.conflict == 'imported') { |
- this.nameElement.textContent = |
- loadTimeData.getStringF('importUserExists', this.user.name); |
- } else { |
- this.nameElement.textContent = |
- loadTimeData.getStringF('importUsernameExists', this.user.name); |
- } |
- } |
- this.classList.toggle('imported', this.user.exists); |
- }, |
- |
- /** |
- * Gets image element. |
- * @type {!HTMLImageElement} |
- */ |
- get imageElement() { |
- return this.querySelector('.import-pod-image'); |
- }, |
- |
- /** |
- * Gets name element. |
- * @type {!HTMLDivElement} |
- */ |
- get nameElement() { |
- return this.querySelector('.import-pod-name'); |
- }, |
- |
- /** @override */ |
- handleMouseDown_: function(e) { |
- this.parentNode.selectPod(this); |
- // Prevent default so that we don't trigger 'focus' event. |
- e.preventDefault(); |
- }, |
- |
- /** |
- * The user that this pod represents. |
- * @type {Object} |
- */ |
- user_: undefined, |
- |
- get user() { |
- return this.user_; |
- }, |
- |
- set user(userDict) { |
- this.user_ = userDict; |
- this.update(); |
- }, |
- }; |
- |
- var ImportPodList = cr.ui.define('div'); |
- |
- /** |
- * UI element for selecting existing supervised user for import. |
- * @type {Object} |
- */ |
- ImportPodList.prototype = { |
- __proto__: HTMLDivElement.prototype, |
- |
- selectedPod_: null, |
- |
- /** @override */ |
- decorate: function() { |
- this.setAttribute('tabIndex', 0); |
- this.classList.add('nofocus'); |
- var importList = this; |
- var screen = $('managed-user-creation'); |
- |
- this.addEventListener('focus', function(e) { |
- if (importList.selectedPod_ == null) { |
- if (importList.pods.length > 0) |
- importList.selectPod(importList.pods[0]); |
- } |
- }); |
- |
- this.addEventListener('keydown', function(e) { |
- switch (e.keyIdentifier) { |
- case 'Up': |
- importList.selectNextPod(-1); |
- e.stopPropagation(); |
- break; |
- case 'Enter': |
- if (importList.selectedPod_ != null) |
- screen.importSupervisedUser_(); |
- e.stopPropagation(); |
- break; |
- case 'Down': |
- importList.selectNextPod(+1); |
- e.stopPropagation(); |
- break; |
- } |
- }); |
- }, |
- |
- /** |
- * Returns all the pods in this pod list. |
- * @type {NodeList} |
- */ |
- get pods() { |
- return this.children; |
- }, |
- |
- /** |
- * Returns selected pod. |
- * @type {Node} |
- */ |
- get selectedPod() { |
- return this.selectedPod_; |
- }, |
- |
- addPod: function(user) { |
- var importPod = new ImportPod({user: user}); |
- this.appendChild(importPod); |
- importPod.update(); |
- }, |
- |
- clearPods: function() { |
- this.innerHTML = ''; |
- this.selectedPod_ = null; |
- }, |
- |
- scrollIntoView: function(pod) { |
- scroller = this.parentNode; |
- var itemHeight = pod.getBoundingClientRect().height; |
- var scrollTop = scroller.scrollTop; |
- var top = pod.offsetTop - scroller.offsetTop; |
- var clientHeight = scroller.clientHeight; |
- |
- var self = scroller; |
- |
- // Function to adjust the tops of viewport and row. |
- function scrollToAdjustTop() { |
- self.scrollTop = top; |
- return true; |
- }; |
- // Function to adjust the bottoms of viewport and row. |
- function scrollToAdjustBottom() { |
- var cs = getComputedStyle(self); |
- var paddingY = parseInt(cs.paddingTop, 10) + |
- parseInt(cs.paddingBottom, 10); |
- |
- if (top + itemHeight > scrollTop + clientHeight - paddingY) { |
- self.scrollTop = top + itemHeight - clientHeight + paddingY; |
- return true; |
- } |
- return false; |
- }; |
- |
- // Check if the entire of given indexed row can be shown in the viewport. |
- if (itemHeight <= clientHeight) { |
- if (top < scrollTop) |
- return scrollToAdjustTop(); |
- if (scrollTop + clientHeight < top + itemHeight) |
- return scrollToAdjustBottom(); |
- } else { |
- if (scrollTop < top) |
- return scrollToAdjustTop(); |
- if (top + itemHeight < scrollTop + clientHeight) |
- return scrollToAdjustBottom(); |
- } |
- return false; |
- }, |
- |
- /** |
- * @param {Element} podToSelect - pod to select, can be null. |
- */ |
- selectPod: function(podToSelect) { |
- if ((this.selectedPod_ == podToSelect) && !!podToSelect) { |
- return; |
- } |
- this.selectedPod_ = podToSelect; |
- for (var i = 0; i < this.pods.length; i++) { |
- var pod = this.pods[i]; |
- if (pod != podToSelect) |
- pod.classList.remove('focused'); |
- } |
- if (!podToSelect) |
- return; |
- podToSelect.classList.add('focused'); |
- podToSelect.focus(); |
- var screen = $('managed-user-creation'); |
- if (!this.selectedPod_) { |
- screen.getScreenButton('import').disabled = true; |
- } else { |
- screen.getScreenButton('import').disabled = |
- this.selectedPod_.user.exists; |
- if (!this.selectedPod_.user.exists) { |
- chrome.send('userSelectedForImportInManagedUserCreationFlow', |
- [podToSelect.user.id]); |
- } |
- } |
- }, |
- |
- selectNextPod: function(direction) { |
- if (!this.selectedPod_) |
- return false; |
- var index = -1; |
- for (var i = 0, pod; pod = this.pods[i]; ++i) { |
- if (pod == this.selectedPod_) { |
- index = i; |
- break; |
- } |
- } |
- if (-1 == index) |
- return false; |
- index = index + direction; |
- if (index < 0 || index >= this.pods.length) |
- return false; |
- this.selectPod(this.pods[index]); |
- return true; |
- }, |
- |
- selectUser: function(user_id) { |
- for (var i = 0, pod; pod = this.pods[i]; ++i) { |
- if (pod.user.id == user_id) { |
- this.selectPod(pod); |
- this.scrollIntoView(pod); |
- break; |
- } |
- } |
- }, |
- }; |
- |
- return { |
- EXTERNAL_API: [ |
- 'loadManagers', |
- 'managedUserSuggestImport', |
- 'managedUserNameError', |
- 'managedUserNameOk', |
- 'showErrorPage', |
- 'showIntroPage', |
- 'showManagerPage', |
- 'showManagerPasswordError', |
- 'showPasswordError', |
- 'showProgress', |
- 'showStatusError', |
- 'showTutorialPage', |
- 'showUsernamePage', |
- 'showPage', |
- 'setDefaultImages', |
- 'setCameraPresent', |
- 'setExistingManagedUsers', |
- ], |
- |
- lastVerifiedName_: null, |
- lastIncorrectUserName_: null, |
- managerList_: null, |
- importList_: null, |
- |
- currentPage_: null, |
- imagesRequested_: false, |
- |
- // Contains data that can be auto-shared with handler. |
- context_: {}, |
- |
- /** @override */ |
- decorate: function() { |
- this.managerList_ = new ManagerPodList(); |
- $('managed-user-creation-managers-pane').appendChild(this.managerList_); |
- |
- this.importList_ = new ImportPodList(); |
- $('managed-user-creation-import-pane').appendChild(this.importList_); |
- |
- var userNameField = $('managed-user-creation-name'); |
- var passwordField = $('managed-user-creation-password'); |
- var password2Field = $('managed-user-creation-password-confirm'); |
- |
- var creationScreen = this; |
- |
- var hideUserPasswordError = function(element) { |
- $('bubble').hide(); |
- $('managed-user-creation-password').classList.remove('password-error'); |
- }; |
- |
- this.configureTextInput(userNameField, |
- this.checkUserName_.bind(this), |
- this.validIfNotEmpty_.bind(this), |
- function(element) { |
- passwordField.focus(); |
- }, |
- this.clearUserNameError_.bind(this)); |
- this.configureTextInput(passwordField, |
- this.updateNextButtonForUser_.bind(this), |
- this.validIfNotEmpty_.bind(this), |
- function(element) { |
- password2Field.focus(); |
- }, |
- hideUserPasswordError); |
- this.configureTextInput(password2Field, |
- this.updateNextButtonForUser_.bind(this), |
- this.validIfNotEmpty_.bind(this), |
- function(element) { |
- creationScreen.getScreenButton('next').focus(); |
- }, |
- hideUserPasswordError); |
- |
- this.getScreenButton('error').addEventListener('click', function(e) { |
- creationScreen.handleErrorButtonPressed_(); |
- e.stopPropagation(); |
- }); |
- |
- /* |
- TODO(antrim) : this is an explicit code duplications with UserImageScreen. |
- It should be removed by issue 251179. |
- */ |
- var imageGrid = this.getScreenElement('image-grid'); |
- UserImagesGrid.decorate(imageGrid); |
- |
- // Preview image will track the selected item's URL. |
- var previewElement = this.getScreenElement('image-preview'); |
- previewElement.oncontextmenu = function(e) { e.preventDefault(); }; |
- |
- imageGrid.previewElement = previewElement; |
- imageGrid.selectionType = 'default'; |
- imageGrid.flipPhotoElement = this.getScreenElement('flip-photo'); |
- |
- imageGrid.addEventListener('activate', |
- this.handleActivate_.bind(this)); |
- imageGrid.addEventListener('select', |
- this.handleSelect_.bind(this)); |
- imageGrid.addEventListener('phototaken', |
- this.handlePhotoTaken_.bind(this)); |
- imageGrid.addEventListener('photoupdated', |
- this.handlePhotoUpdated_.bind(this)); |
- // Set the title for camera item in the grid. |
- imageGrid.setCameraTitles( |
- loadTimeData.getString('takePhoto'), |
- loadTimeData.getString('photoFromCamera')); |
- |
- this.getScreenElement('take-photo').addEventListener( |
- 'click', this.handleTakePhoto_.bind(this)); |
- this.getScreenElement('discard-photo').addEventListener( |
- 'click', this.handleDiscardPhoto_.bind(this)); |
- |
- // Toggle 'animation' class for the duration of WebKit transition. |
- this.getScreenElement('flip-photo').addEventListener( |
- 'click', this.handleFlipPhoto_.bind(this)); |
- this.getScreenElement('image-stream-crop').addEventListener( |
- 'webkitTransitionEnd', function(e) { |
- previewElement.classList.remove('animation'); |
- }); |
- this.getScreenElement('image-preview-img').addEventListener( |
- 'webkitTransitionEnd', function(e) { |
- previewElement.classList.remove('animation'); |
- }); |
- }, |
- |
- buttonIds: [], |
- |
- /** |
- * Creates button for adding to controls. |
- * @param {string} buttonId -- id for button, have to be unique within |
- * screen. Actual id will be prefixed with screen name and appended with |
- * '-button'. Use getScreenButton(buttonId) to find it later. |
- * @param {string} i18nPrefix -- screen prefix for i18n values. |
- * @param {function} callback -- will be called on button press with |
- * buttonId parameter. |
- * @param {array} pages -- list of pages where this button should be |
- * displayed. |
- * @param {array} classes -- list of additional CSS classes for button. |
- */ |
- makeButton: function(buttonId, i18nPrefix, callback, pages, classes) { |
- var capitalizedId = buttonId.charAt(0).toUpperCase() + buttonId.slice(1); |
- this.buttonIds.push(buttonId); |
- var result = this.ownerDocument.createElement('button'); |
- result.id = this.name() + '-' + buttonId + '-button'; |
- result.classList.add('screen-control-button'); |
- for (var i = 0; i < classes.length; i++) { |
- result.classList.add(classes[i]); |
- } |
- result.textContent = loadTimeData. |
- getString(i18nPrefix + capitalizedId + 'ButtonTitle'); |
- result.addEventListener('click', function(e) { |
- callback(buttonId); |
- e.stopPropagation(); |
- }); |
- result.pages = pages; |
- return result; |
- }, |
- |
- /** |
- * Simple validator for |configureTextInput|. |
- * Element is considered valid if it has any text. |
- * @param {Element} element - element to be validated. |
- * @return {boolean} - true, if element has any text. |
- */ |
- validIfNotEmpty_: function(element) { |
- return (element.value.length > 0); |
- }, |
- |
- /** |
- * Configure text-input |element|. |
- * @param {Element} element - element to be configured. |
- * @param {function(element)} inputChangeListener - function that will be |
- * called upon any button press/release. |
- * @param {function(element)} validator - function that will be called when |
- * Enter is pressed. If it returns |true| then advance to next element. |
- * @param {function(element)} moveFocus - function that will determine next |
- * element and move focus to it. |
- * @param {function(element)} errorHider - function that is called upon |
- * every button press, so that any associated error can be hidden. |
- */ |
- configureTextInput: function(element, |
- inputChangeListener, |
- validator, |
- moveFocus, |
- errorHider) { |
- element.addEventListener('keydown', function(e) { |
- if (e.keyIdentifier == 'Enter') { |
- var dataValid = true; |
- if (validator) |
- dataValid = validator(element); |
- if (!dataValid) { |
- element.focus(); |
- } else { |
- if (moveFocus) |
- moveFocus(element); |
- } |
- e.stopPropagation(); |
- return; |
- } |
- if (errorHider) |
- errorHider(element); |
- if (inputChangeListener) |
- inputChangeListener(element); |
- }); |
- element.addEventListener('keyup', function(e) { |
- if (inputChangeListener) |
- inputChangeListener(element); |
- }); |
- }, |
- |
- /** |
- * Makes element from template. |
- * @param {string} templateId -- template will be looked up within screen |
- * by class with name "template-<templateId>". |
- * @param {string} elementId -- id for result, uinque within screen. Actual |
- * id will be prefixed with screen name. Use getScreenElement(id) to find |
- * it later. |
- */ |
- makeFromTemplate: function(templateId, elementId) { |
- var templateClassName = 'template-' + templateId; |
- var templateNode = this.querySelector('.' + templateClassName); |
- var screenPrefix = this.name() + '-'; |
- var result = templateNode.cloneNode(true); |
- result.classList.remove(templateClassName); |
- result.id = screenPrefix + elementId; |
- return result; |
- }, |
- |
- /** |
- * @param {string} buttonId -- id of button to be found, |
- * @return {Element} button created by makeButton with given buttonId. |
- */ |
- getScreenButton: function(buttonId) { |
- var fullId = this.name() + '-' + buttonId + '-button'; |
- return this.getScreenElement(buttonId + '-button'); |
- }, |
- |
- /** |
- * @param {string} elementId -- id of element to be found, |
- * @return {Element} button created by makeFromTemplate with elementId. |
- */ |
- getScreenElement: function(elementId) { |
- var fullId = this.name() + '-' + elementId; |
- return $(fullId); |
- }, |
- |
- /** |
- * Screen controls. |
- * @type {!Array} Array of Buttons. |
- */ |
- get buttons() { |
- var links = this.ownerDocument.createElement('div'); |
- var buttons = this.ownerDocument.createElement('div'); |
- links.classList.add('controls-links'); |
- buttons.classList.add('controls-buttons'); |
- |
- var importLink = this.makeFromTemplate('import-supervised-user-link', |
- 'import-link'); |
- importLink.hidden = true; |
- links.appendChild(importLink); |
- |
- var linkElement = importLink.querySelector('.signin-link'); |
- linkElement.addEventListener('click', |
- this.importLinkPressed_.bind(this)); |
- |
- var createLink = this.makeFromTemplate('create-supervised-user-link', |
- 'create-link'); |
- createLink.hidden = true; |
- links.appendChild(createLink); |
- |
- var status = this.makeFromTemplate('status-container', 'status'); |
- buttons.appendChild(status); |
- |
- linkElement = createLink.querySelector('.signin-link'); |
- linkElement.addEventListener('click', |
- this.createLinkPressed_.bind(this)); |
- |
- buttons.appendChild(this.makeButton( |
- 'start', |
- 'managedUserCreationFlow', |
- this.startButtonPressed_.bind(this), |
- ['intro'], |
- ['custom-appearance', 'button-fancy', 'button-blue'])); |
- |
- buttons.appendChild(this.makeButton( |
- 'prev', |
- 'managedUserCreationFlow', |
- this.prevButtonPressed_.bind(this), |
- ['manager'], |
- [])); |
- |
- buttons.appendChild(this.makeButton( |
- 'next', |
- 'managedUserCreationFlow', |
- this.nextButtonPressed_.bind(this), |
- ['manager', 'username'], |
- [])); |
- |
- buttons.appendChild(this.makeButton( |
- 'import', |
- 'managedUserCreationFlow', |
- this.importButtonPressed_.bind(this), |
- ['import', 'import-password'], |
- [])); |
- |
- buttons.appendChild(this.makeButton( |
- 'gotit', |
- 'managedUserCreationFlow', |
- this.gotItButtonPressed_.bind(this), |
- ['created'], |
- ['custom-appearance', 'button-fancy', 'button-blue'])); |
- return [links, buttons]; |
- }, |
- |
- /** |
- * Does sanity check and calls backend with current user name/password pair |
- * to authenticate manager. May result in showManagerPasswordError. |
- * @private |
- */ |
- validateAndLogInAsManager_: function() { |
- var selectedPod = this.managerList_.selectedPod_; |
- if (null == selectedPod) |
- return; |
- |
- var managerId = selectedPod.user.username; |
- var managerDisplayId = selectedPod.user.emailAddress; |
- var managerPassword = selectedPod.passwordElement.value; |
- if (managerPassword.length == 0) |
- return; |
- if (this.disabled) |
- return; |
- this.disabled = true; |
- this.context_.managerId = managerId; |
- this.context_.managerDisplayId = managerDisplayId; |
- this.context_.managerName = selectedPod.user.displayName; |
- chrome.send('authenticateManagerInLocallyManagedUserCreationFlow', |
- [managerId, managerPassword]); |
- }, |
- |
- /** |
- * Does sanity check and calls backend with user display name/password pair |
- * to create a user. |
- * @private |
- */ |
- validateAndCreateLocallyManagedUser_: function() { |
- var firstPassword = $('managed-user-creation-password').value; |
- var secondPassword = |
- $('managed-user-creation-password-confirm').value; |
- var userName = $('managed-user-creation-name').value; |
- if (firstPassword != secondPassword) { |
- this.showPasswordError( |
- loadTimeData.getString('createManagedUserPasswordMismatchError')); |
- return; |
- } |
- if (this.disabled) |
- return; |
- this.disabled = true; |
- |
- this.context_.managedName = userName; |
- chrome.send('specifyLocallyManagedUserCreationFlowUserData', |
- [userName, firstPassword]); |
- }, |
- |
- /** |
- * Does sanity check and calls backend with selected existing supervised |
- * user id to import user. |
- * @private |
- */ |
- importSupervisedUser_: function() { |
- if (this.disabled) |
- return; |
- if (this.currentPage_ == 'import-password') { |
- var firstPassword = this.getScreenElement('password').value; |
- var secondPassword = this.getScreenElement('password-confirm').value; |
- if (firstPassword != secondPassword) { |
- this.showPasswordError( |
- loadTimeData.getString('createManagedUserPasswordMismatchError')); |
- return; |
- } |
- var userId = this.context_.importUserId; |
- this.disabled = true; |
- chrome.send('importSupervisedUserWithPassword', |
- [userId, firstPassword]); |
- return; |
- } else { |
- var selectedPod = this.importList_.selectedPod_; |
- if (!selectedPod) |
- return; |
- var user = selectedPod.user; |
- var userId = user.id; |
- |
- this.context_.importUserId = userId; |
- this.context_.managedName = user.name; |
- this.context_.selectedImageUrl = user.avatarurl; |
- if (!user.needPassword) { |
- this.disabled = true; |
- chrome.send('importSupervisedUser', [userId]); |
- } else { |
- this.setVisiblePage_('import-password'); |
- } |
- } |
- }, |
- |
- /** |
- * Calls backend part to check if current user name is valid/not taken. |
- * Results in call to either managedUserNameOk or managedUserNameError. |
- * @private |
- */ |
- checkUserName_: function() { |
- var userName = this.getScreenElement('name').value; |
- |
- // Avoid flickering |
- if (userName == this.lastIncorrectUserName_ || |
- userName == this.lastVerifiedName_) { |
- return; |
- } |
- if (userName.length > 0) { |
- chrome.send('checkLocallyManagedUserName', [userName]); |
- } else { |
- this.nameErrorVisible = false; |
- this.lastVerifiedName_ = null; |
- this.lastIncorrectUserName_ = null; |
- this.updateNextButtonForUser_(); |
- } |
- }, |
- |
- /** |
- * Called by backend part in case of successful name validation. |
- * @param {string} name - name that was validated. |
- */ |
- managedUserNameOk: function(name) { |
- this.lastVerifiedName_ = name; |
- this.lastIncorrectUserName_ = null; |
- if ($('managed-user-creation-name').value == name) |
- this.clearUserNameError_(); |
- this.updateNextButtonForUser_(); |
- }, |
- |
- /** |
- * Called by backend part in case of name validation failure. |
- * @param {string} name - name that was validated. |
- * @param {string} errorText - reason why this name is invalid. |
- */ |
- managedUserNameError: function(name, errorText) { |
- this.disabled = false; |
- this.lastIncorrectUserName_ = name; |
- this.lastVerifiedName_ = null; |
- |
- var userNameField = $('managed-user-creation-name'); |
- if (userNameField.value == this.lastIncorrectUserName_) { |
- this.nameErrorVisible = true; |
- $('bubble').showTextForElement( |
- $('managed-user-creation-name'), |
- errorText, |
- cr.ui.Bubble.Attachment.RIGHT, |
- 12, 4); |
- this.setButtonDisabledStatus('next', true); |
- } |
- }, |
- |
- managedUserSuggestImport: function(name, user_id) { |
- this.disabled = false; |
- this.lastIncorrectUserName_ = name; |
- this.lastVerifiedName_ = null; |
- |
- var userNameField = $('managed-user-creation-name'); |
- var creationScreen = this; |
- |
- if (userNameField.value == this.lastIncorrectUserName_) { |
- this.nameErrorVisible = true; |
- var link = this.ownerDocument.createElement('div'); |
- link.innerHTML = loadTimeData.getStringF( |
- 'importBubbleText', |
- '<a class="signin-link" href="#">', |
- name, |
- '</a>'); |
- link.querySelector('.signin-link').addEventListener('click', |
- function(e) { |
- creationScreen.handleSuggestImport_(user_id); |
- e.stopPropagation(); |
- }); |
- $('bubble').showContentForElement( |
- $('managed-user-creation-name'), |
- cr.ui.Bubble.Attachment.RIGHT, |
- link, |
- 12, 4); |
- this.setButtonDisabledStatus('next', true); |
- } |
- }, |
- |
- /** |
- * Clears user name error, if name is no more guaranteed to be invalid. |
- * @private |
- */ |
- clearUserNameError_: function() { |
- // Avoid flickering |
- if ($('managed-user-creation-name').value == |
- this.lastIncorrectUserName_) { |
- return; |
- } |
- this.nameErrorVisible = false; |
- }, |
- |
- /** |
- * Called by backend part in case of password validation failure. |
- * @param {string} errorText - reason why this password is invalid. |
- */ |
- showPasswordError: function(errorText) { |
- $('bubble').showTextForElement( |
- $('managed-user-creation-password'), |
- errorText, |
- cr.ui.Bubble.Attachment.RIGHT, |
- 12, 4); |
- $('managed-user-creation-password').classList.add('password-error'); |
- $('managed-user-creation-password').focus(); |
- this.disabled = false; |
- this.setButtonDisabledStatus('next', true); |
- }, |
- |
- /** |
- * True if user name error should be displayed. |
- * @type {boolean} |
- */ |
- set nameErrorVisible(value) { |
- $('managed-user-creation-name'). |
- classList.toggle('duplicate-name', value); |
- if (!value) |
- $('bubble').hide(); |
- }, |
- |
- /** |
- * Updates state of Continue button after minimal checks. |
- * @return {boolean} true, if form seems to be valid. |
- * @private |
- */ |
- updateNextButtonForManager_: function() { |
- var selectedPod = this.managerList_.selectedPod_; |
- canProceed = null != selectedPod && |
- selectedPod.passwordElement.value.length > 0; |
- |
- this.setButtonDisabledStatus('next', !canProceed); |
- return canProceed; |
- }, |
- |
- /** |
- * Updates state of Continue button after minimal checks. |
- * @return {boolean} true, if form seems to be valid. |
- * @private |
- */ |
- updateNextButtonForUser_: function() { |
- var firstPassword = this.getScreenElement('password').value; |
- var secondPassword = this.getScreenElement('password-confirm').value; |
- var userName = this.getScreenElement('name').value; |
- |
- var passwordOk = (firstPassword.length > 0) && |
- (firstPassword.length == secondPassword.length); |
- |
- if (this.currentPage_ == 'import-password') { |
- this.setButtonDisabledStatus('import', !passwordOk); |
- return passwordOk; |
- } |
- var imageGrid = this.getScreenElement('image-grid'); |
- var imageChosen = !(imageGrid.selectionType == 'camera' && |
- imageGrid.cameraLive); |
- var canProceed = |
- passwordOk && |
- (userName.length > 0) && |
- this.lastVerifiedName_ && |
- (userName == this.lastVerifiedName_) && |
- imageChosen; |
- |
- this.setButtonDisabledStatus('next', !canProceed); |
- return canProceed; |
- }, |
- |
- showSelectedManagerPasswordError_: function() { |
- var selectedPod = this.managerList_.selectedPod_; |
- selectedPod.showPasswordError(); |
- selectedPod.passwordElement.value = ''; |
- selectedPod.focusInput(); |
- this.updateNextButtonForManager_(); |
- }, |
- |
- /** |
- * Enables one particular subpage and hides the rest. |
- * @param {string} visiblePage - name of subpage. |
- * @private |
- */ |
- setVisiblePage_: function(visiblePage) { |
- this.disabled = false; |
- this.updateText_(); |
- $('bubble').hide(); |
- if (!this.imagesRequested_) { |
- chrome.send('supervisedUserGetImages'); |
- this.imagesRequested_ = true; |
- } |
- var pageNames = ['intro', |
- 'manager', |
- 'username', |
- 'import', |
- 'error', |
- 'created']; |
- var pageButtons = {'intro' : 'start', |
- 'error' : 'error', |
- 'import' : 'import', |
- 'import-password' : 'import', |
- 'created' : 'gotit'}; |
- this.hideStatus_(); |
- var pageToDisplay = visiblePage; |
- if (visiblePage == 'import-password') |
- pageToDisplay = 'username'; |
- |
- for (i in pageNames) { |
- var pageName = pageNames[i]; |
- var page = $('managed-user-creation-' + pageName); |
- page.hidden = (pageName != pageToDisplay); |
- if (pageName == pageToDisplay) |
- $('step-logo').hidden = page.classList.contains('step-no-logo'); |
- } |
- |
- for (i in this.buttonIds) { |
- var button = this.getScreenButton(this.buttonIds[i]); |
- button.hidden = button.pages.indexOf(visiblePage) < 0; |
- button.disabled = false; |
- } |
- |
- var pagesWithCancel = ['intro', 'manager', 'username', 'import-password', |
- 'error', 'import']; |
- $('login-header-bar').allowCancel = |
- pagesWithCancel.indexOf(visiblePage) > 0; |
- $('cancel-add-user-button').disabled = false; |
- |
- this.getScreenElement('import-link').hidden = true; |
- this.getScreenElement('create-link').hidden = true; |
- |
- if (pageButtons[visiblePage]) |
- this.getScreenButton(pageButtons[visiblePage]).focus(); |
- |
- this.currentPage_ = visiblePage; |
- |
- if (visiblePage == 'manager' || visiblePage == 'intro') { |
- $('managed-user-creation-password').classList.remove('password-error'); |
- if (this.managerList_.pods.length > 0) |
- this.managerList_.selectPod(this.managerList_.pods[0]); |
- } |
- |
- if (visiblePage == 'username' || visiblePage == 'import-password') { |
- var elements = this.getScreenElement(pageToDisplay). |
- querySelectorAll('.hide-on-import'); |
- for (var i = 0; i < elements.length; i++) { |
- elements[i].classList.toggle('hidden-on-import', |
- visiblePage == 'import-password'); |
- } |
- } |
- if (visiblePage == 'username') { |
- var imageGrid = this.getScreenElement('image-grid'); |
- // select some image. |
- var selected = this.imagesData_[ |
- Math.floor(Math.random() * this.imagesData_.length)]; |
- this.context_.selectedImageUrl = selected.url; |
- imageGrid.selectedItemUrl = selected.url; |
- chrome.send('supervisedUserSelectImage', |
- [selected.url, 'default']); |
- this.getScreenElement('image-grid').redraw(); |
- this.checkUserName_(); |
- this.updateNextButtonForUser_(); |
- this.getScreenElement('name').focus(); |
- this.getScreenElement('import-link').hidden = |
- this.importList_.pods.length == 0; |
- } else if (visiblePage == 'import-password') { |
- var imageGrid = this.getScreenElement('image-grid'); |
- var selected; |
- if ('selectedImageUrl' in this.context_) { |
- selected = this.context_.selectedImageUrl; |
- } else { |
- // select some image. |
- selected = this.imagesData_[ |
- Math.floor(Math.random() * this.imagesData_.length)].url; |
- chrome.send('supervisedUserSelectImage', |
- [selected, 'default']); |
- } |
- imageGrid.selectedItemUrl = selected; |
- this.getScreenElement('image-grid').redraw(); |
- |
- this.updateNextButtonForUser_(); |
- |
- this.getScreenElement('password').focus(); |
- this.getScreenElement('import-link').hidden = true; |
- } else { |
- this.getScreenElement('image-grid').stopCamera(); |
- } |
- if (visiblePage == 'import') { |
- this.getScreenElement('create-link').hidden = false; |
- this.getScreenButton('import').disabled = |
- !this.importList_.selectedPod_ || |
- this.importList_.selectedPod_.user.exists; |
- } |
- chrome.send('currentSupervisedUserPage', [this.currentPage_]); |
- }, |
- |
- setButtonDisabledStatus: function(buttonName, status) { |
- var button = $('managed-user-creation-' + buttonName + '-button'); |
- button.disabled = status; |
- }, |
- |
- gotItButtonPressed_: function() { |
- chrome.send('finishLocalManagedUserCreation'); |
- }, |
- |
- handleErrorButtonPressed_: function() { |
- chrome.send('abortLocalManagedUserCreation'); |
- }, |
- |
- startButtonPressed_: function() { |
- this.setVisiblePage_('manager'); |
- this.setButtonDisabledStatus('next', true); |
- }, |
- |
- nextButtonPressed_: function() { |
- if (this.currentPage_ == 'manager') { |
- this.validateAndLogInAsManager_(); |
- return; |
- } |
- if (this.currentPage_ == 'username') { |
- this.validateAndCreateLocallyManagedUser_(); |
- } |
- }, |
- |
- importButtonPressed_: function() { |
- this.importSupervisedUser_(); |
- }, |
- |
- importLinkPressed_: function() { |
- this.setVisiblePage_('import'); |
- }, |
- |
- handleSuggestImport_: function(user_id) { |
- this.setVisiblePage_('import'); |
- this.importList_.selectUser(user_id); |
- }, |
- |
- createLinkPressed_: function() { |
- this.setVisiblePage_('username'); |
- this.lastIncorrectUserName_ = null; |
- this.lastVerifiedName_ = null; |
- this.checkUserName_(); |
- }, |
- |
- prevButtonPressed_: function() { |
- this.setVisiblePage_('intro'); |
- }, |
- |
- showProgress: function(text) { |
- var status = this.getScreenElement('status'); |
- var statusText = status.querySelector('.id-text'); |
- statusText.textContent = text; |
- statusText.classList.remove('error'); |
- status.querySelector('.id-spinner').hidden = false; |
- status.hidden = false; |
- this.getScreenElement('import-link').hidden = true; |
- this.getScreenElement('create-link').hidden = true; |
- }, |
- |
- showStatusError: function(text) { |
- var status = this.getScreenElement('status'); |
- var statusText = status.querySelector('.id-text'); |
- statusText.textContent = text; |
- statusText.classList.add('error'); |
- status.querySelector('.id-spinner').hidden = true; |
- status.hidden = false; |
- this.getScreenElement('import-link').hidden = true; |
- this.getScreenElement('create-link').hidden = true; |
- }, |
- |
- hideStatus_: function() { |
- var status = this.getScreenElement('status'); |
- status.hidden = true; |
- }, |
- |
- /** |
- * Updates state of login header so that necessary buttons are displayed. |
- **/ |
- onBeforeShow: function(data) { |
- $('login-header-bar').signinUIState = |
- SIGNIN_UI_STATE.MANAGED_USER_CREATION_FLOW; |
- if (data['managers']) { |
- this.loadManagers(data['managers']); |
- } |
- var imageGrid = this.getScreenElement('image-grid'); |
- imageGrid.updateAndFocus(); |
- }, |
- |
- /** |
- * Update state of login header so that necessary buttons are displayed. |
- */ |
- onBeforeHide: function() { |
- $('login-header-bar').signinUIState = SIGNIN_UI_STATE.HIDDEN; |
- this.getScreenElement('image-grid').stopCamera(); |
- }, |
- |
- /** |
- * Returns a control which should receive an initial focus. |
- */ |
- get defaultControl() { |
- return $('managed-user-creation-name'); |
- }, |
- |
- /** |
- * True if the the screen is disabled (handles no user interaction). |
- * @type {boolean} |
- */ |
- disabled_: false, |
- |
- get disabled() { |
- return this.disabled_; |
- }, |
- |
- set disabled(value) { |
- this.disabled_ = value; |
- var controls = this.querySelectorAll('button,input'); |
- for (var i = 0, control; control = controls[i]; ++i) { |
- control.disabled = value; |
- } |
- $('login-header-bar').disabled = value; |
- $('cancel-add-user-button').disabled = false; |
- }, |
- |
- /** |
- * Called by backend part to propagate list of possible managers. |
- * @param {Array} userList - list of users that can be managers. |
- */ |
- loadManagers: function(userList) { |
- $('managed-user-creation-managers-block').hidden = false; |
- this.managerList_.clearPods(); |
- for (var i = 0; i < userList.length; ++i) |
- this.managerList_.addPod(userList[i]); |
- if (userList.length > 0) |
- this.managerList_.selectPod(this.managerList_.pods[0]); |
- }, |
- |
- /** |
- * Cancels user creation and drops to user screen (either sign). |
- */ |
- cancel: function() { |
- var notSignedInPages = ['intro', 'manager']; |
- var postCreationPages = ['created']; |
- if (notSignedInPages.indexOf(this.currentPage_) >= 0) { |
- // Make sure no manager password is kept: |
- this.managerList_.clearPods(); |
- |
- $('pod-row').loadLastWallpaper(); |
- |
- Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER}); |
- Oobe.resetSigninUI(true); |
- return; |
- } |
- if (postCreationPages.indexOf(this.currentPage_) >= 0) { |
- chrome.send('finishLocalManagedUserCreation'); |
- return; |
- } |
- chrome.send('abortLocalManagedUserCreation'); |
- }, |
- |
- updateText_: function() { |
- var managerDisplayId = this.context_.managerDisplayId; |
- this.updateElementText_('intro-alternate-text', |
- 'createManagedUserIntroAlternateText'); |
- this.updateElementText_('created-text-1', |
- 'createManagedUserCreatedText1', |
- this.context_.managedName); |
- // TODO(antrim): Move wrapping with strong in grd file, and eliminate this |
- //call. |
- this.updateElementText_('created-text-2', |
- 'createManagedUserCreatedText2', |
- this.wrapStrong( |
- loadTimeData.getString('managementURL')), |
- this.context_.managedName); |
- this.updateElementText_('created-text-3', |
- 'createManagedUserCreatedText3', |
- managerDisplayId); |
- this.updateElementText_('name-explanation', |
- 'createManagedUserNameExplanation', |
- managerDisplayId); |
- }, |
- |
- wrapStrong: function(original) { |
- if (original == undefined) |
- return original; |
- return '<strong>' + original + '</strong>'; |
- }, |
- |
- updateElementText_: function(localId, templateName) { |
- var args = Array.prototype.slice.call(arguments); |
- args.shift(); |
- this.getScreenElement(localId).innerHTML = |
- loadTimeData.getStringF.apply(loadTimeData, args); |
- }, |
- |
- showIntroPage: function() { |
- $('managed-user-creation-password').value = ''; |
- $('managed-user-creation-password-confirm').value = ''; |
- $('managed-user-creation-name').value = ''; |
- |
- this.lastVerifiedName_ = null; |
- this.lastIncorrectUserName_ = null; |
- this.passwordErrorVisible = false; |
- $('managed-user-creation-password').classList.remove('password-error'); |
- this.nameErrorVisible = false; |
- |
- this.setVisiblePage_('intro'); |
- }, |
- |
- showManagerPage: function() { |
- this.setVisiblePage_('manager'); |
- }, |
- |
- showUsernamePage: function() { |
- this.setVisiblePage_('username'); |
- }, |
- |
- showTutorialPage: function() { |
- this.setVisiblePage_('created'); |
- }, |
- |
- showPage: function(page) { |
- this.setVisiblePage_(page); |
- }, |
- |
- showErrorPage: function(errorTitle, errorText, errorButtonText) { |
- this.disabled = false; |
- $('managed-user-creation-error-title').innerHTML = errorTitle; |
- $('managed-user-creation-error-text').innerHTML = errorText; |
- $('managed-user-creation-error-button').textContent = errorButtonText; |
- this.setVisiblePage_('error'); |
- }, |
- |
- showManagerPasswordError: function() { |
- this.disabled = false; |
- this.showSelectedManagerPasswordError_(); |
- }, |
- |
- /* |
- TODO(antrim) : this is an explicit code duplications with UserImageScreen. |
- It should be removed by issue 251179. |
- */ |
- /** |
- * Currently selected user image index (take photo button is with zero |
- * index). |
- * @type {number} |
- */ |
- selectedUserImage_: -1, |
- imagesData: [], |
- |
- setDefaultImages: function(imagesData) { |
- var imageGrid = this.getScreenElement('image-grid'); |
- for (var i = 0, data; data = imagesData[i]; i++) { |
- var item = imageGrid.addItem(data.url, data.title); |
- item.type = 'default'; |
- item.author = data.author || ''; |
- item.website = data.website || ''; |
- } |
- this.imagesData_ = imagesData; |
- }, |
- |
- |
- handleActivate_: function() { |
- var imageGrid = this.getScreenElement('image-grid'); |
- if (imageGrid.selectedItemUrl == ButtonImages.TAKE_PHOTO) { |
- this.handleTakePhoto_(); |
- return; |
- } |
- this.nextButtonPressed_(); |
- }, |
- |
- /** |
- * Handles selection change. |
- * @param {Event} e Selection change event. |
- * @private |
- */ |
- handleSelect_: function(e) { |
- var imageGrid = this.getScreenElement('image-grid'); |
- this.updateNextButtonForUser_(); |
- |
- $('managed-user-creation-flip-photo').tabIndex = |
- (imageGrid.selectionType == 'camera') ? 0 : -1; |
- if (imageGrid.cameraLive || imageGrid.selectionType != 'camera') |
- imageGrid.previewElement.classList.remove('phototaken'); |
- else |
- imageGrid.previewElement.classList.add('phototaken'); |
- |
- if (!imageGrid.cameraLive || imageGrid.selectionType != 'camera') { |
- this.context_.selectedImageUrl = imageGrid.selectedItemUrl; |
- chrome.send('supervisedUserSelectImage', |
- [imageGrid.selectedItemUrl, imageGrid.selectionType]); |
- } |
- // Start/stop camera on (de)selection. |
- if (!imageGrid.inProgramSelection && |
- imageGrid.selectionType != e.oldSelectionType) { |
- if (imageGrid.selectionType == 'camera') { |
- // Programmatic selection of camera item is done in |
- // startCamera callback where streaming is started by itself. |
- imageGrid.startCamera( |
- function() { |
- // Start capture if camera is still the selected item. |
- $('managed-user-creation-image-preview-img').classList.toggle( |
- 'animated-transform', true); |
- return imageGrid.selectedItem == imageGrid.cameraImage; |
- }); |
- } else { |
- $('managed-user-creation-image-preview-img').classList.toggle( |
- 'animated-transform', false); |
- imageGrid.stopCamera(); |
- } |
- } |
- }, |
- |
- /** |
- * Handle camera-photo flip. |
- */ |
- handleFlipPhoto_: function() { |
- var imageGrid = this.getScreenElement('image-grid'); |
- imageGrid.previewElement.classList.add('animation'); |
- imageGrid.flipPhoto = !imageGrid.flipPhoto; |
- var flipMessageId = imageGrid.flipPhoto ? |
- 'photoFlippedAccessibleText' : 'photoFlippedBackAccessibleText'; |
- announceAccessibleMessage(loadTimeData.getString(flipMessageId)); |
- }, |
- |
- /** |
- * Handle photo capture from the live camera stream. |
- */ |
- handleTakePhoto_: function(e) { |
- this.getScreenElement('image-grid').takePhoto(); |
- chrome.send('supervisedUserTakePhoto'); |
- }, |
- |
- handlePhotoTaken_: function(e) { |
- chrome.send('supervisedUserPhotoTaken', [e.dataURL]); |
- announceAccessibleMessage( |
- loadTimeData.getString('photoCaptureAccessibleText')); |
- }, |
- |
- /** |
- * Handle photo updated event. |
- * @param {Event} e Event with 'dataURL' property containing a data URL. |
- */ |
- handlePhotoUpdated_: function(e) { |
- chrome.send('supervisedUserPhotoTaken', [e.dataURL]); |
- }, |
- |
- /** |
- * Handle discarding the captured photo. |
- */ |
- handleDiscardPhoto_: function(e) { |
- var imageGrid = this.getScreenElement('image-grid'); |
- imageGrid.discardPhoto(); |
- chrome.send('supervisedUserDiscardPhoto'); |
- announceAccessibleMessage( |
- loadTimeData.getString('photoDiscardAccessibleText')); |
- }, |
- |
- setCameraPresent: function(present) { |
- this.getScreenElement('image-grid').cameraPresent = present; |
- }, |
- |
- setExistingManagedUsers: function(users) { |
- var selectedUser = null; |
- // Store selected user |
- if (this.importList_.selectedPod) |
- selectedUser = this.importList_.selectedPod.user.id; |
- |
- var userList = users; |
- userList.sort(function(a, b) { |
- // Put existing users last. |
- if (a.exists != b.exists) |
- return a.exists ? 1 : -1; |
- // Sort rest by name. |
- return a.name.localeCompare(b.name, [], {sensitivity: 'base'}); |
- }); |
- |
- this.importList_.clearPods(); |
- var selectedIndex = -1; |
- for (var i = 0; i < userList.length; ++i) { |
- this.importList_.addPod(userList[i]); |
- if (selectedUser == userList[i].id) |
- selectedIndex = i; |
- } |
- |
- if (userList.length == 1) |
- this.importList_.selectPod(this.importList_.pods[0]); |
- |
- if (selectedIndex >= 0) |
- this.importList_.selectPod(this.importList_.pods[selectedIndex]); |
- |
- if (this.currentPage_ == 'username') |
- this.getScreenElement('import-link').hidden = (userList.length == 0); |
- }, |
- }; |
-}); |
- |