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

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

Issue 15896016: Better focus traversal during LMU creation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 7 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 35d1d7fae0539f183e570cc8417193df1b63687f..5b594977d0eeaa4e9dc5a674fc48ce21b47ddb01 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
@@ -33,12 +33,18 @@ login.createScreen('LocallyManagedUserCreationScreen',
this.handleMouseDown_.bind(this));
var screen = $('managed-user-creation-flow');
var managerPod = this;
- this.passwordElement.addEventListener('keydown', function(e) {
+ var hideManagerPasswordError = function(element) {
managerPod.passwordErrorElement.hidden = true;
- });
- this.passwordElement.addEventListener('keyup', function(e) {
- screen.updateNextButtonForManager_();
- });
+ };
+
+ screen.configureTextInput(
+ this.passwordElement,
+ screen.updateNextButtonForManager_.bind(screen),
+ screen.validIfNotEmpty.bind(screen),
+ function(element) {
+ screen.getScreenButton('next').focus();
+ },
+ hideManagerPasswordError);
},
/**
@@ -228,50 +234,32 @@ login.createScreen('LocallyManagedUserCreationScreen',
var creationScreen = this;
- userNameField.addEventListener('keydown', function(e) {
- if (e.keyIdentifier == 'Enter') {
- if (userNameField.value.length > 0)
- passwordField.focus();
- e.stopPropagation();
- return;
- }
- creationScreen.clearUserNameError_();
- });
-
- userNameField.addEventListener('keyup', function(e) {
- creationScreen.checkUserName_();
- });
-
- passwordField.addEventListener('keydown', function(e) {
+ var hideUserPasswordError = function(element) {
creationScreen.passwordErrorVisible = false;
- if (e.keyIdentifier == 'Enter') {
- if (passwordField.value.length > 0) {
- password2Field.focus();
- creationScreen.updateNextButtonForUser_();
- }
- e.stopPropagation();
- }
- });
-
- password2Field.addEventListener('keydown', function(e) {
- creationScreen.passwordErrorVisible = false;
- if (e.keyIdentifier == 'Enter') {
- if (passwordField.value.length > 0) {
- if (creationScreen.managerList_.selectedPod_)
- creationScreen.managerList_.selectedPod_.focusInput();
- creationScreen.updateNextButtonForUser_();
- }
- e.stopPropagation();
- }
- });
-
- password2Field.addEventListener('keyup', function(e) {
- creationScreen.updateNextButtonForUser_();
- });
-
- passwordField.addEventListener('keyup', function(e) {
- creationScreen.updateNextButtonForUser_();
- });
+ };
+
+ this.configureTextInput(userNameField,
+ this.checkUserName_.bind(this),
Nikita (slow) 2013/06/03 15:55:43 nit: Please fix parameter alignment for all calls
Denis Kuznetsov (DE-MUC) 2013/06/03 16:33:04 Done.
+ 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);
},
buttonIds: [],
@@ -304,6 +292,59 @@ login.createScreen('LocallyManagedUserCreationScreen',
},
/**
+ * 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) {
Nikita (slow) 2013/06/03 15:55:43 private, should end with _
Denis Kuznetsov (DE-MUC) 2013/06/03 16:33:04 Done.
+ return (element.value.length > 0);
+ },
+
+ /**
+ * Configure text-input |element|
Nikita (slow) 2013/06/03 15:55:43 nit: dot is missing.
Denis Kuznetsov (DE-MUC) 2013/06/03 16:33:04 Done.
+ * @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,
Nikita (slow) 2013/06/03 15:55:43 private, should end with _
Denis Kuznetsov (DE-MUC) 2013/06/03 16:33:04 At some point it will be moved to parent class.
+ inputChangeListener,
Nikita (slow) 2013/06/03 15:55:43 nit: Please fix alignment.
Denis Kuznetsov (DE-MUC) 2013/06/03 16:33:04 Done.
+ 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>".
@@ -581,6 +622,9 @@ login.createScreen('LocallyManagedUserCreationScreen',
'username',
'error',
'tutorial'];
+ var pageButtons = {'intro' : 'start',
+ 'error' : 'handleError',
+ 'tutorial' : 'finish'};
this.hideStatus_();
for (i in pageNames) {
var pageName = pageNames[i];
@@ -601,6 +645,9 @@ login.createScreen('LocallyManagedUserCreationScreen',
cancelButton.hidden = pagesWithCancel.indexOf(visiblePage) < 0;
cancelButton.disabled = false;
+ if (pageButtons[visiblePage])
+ this.getScreenButton(pageButtons[visiblePage]).focus();
+
this.currentPage_ = visiblePage;
},
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698