diff options
| author | Azul <azul@leap.se> | 2014-04-08 11:49:14 +0200 | 
|---|---|---|
| committer | Azul <azul@leap.se> | 2014-04-08 11:49:14 +0200 | 
| commit | b6d14dc19dd350a807826e3e097738a36613e083 (patch) | |
| tree | 093dc5f2f1e773e3ad009d28d1fd24667d3c0ba6 /app/assets/javascripts/users.js | |
| parent | 2e11e3ca2c7b02fdb5ff54f0bcd766cc5fa39975 (diff) | |
moving users: app and test files
Diffstat (limited to 'app/assets/javascripts/users.js')
| -rw-r--r-- | app/assets/javascripts/users.js | 132 | 
1 files changed, 132 insertions, 0 deletions
diff --git a/app/assets/javascripts/users.js b/app/assets/javascripts/users.js new file mode 100644 index 0000000..8486756 --- /dev/null +++ b/app/assets/javascripts/users.js @@ -0,0 +1,132 @@ +(function() { +  // +  // LOCAL FUNCTIONS +  // + +  var poll_users,  +      prevent_default,  +      form_failed,  +      form_passed,  +      clear_errors, +      update_user; + +  prevent_default = function(event) { +    return event.preventDefault(); +  }; + +  poll_users = function(query, process) { +    return $.get("/1/users.json", { +      query: query +    }).done(process); +  }; + +  clear_errors = function() { +    return $('#messages').empty(); +  }; + +  update_user = function(submitEvent) { +    var form = submitEvent.target; +    var token = form.dataset.token; +    var url = form.action; +    var req = $.ajax({ +      url: url, +      type: 'PUT', +      headers: { Authorization: 'Token token="' + token + '"' }, +      data: $(form).serialize() +    }); +    req.done( function() { +      $(form).find('input[type="submit"]').button('reset'); +    }); +  }; + +  markAsSubmitted = function(submitEvent) { +    var form = submitEvent.target; +    $(form).addClass('submitted') +    // bootstrap loading state: +    $(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 +  // + +  srp.session = new srp.Session(); + +  srp.signedUp = function() { +    return srp.login(); +  }; + +  srp.loggedIn = function() { +    return window.location = '/'; +  }; + +  srp.updated = function() { +    return window.location = '/users/' + srp.session.id(); +  }; + +  // +  // if a json request returns an error, this function gets called and +  // decorates the appropriate fields with the error messages. +  // +  srp.error = function(message) { +    clear_errors(); +    var errors = extractErrors(message); +    displayErrors(errors); +    resetButtons(); +  } + +  function extractErrors(message) { +    if ($.isPlainObject(message) && message.errors) { +      return message.errors; +    } else { +      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); +    } +  }; + +  // +  // INIT +  // + +  $(document).ready(function() { +    $('form').submit(markAsSubmitted); +    $('#new_user').submit(prevent_default); +    $('#new_user').submit(srp.signup); +    $('#new_session').submit(prevent_default); +    $('#new_session').submit(srp.login); +    $('#update_login_and_password').submit(prevent_default); +    $('#update_login_and_password').submit(srp.update); +    $('#update_pgp_key').submit(prevent_default); +    $('#update_pgp_key').submit(update_user); +    return $('#user-typeahead').typeahead({ +      source: poll_users +    }); +  }); + +}).call(this);  | 
