diff options
| author | mo <mo.khan@gmail.com> | 2017-09-09 12:01:36 -0600 |
|---|---|---|
| committer | mo <mo.khan@gmail.com> | 2017-09-09 12:01:36 -0600 |
| commit | b7c1d10abed223085f7a8b6cf9ba15ec1cdd2b68 (patch) | |
| tree | 96ce2f0a0ad3cf4bd901ecc05b79262a374ba510 /app/assets/javascripts | |
| parent | 322b4859cd004f3a8556408eab6627d925324c95 (diff) | |
extract duplicate code into form_view.
Diffstat (limited to 'app/assets/javascripts')
5 files changed, 43 insertions, 78 deletions
diff --git a/app/assets/javascripts/views/auto_view.js.coffee b/app/assets/javascripts/views/auto_view.js.coffee index 4a916fcd..eef406d6 100644 --- a/app/assets/javascripts/views/auto_view.js.coffee +++ b/app/assets/javascripts/views/auto_view.js.coffee @@ -24,19 +24,4 @@ class csx.AutoView extends Backbone.View @views[key] ?= [] @views[key].push(view) - hideErrors: () -> - @$(':input').removeClass('is-invalid') - @$('.invalid-feedback').html('') - - showError: (field, message) -> - @$(field).addClass('is-invalid').siblings('.invalid-feedback').html(message) - - renderErrors: (errors) -> - @hideErrors() - _.each _.keys(errors), (key) => - @showError(@field(key), errors[key]) - - field: (name) -> @$("##{@fieldName(name)}") - fieldName: (name) -> "#{@modelKey}_#{name}" - fieldNameFor: (element) -> element.attr('id').replace("#{@modelKey}_", '') render: -> @ diff --git a/app/assets/javascripts/views/form_view.js.coffee b/app/assets/javascripts/views/form_view.js.coffee new file mode 100644 index 00000000..d58f7198 --- /dev/null +++ b/app/assets/javascripts/views/form_view.js.coffee @@ -0,0 +1,40 @@ +#= require ./auto_view + +class csx.FormView extends csx.AutoView + hideErrors: () -> + @$(':input').removeClass('is-invalid') + @$('.invalid-feedback').html('') + + showError: (field, message) -> + @$(field).addClass('is-invalid').siblings('.invalid-feedback').html(message) + + renderErrors: (errors) -> + @hideErrors() + _.each _.keys(errors), (key) => + @showError(@field(key), errors[key]) + + render: -> + @renderErrors(@model.validationError) + + onInput: (event) -> + $element = $(event.target) + @model.set(@fieldNameFor($element), @valueFor($element)) + @$('input[type=submit]').prop('disabled', !@model.isValid()) + @render() + + onSubmit: (event) -> + if !@model.isValid() + @$('input[type=submit]').prop('disabled', true) + event.preventDefault() + event.stopPropagation() + @render() + + valueFor: (element) -> + if element.is(':checkbox') + element.prop('checked') + else + element.val() + + field: (name) -> @$("##{@fieldName(name)}") + fieldName: (name) -> "#{@modelKey}_#{name}" + fieldNameFor: (element) -> element.attr('id').replace("#{@modelKey}_", '') diff --git a/app/assets/javascripts/views/passwords/reset_form.js.coffee b/app/assets/javascripts/views/passwords/reset_form.js.coffee index 8d08e017..4c03b4fe 100644 --- a/app/assets/javascripts/views/passwords/reset_form.js.coffee +++ b/app/assets/javascripts/views/passwords/reset_form.js.coffee @@ -1,4 +1,4 @@ -class csx.Views.PasswordResetForm extends csx.AutoView +class csx.Views.PasswordResetForm extends csx.FormView @viewName 'password-reset-form' modelKey: "user" events: @@ -7,25 +7,3 @@ class csx.Views.PasswordResetForm extends csx.AutoView initialize: () -> @model = new csx.Models.PasswordReset() - - render: -> - @renderErrors(@model.validationError) - - onInput: (event) -> - $element = $(event.target) - @model.set(@fieldNameFor($element), @valueFor($element)) - @$('input[type=submit]').prop('disabled', !@model.isValid()) - @render() - - onSubmit: (event) -> - if !@model.isValid() - @$('input[type=submit]').prop('disabled', true) - event.preventDefault() - event.stopPropagation() - @render() - - valueFor: (element) -> - if element.is(':checkbox') - element.prop('checked') - else - element.val() diff --git a/app/assets/javascripts/views/sessions/login_form.js.coffee b/app/assets/javascripts/views/sessions/login_form.js.coffee index cab499af..c4d8bf1a 100644 --- a/app/assets/javascripts/views/sessions/login_form.js.coffee +++ b/app/assets/javascripts/views/sessions/login_form.js.coffee @@ -1,6 +1,6 @@ #= require views/auto_view -class csx.Views.LoginForm extends csx.AutoView +class csx.Views.LoginForm extends csx.FormView @viewName 'login-form' modelKey: "session" events: @@ -10,19 +10,3 @@ class csx.Views.LoginForm extends csx.AutoView initialize: () -> @model = new csx.Models.Session() - - render: -> - @renderErrors(@model.validationError) - - onInput: (event) -> - $element = $(event.target) - @model.set(@fieldNameFor($element), $element.val()) - @$('input[type=submit]').prop('disabled', !@model.isValid()) - @render() - - onSubmit: (event) -> - if !@model.isValid() - @$('input[type=submit]').prop('disabled', true) - event.preventDefault() - event.stopPropagation() - @render() diff --git a/app/assets/javascripts/views/sessions/registration-form.js.coffee b/app/assets/javascripts/views/sessions/registration-form.js.coffee index 159ffcc8..d3e7a5d6 100644 --- a/app/assets/javascripts/views/sessions/registration-form.js.coffee +++ b/app/assets/javascripts/views/sessions/registration-form.js.coffee @@ -1,6 +1,6 @@ #= require views/auto_view -class csx.Views.RegistrationForm extends csx.AutoView +class csx.Views.RegistrationForm extends csx.FormView @viewName 'registration-form' modelKey: "user" events: @@ -12,25 +12,3 @@ class csx.Views.RegistrationForm extends csx.AutoView initialize: () -> @model = new csx.Models.Registration() - - render: -> - @renderErrors(@model.validationError) - - onInput: (event) -> - $element = $(event.target) - @model.set(@fieldNameFor($element), @valueFor($element)) - @$('input[type=submit]').prop('disabled', !@model.isValid()) - @render() - - onSubmit: (event) -> - if !@model.isValid() - @$('input[type=submit]').prop('disabled', true) - event.preventDefault() - event.stopPropagation() - @render() - - valueFor: (element) -> - if element.is(':checkbox') - element.prop('checked') - else - element.val() |
