Ajaxify message deletion
authorTom Hughes <tom@compton.nu>
Sun, 3 Feb 2013 12:52:51 +0000 (12:52 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 3 Feb 2013 12:52:51 +0000 (12:52 +0000)
app/controllers/message_controller.rb
app/views/message/_message_summary.html.erb
app/views/message/delete.js.erb [new file with mode: 0644]

index c6a269a06ac080f3d1d20335eee21c48f1515640..8d03811a9d48b9c5335b5d74df5e22f8700635ad 100644 (file)
@@ -100,11 +100,9 @@ class MessageController < ApplicationController
       notice = t 'message.mark.as_read'
     end
     @message.message_read = message_read
-    if @message.save
-      if not request.xhr?
-        flash[:notice] = notice
-        redirect_to :controller => 'message', :action => 'inbox', :display_name => @user.display_name
-      end
+    if @message.save and not request.xhr?
+      flash[:notice] = notice
+      redirect_to :controller => 'message', :action => 'inbox', :display_name => @user.display_name
     end
   rescue ActiveRecord::RecordNotFound
     @title = t'message.no_such_message.title'
@@ -113,10 +111,10 @@ class MessageController < ApplicationController
 
   # Delete the message.
   def delete
-    message = Message.where("to_user_id = ? OR from_user_id = ?", @user.id, @user.id).find(params[:message_id])
-    message.from_user_visible = false if message.sender == @user
-    message.to_user_visible = false if message.recipient == @user
-    if message.save
+    @message = Message.where("to_user_id = ? OR from_user_id = ?", @user.id, @user.id).find(params[:message_id])
+    @message.from_user_visible = false if @message.sender == @user
+    @message.to_user_visible = false if @message.recipient == @user
+    if @message.save and not request.xhr?
       flash[:notice] = t 'message.delete.deleted'
 
       if params[:referer]
index 26001c0bd857aed1993c015790c0a79385aebb64..ffdfd6c380443dc9bfdbb8100a6c5b263d72e54c 100644 (file)
@@ -4,5 +4,5 @@
   <td class="inbox-sent"><%= l message_summary.sent_on, :format => :friendly %></td>
   <td class="inbox-mark-unread"><%= button_to t('message.message_summary.unread_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}, { :remote => true } %></td>
   <td class="inbox-mark-read"><%= button_to t('message.message_summary.read_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}, { :remote => true } %></td>
-  <td><%= button_to t('message.message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.fullpath %></td>
+  <td><%= button_to t('message.message_summary.delete_button'), {:controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.fullpath}, { :remote => true } %></td>
 </tr>
diff --git a/app/views/message/delete.js.erb b/app/views/message/delete.js.erb
new file mode 100644 (file)
index 0000000..86677ab
--- /dev/null
@@ -0,0 +1,5 @@
+$("#inboxanchor").replaceWith("<%=j render :partial => "layouts/inbox" %>");
+$("#inbox-count").replaceWith("<%=j render :partial => "message_count" %>");
+$("#inbox-<%= @message.id %>").fadeOut(800, "linear", function () {
+  $(this).remove();
+});