From: Jan Provaznik <jprovazn(a)redhat.com>
https://www.aeolusproject.org/redmine/issues/1454
https://www.aeolusproject.org/redmine/issues/1455
'javascript_enabled' is set to true/false when user logs in.
---
src/app/controllers/user_sessions_controller.rb | 19 +++++++++++++++----
src/app/views/user_sessions/new.haml | 21 +++++++++++++++++++++
2 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/src/app/controllers/user_sessions_controller.rb
b/src/app/controllers/user_sessions_controller.rb
index 625531b..5c8f29d 100644
--- a/src/app/controllers/user_sessions_controller.rb
+++ b/src/app/controllers/user_sessions_controller.rb
@@ -30,11 +30,22 @@ class UserSessionsController < ApplicationController
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
- flash[:notice] = "Login successful!"
- redirect_back_or_default root_url
+ session[:javascript_enabled] = request.xhr?
+ respond_to do |format|
+ format.html do
+ flash[:notice] = "Login successful!"
+ redirect_back_or_default root_url
+ end
+ format.js { render :text => "window.location='#{root_url}'"
}
+ end
else
- flash[:warning] = "Login failed: The Username and Password you entered do not
match"
- render :action => :new
+ respond_to do |format|
+ format.html do
+ flash.now[:warning] = "Login failed: The Username and Password you entered
do not match"
+ render :action => :new
+ end
+ format.js { render :status=> 401, :text => "Login failed: The Username
and Password you entered do not match" }
+ end
end
end
diff --git a/src/app/views/user_sessions/new.haml b/src/app/views/user_sessions/new.haml
index ec19de3..5e603e2 100644
--- a/src/app/views/user_sessions/new.haml
+++ b/src/app/views/user_sessions/new.haml
@@ -1,3 +1,24 @@
+:javascript
+ $(document).ready(function() {
+ $('#new_user_session').submit(function() {
+ $.ajax({
+ url: this.action,
+ type: 'POST',
+ dataType: 'script',
+ data: $(this).serialize(),
+ error: function(response) {
+ //TODO: for some reason error connection errors are not handled by
'error' callback,
+ //what's worse jquery sets 'textStatus' to success, if we want to
catch connection errors
+ //we will have to check if status code == 0 in 'complete' callback
+ if ($('#notification').length == 0)
$('#content').prepend('<div id=notification></div>');
+ var text = $.isEmptyObject(response.responseText) ? response.statusText :
response.responseText;
+ $('#notification').html('<div class=warning>' + text +
'</div>')
+ },
+ });
+ return false;
+ });
+ })
+
.modalbox
%h2 Log In
.conductor_form
--
1.7.4