Improved form detection.
This commit is contained in:
parent
cd34735bba
commit
26d1e3a1e3
1 changed files with 63 additions and 39 deletions
|
@ -30,6 +30,8 @@ class App.ControllerForm extends App.Controller
|
||||||
|
|
||||||
fieldset = $('<fieldset></fieldset>')
|
fieldset = $('<fieldset></fieldset>')
|
||||||
|
|
||||||
|
fieldset.append('<a href="#" class="js-reset hide">' + App.i18n.translatePlain('Discard your unsaved changes.') + '</a>')
|
||||||
|
|
||||||
# collect form attributes
|
# collect form attributes
|
||||||
@attributes = []
|
@attributes = []
|
||||||
if @model.attributesGet
|
if @model.attributesGet
|
||||||
|
@ -1595,38 +1597,16 @@ class App.ControllerForm extends App.Controller
|
||||||
@params: (form) ->
|
@params: (form) ->
|
||||||
param = {}
|
param = {}
|
||||||
|
|
||||||
# create jquery object if not already exists
|
lookupForm = @findForm(form)
|
||||||
if form instanceof jQuery
|
|
||||||
# do nothing
|
|
||||||
else
|
|
||||||
form = $(form)
|
|
||||||
|
|
||||||
# find form if current is <form>
|
|
||||||
if form.is('form')
|
|
||||||
form = form
|
|
||||||
|
|
||||||
# find form based on sub elements
|
|
||||||
else if form.find('form')[0]
|
|
||||||
form = $( form.find('form')[0] )
|
|
||||||
|
|
||||||
# find form based on parents next <form>
|
|
||||||
else if form.parents('form')[0]
|
|
||||||
form = $( form.parents('form')[0] )
|
|
||||||
|
|
||||||
# use current content as form if form isn't already finished
|
|
||||||
else if !@finishForm
|
|
||||||
from = form
|
|
||||||
else
|
|
||||||
App.Log.error 'ControllerForm', 'no form found!', form
|
|
||||||
|
|
||||||
# get form elements
|
# get form elements
|
||||||
array = form.serializeArray()
|
array = lookupForm.serializeArray()
|
||||||
|
|
||||||
# 1:1 and boolean params
|
# 1:1 and boolean params
|
||||||
for key in array
|
for key in array
|
||||||
|
|
||||||
# check if item is-hidden and should not be used
|
# check if item is-hidden and should not be used
|
||||||
if form.find('[name="' + key.name + '"]').hasClass('is-hidden')
|
if lookupForm.find('[name="' + key.name + '"]').hasClass('is-hidden')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# collect all other params
|
# collect all other params
|
||||||
|
@ -1694,29 +1674,73 @@ class App.ControllerForm extends App.Controller
|
||||||
formId = new Date().getTime() + Math.floor( Math.random() * 99999 )
|
formId = new Date().getTime() + Math.floor( Math.random() * 99999 )
|
||||||
formId.toString().substr formId.toString().length-9, 9
|
formId.toString().substr formId.toString().length-9, 9
|
||||||
|
|
||||||
@disable: (form) ->
|
@findForm: (form) ->
|
||||||
App.Log.notice 'ControllerForm', 'disable...', $(form.target).parent()
|
# check jquery event
|
||||||
$(form.target).parent().find('button').attr('disabled', true)
|
if form && form.target
|
||||||
$(form.target).parent().find('[type="submit"]').attr('disabled', true)
|
form = form.target
|
||||||
$(form.target).parent().find('[type="reset"]').attr('disabled', true)
|
|
||||||
|
|
||||||
|
# create jquery object if not already exists
|
||||||
|
if form instanceof jQuery
|
||||||
|
# do nothing
|
||||||
|
else
|
||||||
|
form = $(form)
|
||||||
|
|
||||||
|
#console.log('FF', form)
|
||||||
|
# get form
|
||||||
|
if form.is('form') is true
|
||||||
|
#console.log('direct from')
|
||||||
|
return form
|
||||||
|
else if form.find('form').is('form') is true
|
||||||
|
#console.log('child from')
|
||||||
|
return form.find('form')
|
||||||
|
else if $(form).parents('form').is('form') is true
|
||||||
|
#console.log('parent from')
|
||||||
|
return form.parents('form')
|
||||||
|
# use current content as form if form isn't already finished
|
||||||
|
else if !@finishForm
|
||||||
|
#console.log('finishForm')
|
||||||
|
return form
|
||||||
|
else
|
||||||
|
App.Log.error 'ControllerForm', 'no form found!', form
|
||||||
|
form
|
||||||
|
|
||||||
|
@disable: (form) ->
|
||||||
|
lookupForm = @findForm(form)
|
||||||
|
|
||||||
|
if lookupForm
|
||||||
|
App.Log.notice 'ControllerForm', 'disable...', lookupForm
|
||||||
|
lookupForm.find('button').attr('disabled', true)
|
||||||
|
lookupForm.find('[type="submit"]').attr('disabled', true)
|
||||||
|
lookupForm.find('[type="reset"]').attr('disabled', true)
|
||||||
|
else
|
||||||
|
App.Log.notice 'ControllerForm', 'disable item...', form
|
||||||
|
form.attr('disabled', true)
|
||||||
|
|
||||||
@enable: (form) ->
|
@enable: (form) ->
|
||||||
App.Log.notice 'ControllerForm', 'enable...', $(form.target).parent()
|
|
||||||
$(form.target).parent().find('button').attr('disabled', false)
|
lookupForm = @findForm(form)
|
||||||
$(form.target).parent().find('[type="submit"]').attr('disabled', false)
|
|
||||||
$(form.target).parent().find('[type="reset"]').attr('disabled', false)
|
if lookupForm
|
||||||
|
App.Log.notice 'ControllerForm', 'enable...', lookupForm
|
||||||
|
lookupForm.find('button').attr('disabled', false)
|
||||||
|
lookupForm.find('[type="submit"]').attr('disabled', false)
|
||||||
|
lookupForm.find('[type="reset"]').attr('disabled', false)
|
||||||
|
else
|
||||||
|
App.Log.notice 'ControllerForm', 'enable item...', form
|
||||||
|
form.attr('disabled', false)
|
||||||
|
|
||||||
@validate: (data) ->
|
@validate: (data) ->
|
||||||
|
|
||||||
|
lookupForm = @findForm(data.form)
|
||||||
|
|
||||||
# remove all errors
|
# remove all errors
|
||||||
$(data.form).parents().find('.has-error').removeClass('has-error')
|
lookupForm.find('.has-error').removeClass('has-error')
|
||||||
$(data.form).parents().find('.help-inline').html('')
|
lookupForm.find('.help-inline').html('')
|
||||||
|
|
||||||
# show new errors
|
# show new errors
|
||||||
for key, msg of data.errors
|
for key, msg of data.errors
|
||||||
$(data.form).parents('form').find('[name="' + key + '"]').parents('div .form-group').addClass('has-error')
|
lookupForm.find('[name="' + key + '"]').parents('div .form-group').addClass('has-error')
|
||||||
$(data.form).parents('form').find('[name="' + key + '"]').parent().find('.help-inline').html(msg)
|
lookupForm.find('[name="' + key + '"]').parent().find('.help-inline').html(msg)
|
||||||
|
|
||||||
# set autofocus
|
# set autofocus
|
||||||
$(data.form).parents('form').find('.has-error').find('input, textarea').first().focus()
|
lookupForm.find('.has-error').find('input, textarea').first().focus()
|
||||||
|
|
Loading…
Reference in a new issue