master
 1#= require ./auto_view
 2
 3class csx.FormView extends csx.AutoView
 4  hideErrors: () ->
 5    @$(':input').removeClass('is-invalid')
 6    @$('.invalid-feedback').html('')
 7
 8  showError: (field, message) ->
 9    @$(field).addClass('is-invalid').siblings('.invalid-feedback').html(message)
10
11  renderErrors: (errors) ->
12    @hideErrors()
13    _.each _.keys(errors), (key) =>
14      @showError(@field(key), errors[key])
15
16  render: ->
17    @renderErrors(@model.validationError)
18
19  onInput: (event) ->
20    $element = $(event.target)
21    @model.set(@fieldNameFor($element), @valueFor($element))
22    @$('input[type=submit]').prop('disabled', !@model.isValid())
23    @render()
24
25  onSubmit: (event) ->
26    if !@model.isValid()
27      @$('input[type=submit]').prop('disabled', true)
28      event.preventDefault()
29      event.stopPropagation()
30    @render()
31
32  valueFor: (element) ->
33    if element.is(':checkbox')
34      element.prop('checked')
35    else
36      element.val()
37
38  fieldName: (name) ->
39    return name if _.isEmpty(@modelKey)
40    "#{@modelKey}_#{name}"
41
42  field: (name) -> @$("##{@fieldName(name)}")
43  fieldNameFor: (element) -> element.attr('id').replace("#{@modelKey}_", '')