Commit b7c1d10a

mo <mo.khan@gmail.com>
2017-09-09 18:01:36
extract duplicate code into form_view.
1 parent 322b485
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()
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()
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()
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: -> @
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}_", '')