From fce4c66d93bf41be25208d5c9530a1f2090308fe Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Thu, 28 Feb 2013 12:24:47 -0500 Subject: [PATCH] Improve js username validation so it's done only when necessary --- .../views/modal/create_account_view.js | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/discourse/views/modal/create_account_view.js b/app/assets/javascripts/discourse/views/modal/create_account_view.js index 7c5572765be..b9410799cd3 100644 --- a/app/assets/javascripts/discourse/views/modal/create_account_view.js +++ b/app/assets/javascripts/discourse/views/modal/create_account_view.js @@ -10,6 +10,7 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({ templateName: 'modal/create_account', title: Em.String.i18n('create_account.title'), uniqueUsernameValidation: null, + globalNicknameExists: false, complete: false, accountPasswordConfirm: 0, accountChallenge: 0, @@ -85,21 +86,23 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({ }).property('accountEmail'), usernameMatch: (function() { - if (this.get('emailValidation.failed')) { - if (this.shouldCheckUsernameMatch()) { - return this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ + if (this.usernameNeedsToBeValidatedWithEmail()) { + if (this.get('emailValidation.failed')) { + if (this.shouldCheckUsernameMatch()) { + return this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ + failed: true, + reason: Em.String.i18n('user.username.enter_email') + })); + } else { + return this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ failed: true })); + } + } else if (this.shouldCheckUsernameMatch()) { + this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ failed: true, - reason: Em.String.i18n('user.username.enter_email') + reason: Em.String.i18n('user.username.checking') })); - } else { - return this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ failed: true })); + return this.checkUsernameAvailability(); } - } else if (this.shouldCheckUsernameMatch()) { - this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ - failed: true, - reason: Em.String.i18n('user.username.checking') - })); - return this.checkUsernameAvailability(); } }).observes('accountEmail'), @@ -145,8 +148,10 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({ var _this = this; if (this.shouldCheckUsernameMatch()) { return Discourse.User.checkUsername(this.get('accountUsername'), this.get('accountEmail')).then(function(result) { + _this.set('globalNicknameExists', false); if (result.available) { if (result.global_match) { + _this.set('globalNicknameExists', true); return _this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ ok: true, reason: Em.String.i18n('user.username.global_match') @@ -160,6 +165,7 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({ } else { if (result.suggestion) { if (result.global_match !== void 0 && result.global_match === false) { + _this.set('globalNicknameExists', true); return _this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ failed: true, reason: Em.String.i18n('user.username.global_mismatch', result) @@ -176,9 +182,10 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({ reason: result.errors.join(' ') })); } else { + _this.set('globalNicknameExists', true); return _this.set('uniqueUsernameValidation', Discourse.InputValidation.create({ failed: true, - reason: Em.String.i18n('user.username.enter_email', result) + reason: Em.String.i18n('user.username.enter_email') })); } } @@ -197,6 +204,10 @@ Discourse.CreateAccountView = Discourse.ModalBodyView.extend({ return basicValidation; }).property('uniqueUsernameValidation', 'basicUsernameValidation'), + usernameNeedsToBeValidatedWithEmail: function() { + return( this.get('globalNicknameExists') || false ); + }, + // Validate the password passwordValidation: (function() { var password;