From 5fa2a7a6f37e6a08964f8f28ff045253a6f56b07 Mon Sep 17 00:00:00 2001
From: danielgrippi <daniel@joindiaspora.com>
Date: Wed, 30 Mar 2011 16:22:13 -0700
Subject: [PATCH] use popState in message inbox

---
 app/controllers/conversations_controller.rb |  9 ++-----
 app/views/conversations/_conversation.haml  | 27 +++++++++++----------
 app/views/conversations/index.js.erb        |  6 +++++
 public/javascripts/inbox.js                 | 25 ++++++-------------
 public/stylesheets/sass/application.sass    | 12 ++++++++-
 5 files changed, 41 insertions(+), 38 deletions(-)
 create mode 100644 app/views/conversations/index.js.erb

diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb
index d652ec74dd..cd0a01202b 100644
--- a/app/controllers/conversations_controller.rb
+++ b/app/controllers/conversations_controller.rb
@@ -1,7 +1,7 @@
 class ConversationsController < ApplicationController
   before_filter :authenticate_user!
 
-  respond_to :html, :json
+  respond_to :html, :json, :js
 
   def index
     @conversations = Conversation.joins(:conversation_visibilities).where(
@@ -44,17 +44,12 @@ class ConversationsController < ApplicationController
   def show
     @conversation = Conversation.joins(:conversation_visibilities).where(:id => params[:id],
                                                                          :conversation_visibilities => {:person_id => current_user.person.id}).first
-
     if @visibility = ConversationVisibility.where(:conversation_id => params[:id], :person_id => current_user.person.id).first
       @visibility.unread = 0
       @visibility.save
     end
 
-    if @conversation
-      render :layout => false
-    else
-      redirect_to conversations_path
-    end
+    respond_with @conversation
   end
 
   def new
diff --git a/app/views/conversations/_conversation.haml b/app/views/conversations/_conversation.haml
index 35657566ea..2083a53b70 100644
--- a/app/views/conversations/_conversation.haml
+++ b/app/views/conversations/_conversation.haml
@@ -2,20 +2,21 @@
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
 
-.stream_element.conversation{:data=>{:guid=>conversation.id}, :class => ('unread' if unread_counts[conversation.id].to_i > 0)}
-  = person_image_tag(authors[conversation.id])
+%a.conversation{:href => conversations_path(:conversation_id => conversation.id)}
+  .stream_element.conversation{:data=>{:guid=>conversation.id}, :class => ('unread' if unread_counts[conversation.id].to_i > 0)}
+    = person_image_tag(conversation.author)
 
-  .subject
-    .message_count
-      = conversation.messages.size
+    .subject
+      .message_count
+        = conversation.messages.size
 
-    = conversation.subject[0..30]
+      = conversation.subject[0..30]
 
-  .last_author
-    .timestamp
-      = time_ago_in_words(conversation.updated_at)
-    = authors[conversation.id].name
+    .last_author
+      .timestamp
+        = time_ago_in_words(conversation.updated_at)
+      = authors[conversation.id].name
 
-    - if conversation.participants.size > 2
-      %span.participant_count
-        = "(+#{conversation.participants.size - 1})"
+      - if conversation.participants.size > 2
+        %span.participant_count
+          = "(+#{conversation.participants.size - 1})"
diff --git a/app/views/conversations/index.js.erb b/app/views/conversations/index.js.erb
new file mode 100644
index 0000000000..36df45da9a
--- /dev/null
+++ b/app/views/conversations/index.js.erb
@@ -0,0 +1,6 @@
+$('#conversation_show').html("<%= escape_javascript(render('conversations/show', :conversation => @conversation)) %>");
+
+$(".stream_element", "#conversation_inbox").removeClass('selected');
+$(".stream_element[data-guid='<%= @conversation.id %>']", "#conversation_inbox").addClass('selected');
+
+Diaspora.widgets.timeago.updateTimeAgo();
diff --git a/public/javascripts/inbox.js b/public/javascripts/inbox.js
index 1172b61c7f..00435e90dd 100644
--- a/public/javascripts/inbox.js
+++ b/public/javascripts/inbox.js
@@ -5,24 +5,15 @@
 
 $(document).ready(function(){
 
-  var bindIt = function(element){
-    var conversationSummary = element,
-        conversationGuid = conversationSummary.attr('data-guid');
-    $.get("conversations/"+conversationGuid, function(data){
-
-      $('.conversation', '.stream').removeClass('selected');
-      conversationSummary.addClass('selected').removeClass('unread');
-      $('#conversation_show').html(data);
-      Diaspora.widgets.timeago.updateTimeAgo();
-    });
-
-    if (typeof(history.pushState) == 'function') {
-      history.pushState(null, document.title, '?conversation_id='+conversationGuid);
-    }
-  }
+  $('a.conversation').live('click', function(){
+    $.getScript(this.href);
+    history.pushState(null, "", this.href);
+    return false;
+  });
 
-  $('.conversation', '.stream').bind('mousedown', function(){
-    bindIt($(this));
+  $(window).bind("popstate", function(){
+    $.getScript(location.href);
+    return false;
   });
 
   resize();
diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass
index b314c8d68d..8acc42da53 100644
--- a/public/stylesheets/sass/application.sass
+++ b/public/stylesheets/sass/application.sass
@@ -320,6 +320,11 @@ header
       :margin 0
       :padding 0
 
+#conversation_inbox a
+  &:hover
+    :text
+      :decoration none
+
 .stream_element
   :position relative
   :word-wrap break-word
@@ -2621,7 +2626,12 @@ div.dislikes
 
   &:hover:not(.selected)
     :background
-      :color #f0f0f0
+      :color #fafafa
+
+  &.selected:hover
+    :background
+      :color lighten($blue,5%)
+
   &:hover
     :cursor pointer
 
-- 
GitLab