Chromium Code Reviews| 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 |
| index 05dfbd03e559373420e8902e459b83b99d62cd9d..f605ee764ec41bf508157b0052fa93352f496e85 100644 |
| --- a/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js |
| +++ b/chrome/browser/resources/chromeos/login/screen_locally_managed_user_creation.js |
| @@ -37,7 +37,7 @@ cr.define('login', function() { |
| managerPod.passwordErrorElement.hidden = true; |
| }); |
| this.passwordElement.addEventListener('keyup', function(e) { |
| - screen.updateContinueButton_(); |
| + screen.updateNextButtonForManager_(); |
| }); |
| }, |
| @@ -185,6 +185,9 @@ cr.define('login', function() { |
| podToSelect.passwordBlock.hidden = false; |
| podToSelect.passwordElement.value = ''; |
| podToSelect.focusInput(); |
| + chrome.send('managerSelectedOnLocallyManagedUserCreationFlow', |
| + [podToSelect.user.emailAddress]); |
| + |
| }, |
| }; |
| @@ -213,6 +216,9 @@ cr.define('login', function() { |
| currentPage_: null, |
| + // Contains data that can be auto-shared with handler. |
| + context_: {}, |
| + |
| /** @override */ |
| decorate: function() { |
| this.managerList_ = new ManagerPodList(); |
| @@ -244,7 +250,7 @@ cr.define('login', function() { |
| if (e.keyIdentifier == 'Enter') { |
| if (passwordField.value.length > 0) { |
| password2Field.focus(); |
| - creationScreen.updateContinueButton_(); |
| + creationScreen.updateNextButtonForUser_(); |
| } |
| e.stopPropagation(); |
| } |
| @@ -256,18 +262,18 @@ cr.define('login', function() { |
| if (passwordField.value.length > 0) { |
| if (creationScreen.managerList_.selectedPod_) |
| creationScreen.managerList_.selectedPod_.focusInput(); |
| - creationScreen.updateContinueButton_(); |
| + creationScreen.updateNextButtonForUser_(); |
| } |
| e.stopPropagation(); |
| } |
| }); |
| password2Field.addEventListener('keyup', function(e) { |
| - creationScreen.updateContinueButton_(); |
| + creationScreen.updateNextButtonForUser_(); |
| }); |
| passwordField.addEventListener('keyup', function(e) { |
| - creationScreen.updateContinueButton_(); |
| + creationScreen.updateNextButtonForUser_(); |
| }); |
| }, |
| @@ -278,13 +284,29 @@ cr.define('login', function() { |
| get buttons() { |
| var buttons = []; |
| - var proceedButton = this.ownerDocument.createElement('button'); |
| - proceedButton.id = 'managed-user-creation-flow-proceed-button'; |
| + var startButton = this.ownerDocument.createElement('button'); |
| + startButton.id = 'managed-user-creation-flow-start-button'; |
| + |
| + startButton.textContent = loadTimeData. |
| + getString('managedUserCreationFlowStartButtonTitle'); |
| + startButton.hidden = true; |
| + buttons.push(startButton); |
| + |
| + var previousButton = this.ownerDocument.createElement('button'); |
| + previousButton.id = 'managed-user-creation-flow-prev-button'; |
| + |
| + previousButton.textContent = loadTimeData. |
| + getString('managedUserCreationFlowPreviousButtonTitle'); |
| + previousButton.hidden = true; |
| + buttons.push(previousButton); |
| - proceedButton.textContent = loadTimeData. |
| - getString('managedUserCreationFlowProceedButtonTitle'); |
| - proceedButton.hidden = true; |
| - buttons.push(proceedButton); |
| + var nextButton = this.ownerDocument.createElement('button'); |
| + nextButton.id = 'managed-user-creation-flow-next-button'; |
| + |
| + nextButton.textContent = loadTimeData. |
| + getString('managedUserCreationFlowNextButtonTitle'); |
| + nextButton.hidden = true; |
| + buttons.push(nextButton); |
| var finishButton = this.ownerDocument.createElement('button'); |
| finishButton.id = 'managed-user-creation-flow-finish-button'; |
| @@ -294,49 +316,59 @@ cr.define('login', function() { |
| finishButton.hidden = true; |
| buttons.push(finishButton); |
| - var retryButton = this.ownerDocument.createElement('button'); |
| - retryButton.id = 'managed-user-creation-flow-retry-button'; |
| - |
| - retryButton.textContent = loadTimeData. |
| - getString('managedUserCreationFlowRetryButtonTitle'); |
| - retryButton.hidden = true; |
| - buttons.push(retryButton); |
| - |
| var cancelButton = this.ownerDocument.createElement('button'); |
| cancelButton.id = 'managed-user-creation-flow-cancel-button'; |
| - cancelButton.textContent = loadTimeData. |
| - getString('managedUserCreationFlowCancelButtonTitle'); |
| - cancelButton.hidden = true; |
| - buttons.push(cancelButton); |
| - |
| var creationFlowScreen = this; |
| finishButton.addEventListener('click', function(e) { |
| - creationFlowScreen.finishFlow_(); |
| + creationFlowScreen.finishButtonPressed_(); |
| e.stopPropagation(); |
| }); |
| - proceedButton.addEventListener('click', function(e) { |
| - creationFlowScreen.proceedFlow_(); |
| + startButton.addEventListener('click', function(e) { |
| + creationFlowScreen.startButtonPressed_(); |
| e.stopPropagation(); |
| }); |
| - retryButton.addEventListener('click', function(e) { |
| - creationFlowScreen.retryFlow_(); |
| + nextButton.addEventListener('click', function(e) { |
| + creationFlowScreen.nextButtonPressed_(); |
| e.stopPropagation(); |
| }); |
| - cancelButton.addEventListener('click', function(e) { |
| - creationFlowScreen.cancel(); |
| + previousButton.addEventListener('click', function(e) { |
| + creationFlowScreen.prevButtonPressed_(); |
| e.stopPropagation(); |
| }); |
| return buttons; |
| }, |
| + |
|
Nikita (slow)
2013/04/12 13:12:15
nit: Drop empty line.
|
| /** |
| * Does sanity check and calls backend with current user name/password pair |
| - * to create a user. May result in showPasswordError. |
| + * to authenticate manager. May result in showManagerPasswordError. |
| + * @private |
| + */ |
| + validateAndLogInAsManager_: function() { |
| + var selectedPod = this.managerList_.selectedPod_; |
| + if (null == selectedPod) |
| + return; |
| + |
| + var managerId = selectedPod.user.emailAddress; |
| + var managerPassword = selectedPod.passwordElement.value; |
| + if (managerPassword.empty) |
| + return; |
| + |
| + this.disabled = true; |
| + this.context_.managerId = managerId; |
| + chrome.send('authenticateManagerInLocallyManagedUserCreationFlow', |
| + [managerId, managerPassword]); |
| + }, |
| + |
| + |
| + /** |
| + * Does sanity check and calls backend with user display name/password pair |
| + * to create a user. |
| * @private |
| */ |
| - validateInputAndStartFlow_: function() { |
| + validateAndCreateLocallyManagedUser_: function() { |
| var firstPassword = $('managed-user-creation-flow-password').value; |
| var secondPassword = |
| $('managed-user-creation-flow-password-confirm').value; |
| @@ -346,17 +378,10 @@ cr.define('login', function() { |
| loadTimeData.getString('createManagedUserPasswordMismatchError')); |
| return; |
| } |
| - var selectedPod = this.managerList_.selectedPod_; |
| - if (null == selectedPod) |
| - return; |
| - |
| - var managerId = selectedPod.user.emailAddress; |
| - var managerPassword = selectedPod.passwordElement.value; |
| this.disabled = true; |
| - // TODO(antrim) : we might use some minimal password validation |
| - // (e.g. non-empty etc.) here. |
| - chrome.send('runLocallyManagedUserCreationFlow', |
| - [userName, firstPassword, managerId, managerPassword]); |
| + this.context_.managedName = userName; |
| + chrome.send('specifyLocallyManagedUserCreationFlowUserData', |
| + [userName, firstPassword]); |
| }, |
| /** |
| @@ -390,7 +415,7 @@ cr.define('login', function() { |
| this.lastIncorrectUserName_ = null; |
| if ($('managed-user-creation-flow-name').value == name) |
| this.clearUserNameError_(); |
| - this.updateContinueButton_(); |
| + this.updateNextButtonForManager_(); |
| }, |
| /** |
| @@ -407,7 +432,7 @@ cr.define('login', function() { |
| this.nameErrorVisible = true; |
| $('managed-user-creation-flow-name-error').textContent = errorText; |
| - this.setButtonDisabledStatus('proceed', true); |
| + this.setButtonDisabledStatus('next', true); |
| } |
| }, |
| @@ -433,7 +458,7 @@ cr.define('login', function() { |
| this.passwordErrorVisible = true; |
| $('managed-user-creation-flow-password').focus(); |
| - this.setButtonDisabledStatus('proceed', true); |
| + this.setButtonDisabledStatus('next', true); |
| }, |
| /** |
| @@ -465,7 +490,21 @@ cr.define('login', function() { |
| * @return {boolean} true, if form seems to be valid. |
| * @private |
| */ |
| - updateContinueButton_: function() { |
| + 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 = $('managed-user-creation-flow-password').value; |
| var secondPassword = |
| $('managed-user-creation-flow-password-confirm').value; |
| @@ -477,12 +516,7 @@ cr.define('login', function() { |
| this.lastVerifiedName_ && |
| (userName == this.lastVerifiedName_); |
| - var selectedPod = this.managerList_.selectedPod_; |
| - canProceed = canProceed && |
| - null != selectedPod && |
| - selectedPod.passwordElement.value.length > 0; |
| - |
| - this.setButtonDisabledStatus('proceed', !canProceed); |
| + this.setButtonDisabledStatus('next', !canProceed); |
| return canProceed; |
| }, |
| @@ -496,10 +530,6 @@ cr.define('login', function() { |
| /** |
| * Show final splash screen with success message. |
| */ |
| - showFinishedMessage: function() { |
| - this.setVisiblePage_('success'); |
| - this.setVisibleButtons_(['finish']); |
| - }, |
| /** |
| * Show error message. |
| @@ -510,38 +540,56 @@ cr.define('login', function() { |
| showErrorMessage: function(errorText, recoverable) { |
| $('managed-user-creation-flow-error-value').innerHTML = errorText; |
| this.setVisiblePage_('error'); |
| - this.setVisibleButtons_(recoverable ? ['retry', 'cancel'] : ['cancel']); |
| + this.setVisibleButtons_(['cancel']); |
| }, |
| /** |
| * Enables one particular subpage and hides the rest. |
| - * @param {string} visiblePage - name of subpage (one of 'progress', |
| - * 'error', 'success') |
| + * @param {string} visiblePage - name of subpage. |
| * @private |
| */ |
| setVisiblePage_: function(visiblePage) { |
| - var screenNames = ['initial', 'progress', 'error', 'success']; |
| + this.disabled = false; |
| + this.updateText_(); |
| + var screenNames = ['intro', |
|
Nikita (slow)
2013/04/12 13:12:15
nit: These should be really renamed in the upcomin
|
| + 'manager', |
| + 'username', |
| + 'progress', |
| + 'error', |
| + 'tutorial']; |
| for (i in screenNames) { |
| var screenName = screenNames[i]; |
| var screen = $('managed-user-creation-flow-' + screenName); |
| screen.hidden = (screenName != visiblePage); |
| + if (screenName == visiblePage) { |
| + $('step-logo').hidden = screen.classList.contains('step-no-logo'); |
| + } |
| } |
| this.currentPage_ = visiblePage; |
| }, |
| /** |
| * Enables specific control buttons. |
| - * @param {List of strings} buttonsList - list of buttons to display (values |
| - * can be 'retry', 'finish', 'cancel') |
| + * @param {List of strings} buttonsList - list of buttons to display. |
| * @private |
| */ |
| setVisibleButtons_: function(buttonsList) { |
| - var buttonNames = ['proceed', 'retry', 'finish', 'cancel']; |
| + var buttonNames = ['start', |
| + 'prev', |
| + 'next', |
| + 'cancel', |
| + 'finish']; |
| for (i in buttonNames) { |
| var buttonName = buttonNames[i]; |
| - var button = $('managed-user-creation-flow-' + buttonName + '-button'); |
| - if (button) |
| + var button; |
| + if ('cancel' == buttonName) |
| + button = $('cancel-add-user-button'); |
| + else |
| + button = $('managed-user-creation-flow-' + buttonName + '-button'); |
| + if (button) { |
| button.hidden = buttonsList.indexOf(buttonName) < 0; |
| + button.disabled = false; |
| + } |
| } |
| }, |
| @@ -550,17 +598,31 @@ cr.define('login', function() { |
| button.disabled = status; |
| }, |
| - finishFlow_: function() { |
| + finishButtonPressed_: function() { |
| chrome.send('finishLocalManagedUserCreation'); |
| }, |
| - proceedFlow_: function() { |
| - this.validateInputAndStartFlow_(); |
| + startButtonPressed_: function() { |
| + this.setVisiblePage_('manager'); |
| + this.setVisibleButtons_(['next', 'prev', 'cancel']); |
| + this.setButtonDisabledStatus('next', true); |
| }, |
| - retryFlow_: function() { |
| - this.setVisiblePage_('progress'); |
| - chrome.send('retryLocalManagedUserCreation'); |
| + nextButtonPressed_: function() { |
| + if (this.currentPage_ == 'manager') { |
| + this.validateAndLogInAsManager_(); |
| + return; |
| + } |
| + if (this.currentPage_ == 'username') { |
| + this.validateAndCreateLocallyManagedUser_(); |
| + return; |
| + } |
| + }, |
| + |
| + prevButtonPressed_: function() { |
| + this.setVisiblePage_('intro'); |
| + this.setVisibleButtons_(['start', 'cancel']); |
| + return; |
| }, |
| /** |
| @@ -616,7 +678,12 @@ cr.define('login', function() { |
| this.managerList_.clearPods(); |
| for (var i = 0; i < userList.length; ++i) |
| this.managerList_.addPod(userList[i]); |
| - if (userList.length > 0) |
| + |
| + var usersInPane = Math.min(userList.length, 5); |
| + $('managed-user-creation-flow-managers-pane').style.height = |
| + (usersInPane * 60 + 28) + 'px'; |
| + |
| + if (userList.length == 1) |
| this.managerList_.selectPod(this.managerList_.pods[0]); |
| }, |
| @@ -624,7 +691,7 @@ cr.define('login', function() { |
| * Cancels user creation and drops to user screen (either sign). |
| */ |
| cancel: function() { |
| - var notSignedInScreens = ['initial']; |
| + var notSignedInScreens = ['intro', 'manager']; |
| if (notSignedInScreens.indexOf(this.currentPage_) >= 0) { |
| // Make sure no manager password is kept: |
| this.managerList_.clearPods(); |
| @@ -637,16 +704,21 @@ cr.define('login', function() { |
| } |
| chrome.send('abortLocalManagedUserCreation'); |
| }, |
| - }; |
| - LocallyManagedUserCreationScreen.showProgressScreen = function() { |
| - var screen = $('managed-user-creation-flow'); |
| - screen.disabled = false; |
| - screen.setVisiblePage_('progress'); |
| - screen.setVisibleButtons_(['cancel']); |
| + updateText_: function() { |
| + $('managed-user-creation-flow-tutorial-created-text').textContent = |
| + loadTimeData.getStringF('managedUserProfileCreatedMessageTemplate', |
| + this.context_.managedName); |
| + |
| + var boldEmail = '<b>' + this.context_.managerId + '</b>'; |
| + $('managed-user-creation-flow-tutorial-instructions-text').innerHTML = |
| + loadTimeData.getStringF('managedUserInstructionTemplate', |
| + boldEmail); |
| + } |
| + |
| }; |
| - LocallyManagedUserCreationScreen.showIntialScreen = function() { |
| + LocallyManagedUserCreationScreen.showIntroPage = function() { |
| var screen = $('managed-user-creation-flow'); |
| $('managed-user-creation-flow-password').value = ''; |
| @@ -658,16 +730,32 @@ cr.define('login', function() { |
| screen.passwordErrorVisible = false; |
| screen.nameErrorVisible = false; |
| - screen.setButtonDisabledStatus('proceed', true); |
| + screen.setVisiblePage_('intro'); |
| + screen.setVisibleButtons_(['start', 'cancel']); |
| + }; |
| - screen.setVisiblePage_('initial'); |
| - screen.setVisibleButtons_(['proceed', 'cancel']); |
| + LocallyManagedUserCreationScreen.showProgressPage = function() { |
| + var screen = $('managed-user-creation-flow'); |
| + screen.setVisiblePage_('progress'); |
| + screen.setVisibleButtons_(['cancel']); |
| }; |
| - LocallyManagedUserCreationScreen.showFinishedMessage = function() { |
| + LocallyManagedUserCreationScreen.showManagerPage = function() { |
| var screen = $('managed-user-creation-flow'); |
| - screen.disabled = false; |
| - screen.showFinishedMessage(); |
| + screen.setVisiblePage_('manager'); |
| + screen.setVisibleButtons_(['cancel']); |
| + }; |
| + |
| + LocallyManagedUserCreationScreen.showUsernamePage = function() { |
| + var screen = $('managed-user-creation-flow'); |
| + screen.setVisiblePage_('username'); |
| + screen.setVisibleButtons_(['next', 'cancel']); |
| + }; |
| + |
| + LocallyManagedUserCreationScreen.showTutorialPage = function() { |
| + var screen = $('managed-user-creation-flow'); |
| + screen.setVisiblePage_('tutorial'); |
| + screen.setVisibleButtons_(['finish']); |
| }; |
| LocallyManagedUserCreationScreen.showManagerPasswordError = function() { |
| @@ -676,11 +764,11 @@ cr.define('login', function() { |
| screen.showSelectedManagerPasswordError_(); |
| }; |
| - LocallyManagedUserCreationScreen.showErrorMessage = function(errorText, |
| - recoverable) { |
| + LocallyManagedUserCreationScreen.showErrorPage = function(errorText, |
| + recoverable) { |
| var screen = $('managed-user-creation-flow'); |
| screen.disabled = false; |
| - screen.showErrorMessage(errorText, recoverable); |
| + screen.showErrorPage(errorText, recoverable); |
| }; |
| LocallyManagedUserCreationScreen.managedUserNameOk = function(name) { |
| @@ -704,12 +792,6 @@ cr.define('login', function() { |
| screen.loadManagers(userList); |
| }; |
| - LocallyManagedUserCreationScreen.showPostImageSelectionScreen = |
| - function(userList) { |
| - var screen = $('managed-user-creation-flow'); |
| - screen.setVisiblePage_('success'); |
| - }; |
| - |
| return { |
| LocallyManagedUserCreationScreen: LocallyManagedUserCreationScreen |
| }; |