diff options
-rw-r--r-- | app/assets/javascripts/username_validator.coffee | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/assets/javascripts/username_validator.coffee b/app/assets/javascripts/username_validator.coffee new file mode 100644 index 00000000000..9d77fd50f8a --- /dev/null +++ b/app/assets/javascripts/username_validator.coffee @@ -0,0 +1,36 @@ +class @UsernameValidator + DEBOUNCE_TIMEOUT_DURATION = 1000 + ERROR_ICON_CLASSES = 'fa fa-exclamation-circle error' + USERNAME_IN_USE_MESSAGE = 'Username "$1" is in use!' + LOADING_ICON_CLASSES = 'fa fa-spinner fa-spin' + SUCCESS_ICON_CLASSES = 'fa fa-check-circle success' + TOOLTIP_PLACEMENT = 'left' + + constructor: () -> + @inputElement = $('#new_user_username') + @iconElement = $('<i></i>') + @inputElement.parent().append @iconElement + + debounceTimeout = _.debounce @validateUsername, DEBOUNCE_TIMEOUT_DURATION + + @inputElement.keyup => + @iconElement.removeClass().tooltip 'destroy' + username = @inputElement.val() + return if username is '' + @iconElement.addClass LOADING_ICON_CLASSES + debounceTimeout username + + validateUsername: (username) => + $.ajax + type: 'GET' + url: "/u/#{username}/exists" + dataType: 'json' + success: (res) => + if res.exists + @iconElement.removeClass().addClass ERROR_ICON_CLASSES + .tooltip + title: USERNAME_IN_USE_MESSAGE.replace /\$1/g, username + placement: TOOLTIP_PLACEMENT + else + @iconElement.removeClass().addClass SUCCESS_ICON_CLASSES + .tooltip 'destroy' |