summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2013-07-02 23:11:23 -0700
committerelijah <elijah@riseup.net>2013-07-04 04:04:55 -0700
commite996432cbd50f4dadaae0ff62ac3f286ab125b1f (patch)
treefa05b7a2fefc737e336399515e45630c99f904f0
parent4863ce5e78d880f1ca8a1874cd03022afb061f4a (diff)
add js to report all errors to the user, not just ones related to field validation.
-rw-r--r--app/assets/javascripts/application.js3
-rw-r--r--core/app/assets/javascripts/leap.js7
-rw-r--r--users/app/assets/javascripts/users.js74
-rw-r--r--users/app/assets/javascripts/users.js.coffee46
-rw-r--r--users/app/controllers/controller_extension/authentication.rb15
5 files changed, 94 insertions, 51 deletions
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index ad4dbbf..cd90934 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -14,11 +14,10 @@
//= require jquery_ujs
//= require srp
//= require bootstrap
-//# require bootstrap-editable
-//# require bootstrap-editable-rails
//= require rails.validations
//= require rails.validations.simple_form
+//= require leap
//= require tickets
//= require users
diff --git a/core/app/assets/javascripts/leap.js b/core/app/assets/javascripts/leap.js
new file mode 100644
index 0000000..94e602d
--- /dev/null
+++ b/core/app/assets/javascripts/leap.js
@@ -0,0 +1,7 @@
+
+//
+// add a bootstrap alert to the page via javascript.
+//
+function alert_message(msg) {
+ $('#messages').append('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><span>'+msg+'</span></div>');
+}
diff --git a/users/app/assets/javascripts/users.js b/users/app/assets/javascripts/users.js
new file mode 100644
index 0000000..eed1961
--- /dev/null
+++ b/users/app/assets/javascripts/users.js
@@ -0,0 +1,74 @@
+(function() {
+ //
+ // LOCAL FUNCTIONS
+ //
+
+ var poll_users, prevent_default, form_failed, form_passed;
+
+ prevent_default = function(event) {
+ return event.preventDefault();
+ };
+
+ poll_users = function(query, process) {
+ return $.get("/users.json", {
+ query: query
+ }).done(process);
+ };
+
+ //
+ // 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) {
+ var element, error, field;
+ if ($.isPlainObject(message) && message.errors) {
+ for (field in message.errors) {
+ error = message.errors[field];
+ element = $('form input[name$="[' + field + ']"]');
+ if (!element) {
+ next;
+ }
+ element.trigger('element:validate:fail.ClientSideValidations', error).data('valid', false);
+ }
+ } else if (message.error) {
+ alert_message(message.error);
+ } else {
+ alert_message(JSON.stringify(message));
+ }
+ };
+
+ //
+ // INIT
+ //
+
+ $(document).ready(function() {
+ $('#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);
+ return $('.user.typeahead').typeahead({
+ source: poll_users
+ });
+ });
+
+}).call(this);
diff --git a/users/app/assets/javascripts/users.js.coffee b/users/app/assets/javascripts/users.js.coffee
deleted file mode 100644
index 955556c..0000000
--- a/users/app/assets/javascripts/users.js.coffee
+++ /dev/null
@@ -1,46 +0,0 @@
-preventDefault = (event) ->
- event.preventDefault()
-
-srp.session = new srp.Session()
-srp.signedUp = ->
- srp.login()
-
-srp.loggedIn = ->
- window.location = '/'
-
-#// TODO: not sure this is what we want.
-srp.updated = ->
- window.location = '/'
-
-srp.error = (message) ->
- if $.isPlainObject(message) && message.errors
- for field, error of message.errors
- element = $('form input[name$="['+field+']"]')
- next unless element
- element.trigger('element:validate:fail.ClientSideValidations', error).data('valid', false)
- else
- alert(message)
-
-pollUsers = (query, process) ->
- $.get( "/users.json", query: query).done(process)
-
-followLocationHash = ->
- location = window.location.hash
- if location
- href_select = 'a[href="' + location + '"]'
- link = $(href_select)
- link.tab('show') if link
-
-$(document).ready ->
- followLocationHash()
- $('#new_user').submit preventDefault
- $('#new_user').submit srp.signup
- $('#new_session').submit preventDefault
- $('#new_session').submit srp.login
- $('.user.form.update_login_and_password').submit srp.update
- $('.user.form.update_login_and_password').submit preventDefault
- $('.user.typeahead').typeahead({source: pollUsers});
- $('a[data-toggle="tab"]').on('shown', ->
- $(ClientSideValidations.selectors.forms).validate()
- )
-
diff --git a/users/app/controllers/controller_extension/authentication.rb b/users/app/controllers/controller_extension/authentication.rb
index f0a6564..72df7a7 100644
--- a/users/app/controllers/controller_extension/authentication.rb
+++ b/users/app/controllers/controller_extension/authentication.rb
@@ -38,9 +38,18 @@ module ControllerExtension::Authentication
end
def access_denied
- # TODO: should we redirect to the root_url in either case, and have the root_url include the login screen (and also ability to create unauthenticated tickets) when no user is logged in?
- redirect_to login_url, :alert => "Not authorized" if !logged_in?
- redirect_to root_url, :alert => "Not authorized" if logged_in?
+ respond_to do |format|
+ format.html do
+ if logged_in?
+ redirect_to root_url, :alert => t(:not_authorized)
+ else
+ redirect_to login_url, :alert => t(:not_authorized_login)
+ end
+ end
+ format.json do
+ render :json => {'error' => t(:not_authorized)}, status: :unprocessable_entity
+ end
+ end
end
def admin?