Ajaxify the mark read/unread function for messages so it doesn't
authorTom Hughes <tom@compton.nu>
Fri, 26 Feb 2010 16:35:36 +0000 (16:35 +0000)
committerTom Hughes <tom@compton.nu>
Fri, 26 Feb 2010 16:35:36 +0000 (16:35 +0000)
reload the whole page each time.

app/controllers/message_controller.rb
app/views/message/_message_count.html.erb [new file with mode: 0644]
app/views/message/_message_summary.html.erb
app/views/message/inbox.html.erb

index 73abc68..435c3fa 100644 (file)
@@ -100,8 +100,15 @@ class MessageController < ApplicationController
       end
       message.message_read = message_read
       if message.save
       end
       message.message_read = message_read
       if message.save
-        flash[:notice] = notice
-        redirect_to :controller => 'message', :action => 'inbox', :display_name => @user.display_name
+        if request.xhr?
+          render :update do |page|
+            page.replace "inbox-count", :partial => "message_count"
+            page.replace "inbox-#{message.id}", :partial => "message_summary", :object => message
+          end
+        else
+          flash[:notice] = notice
+          redirect_to :controller => 'message', :action => 'inbox', :display_name => @user.display_name
+        end
       end
     end
   rescue ActiveRecord::RecordNotFound
       end
     end
   rescue ActiveRecord::RecordNotFound
diff --git a/app/views/message/_message_count.html.erb b/app/views/message/_message_count.html.erb
new file mode 100644 (file)
index 0000000..27b0aa6
--- /dev/null
@@ -0,0 +1 @@
+<p id="inbox-count"><%= t'message.inbox.you_have', :new_count => @user.new_messages.size, :old_count => (@user.messages.size -  @user.new_messages.size) %></p> 
index 3d9976a..d4d4f78 100644 (file)
@@ -1,13 +1,13 @@
 <% this_colour = cycle('lightgrey', 'white') %>
 
 <% this_colour = cycle('lightgrey', 'white') %>
 
-<tr class="inbox-row<%= "-unread" if not message_summary.message_read? %>">
+<tr id="inbox-<%= message_summary.id %>" class="inbox-row<%= "-unread" if not message_summary.message_read? %>">
   <td class="inbox-sender" bgcolor="<%= this_colour %>"><%= link_to h(message_summary.sender.display_name), :controller => 'user', :action => message_summary.sender.display_name %></td>
   <td class="inbox-subject" bgcolor="<%= this_colour %>"><%= link_to h(message_summary.title), :controller => 'message', :action => 'read', :message_id => message_summary.id  %></td>
   <td class="inbox-sent nowrap" bgcolor="<%= this_colour %>"><%= l message_summary.sent_on %></td>
   <% if message_summary.message_read? %>
   <td class="inbox-sender" bgcolor="<%= this_colour %>"><%= link_to h(message_summary.sender.display_name), :controller => 'user', :action => message_summary.sender.display_name %></td>
   <td class="inbox-subject" bgcolor="<%= this_colour %>"><%= link_to h(message_summary.title), :controller => 'message', :action => 'read', :message_id => message_summary.id  %></td>
   <td class="inbox-sent nowrap" bgcolor="<%= this_colour %>"><%= l message_summary.sent_on %></td>
   <% if message_summary.message_read? %>
-    <td><%= button_to t('message.message_summary.unread_button'), :controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread' %></td>
+    <td><%= button_to t('message.message_summary.unread_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}, { :onclick => remote_function(:url => {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'unread'}) + "; return false;" } %></td>
   <% else %>
   <% else %>
-    <td><%= button_to t('message.message_summary.read_button'), :controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read' %></td>
+    <td><%= button_to t('message.message_summary.read_button'), {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}, { :onclick => remote_function(:url => {:controller => 'message', :action => 'mark', :message_id => message_summary.id, :mark => 'read'}) + "; return false;" } %></td>
   <% end %>
   <td><%= button_to t('message.message_summary.reply_button'), :controller => 'message', :action => 'reply', :message_id => message_summary.id %></td>
   <td><%= button_to t('message.message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.request_uri %></td>
   <% end %>
   <td><%= button_to t('message.message_summary.reply_button'), :controller => 'message', :action => 'reply', :message_id => message_summary.id %></td>
   <td><%= button_to t('message.message_summary.delete_button'), :controller => 'message', :action => 'delete', :message_id => message_summary.id, :referer => request.request_uri %></td>
index 2a97b7b..897fb24 100644 (file)
@@ -1,6 +1,6 @@
 <h2><%= t'message.inbox.my_inbox'%>/<%= link_to t('message.inbox.outbox'), url_for(:controller => "user", :action => "outbox", :id => @user.display_name) %></h2>
 
 <h2><%= t'message.inbox.my_inbox'%>/<%= link_to t('message.inbox.outbox'), url_for(:controller => "user", :action => "outbox", :id => @user.display_name) %></h2>
 
-<p><%= t'message.inbox.you_have', :new_count => @user.new_messages.size, :old_count => (@user.messages.size -  @user.new_messages.size) %></p> 
+<%= render :partial => "message_count" %>
 
 <% if @user.messages.size > 0 %>
   <div id="messages">
 
 <% if @user.messages.size > 0 %>
   <div id="messages">