summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjessib <jessib@riseup.net>2013-10-28 10:57:36 -0700
committerjessib <jessib@riseup.net>2013-10-28 10:57:36 -0700
commit7b003172e13215a5b6a1d0fa17b38dd3e2706e45 (patch)
treedeab84ac7f9f8d24df12a8559c1d98569e8cdacb
parent630b6c603594df8a9fa99555928ca68df8e8d8fa (diff)
parent1ef3e9df271934b983ff5afe60c2dcf34c090a98 (diff)
Merge pull request #107 from azul/feature/reenable-submit-button
reset button loading... state on error (#4231)
-rw-r--r--users/app/assets/javascripts/users.js51
-rw-r--r--users/test/integration/browser/account_test.rb11
2 files changed, 46 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);
}
};
diff --git a/users/test/integration/browser/account_test.rb b/users/test/integration/browser/account_test.rb
index 1deda45..8e03856 100644
--- a/users/test/integration/browser/account_test.rb
+++ b/users/test/integration/browser/account_test.rb
@@ -27,6 +27,17 @@ class AccountTest < BrowserIntegrationTest
User.find_by_login(username).account.destroy
end
+ test "failed login" do
+ visit '/'
+ click_on 'Log In'
+ fill_in 'Username', with: "username"
+ fill_in 'Password', with: "wrong password"
+ click_on 'Log In'
+ assert page.has_selector? 'input.btn-primary.disabled'
+ assert page.has_content? I18n.t(:invalid_user_pass)
+ assert page.has_no_selector? 'input.btn-primary.disabled'
+ end
+
test "change password" do
username, password = submit_signup
click_on "Account Settings"