diff options
author | jessib <jessib@riseup.net> | 2013-10-28 10:57:36 -0700 |
---|---|---|
committer | jessib <jessib@riseup.net> | 2013-10-28 10:57:36 -0700 |
commit | 7b003172e13215a5b6a1d0fa17b38dd3e2706e45 (patch) | |
tree | deab84ac7f9f8d24df12a8559c1d98569e8cdacb /users/app/assets/javascripts | |
parent | 630b6c603594df8a9fa99555928ca68df8e8d8fa (diff) | |
parent | 1ef3e9df271934b983ff5afe60c2dcf34c090a98 (diff) |
Merge pull request #107 from azul/feature/reenable-submit-button
reset button loading... state on error (#4231)
Diffstat (limited to 'users/app/assets/javascripts')
-rw-r--r-- | users/app/assets/javascripts/users.js | 51 |
1 files changed, 35 insertions, 16 deletions
diff --git a/users/app/assets/javascripts/users.js b/users/app/assets/javascripts/users.js index aaeba6e..8486756 100644 --- a/users/app/assets/javascripts/users.js +++ b/users/app/assets/javascripts/users.js @@ -46,6 +46,13 @@ $(form).find('input[type="submit"]').button('loading'); }; + resetButtons = function(submitEvent) { + var form = $('form.submitted') + // bootstrap loading state: + $(form).find('input[type="submit"]').button('reset'); + $(form).removeClass('submitted') + }; + // // PUBLIC FUNCTIONS // @@ -70,24 +77,36 @@ // srp.error = function(message) { clear_errors(); - var element, error, field; + var errors = extractErrors(message); + displayErrors(errors); + resetButtons(); + } + + function extractErrors(message) { if ($.isPlainObject(message) && message.errors) { - for (field in message.errors) { - if (field == 'base') { - alert_message(message.errors[field]); - continue; - } - error = message.errors[field]; - element = $('form input[name$="[' + field + ']"]'); - if (!element) { - continue; - } - element.trigger('element:validate:fail.ClientSideValidations', error).data('valid', false); - } - } else if (message.error) { - alert_message(message.error); + return message.errors; } else { - alert_message(JSON.stringify(message)); + return { + base: (message.error || JSON.stringify(message)) + }; + } + } + + function displayErrors(errors) { + for (var field in errors) { + var error = errors[field]; + if (field === 'base') { + alert_message(error); + } else { + displayFieldError(field, error); + } + } + } + + function displayFieldError(field, error) { + var element = $('form input[name$="[' + field + ']"]'); + if (element) { + element.trigger('element:validate:fail.ClientSideValidations', error).data('valid', false); } }; |