diff options
| author | mo <mo.khan@gmail.com> | 2017-09-05 19:39:42 -0600 |
|---|---|---|
| committer | mo <mo.khan@gmail.com> | 2017-09-05 19:39:42 -0600 |
| commit | 7cde984301e675b1d75b0fdc2a95ef6cee6561b3 (patch) | |
| tree | 449f663a79cc0c0aba2643f32d4b876b372b3a6b /app/assets/javascripts | |
| parent | 1e9b754b0997d9a74fccd23752a0a61016c1b173 (diff) | |
validate the login form on the client side.
Diffstat (limited to 'app/assets/javascripts')
| -rw-r--r-- | app/assets/javascripts/views/auto_view.js.coffee | 11 | ||||
| -rw-r--r-- | app/assets/javascripts/views/sessions/login_form.js.coffee | 35 |
2 files changed, 38 insertions, 8 deletions
diff --git a/app/assets/javascripts/views/auto_view.js.coffee b/app/assets/javascripts/views/auto_view.js.coffee index c54104fa..6c2c263f 100644 --- a/app/assets/javascripts/views/auto_view.js.coffee +++ b/app/assets/javascripts/views/auto_view.js.coffee @@ -24,6 +24,13 @@ class CakeSide.AutoView extends Backbone.View @views[key] ?= [] @views[key].push(view) - field: (name) -> $("##{@fieldName(name)}") - fieldName: (name) -> "#{@modelKey()}_#{name}" + hideErrors: () -> + @$(':input').removeClass('is-invalid') + @$('.invalid-feedback').html('') + + showError: (field, message) -> + @$(field).addClass('is-invalid').siblings('.invalid-feedback').html(message) + + field: (name) -> @$("##{@fieldName(name)}") + fieldName: (name) -> "#{@modelKey}_#{name}" render: -> @ diff --git a/app/assets/javascripts/views/sessions/login_form.js.coffee b/app/assets/javascripts/views/sessions/login_form.js.coffee index dcdeb408..d41c0d9c 100644 --- a/app/assets/javascripts/views/sessions/login_form.js.coffee +++ b/app/assets/javascripts/views/sessions/login_form.js.coffee @@ -2,14 +2,37 @@ class CakeSide.Views.LoginForm extends CakeSide.AutoView @viewName 'login-form' + modelKey: "session" events: - 'change #session_username': 'render' - 'change #session_password': 'render' + 'keyup #session_username': 'onKeyUp' + 'keyup #session_password': 'onKeyUp' + 'submit form': 'onSubmit' render: -> - @$('input[type=submit]').prop('disabled', !@valid()) + @hideErrors() + @$('input[type=submit]').prop('disabled', !@isValid()) + _.each _.keys(@errors), (key) => + @showError(@field(key), @errors[key]) - valid: -> - !_.isEmpty(@field("username").val()) && !_.isEmpty(@field("password").val()) + isValid: -> + _.keys(@errors).length == 0 - modelKey: -> "session" + validate: -> + @errors = {} + if _.isEmpty(@field("username").val()) + @errors['username'] = "Email is required" + + if _.isEmpty(@field("password").val()) + @errors['password'] = "Password is required" + + onKeyUp: (event) -> + @validate() + @render() + + onSubmit: (event) -> + console.log("SUBMITTED") + @validate() + if !@isValid() + event.preventDefault() + event.stopPropagation() + @render() |
