public
Fork of trevorturk/el-dorado
Description: Localized version of El Dorado using Gibberish. Dutch language included.
Homepage: http://almosteffortless.com/eldorado/
Clone URL: git://github.com/jxl/el-dorado.git
changing chat pagination to ajax show_more action and doing some 
refactoring
trevorturk (author)
Thu May 08 21:36:17 -0700 2008
commit  5a0e92fdf16bb162f58fa2d10f57533a6a12fa71
tree    45a5442014b0f2991db3b163e26077b6e25770ca
parent  a4192e855521846688b6c5d5fab3032f2a7ed1cb
...
3
4
5
6
 
7
8
9
...
3
4
5
 
6
7
8
9
0
@@ -3,7 +3,7 @@ class HomeController < ApplicationController
0
   def index
0
       @date = Time.parse("#{params[:date]} || TzTime.now")
0
       @avatars = Avatar.find(:all, :limit => 3, :include => :user, :order => 'avatars.updated_at desc')
0
- @message = Message.latest
0
+ @message = Message.last
0
       @chatters = User.chatting
0
       @events = Event.find(:all, :conditions => ['date between ? and ?', @date.strftime("%Y-%m") + '-01', @date.next_month.strftime("%Y-%m") + '-01'])
0
       @headers = Header.find(:all, :limit => 3, :include => :user, :order => 'headers.created_at desc')
...
4
5
6
7
 
8
9
 
 
 
 
 
10
11
12
13
14
15
16
...
34
35
36
37
 
 
 
 
 
 
 
 
 
 
 
38
39
40
...
53
54
55
56
 
57
58
...
4
5
6
 
7
8
9
10
11
12
13
14
15
16
 
 
17
18
19
...
37
38
39
 
40
41
42
43
44
45
46
47
48
49
50
51
52
53
...
66
67
68
 
69
70
71
0
@@ -4,13 +4,16 @@ class MessagesController < ApplicationController
0
   before_filter :require_login, :only => [:create]
0
   before_filter :can_edit, :only => [:destroy]
0
   
0
- skip_filter :update_online_at, :get_layout_vars, :only => [:refresh_messages, :refresh_chatters]
0
+ skip_filter :update_online_at, :get_layout_vars, :only => [:more, :refresh, :refresh_chatters]
0
   
0
   def index
0
+ @messages = Message.get(params[:limit])
0
+ unless @messages.empty?
0
+ session[:message_id] = @messages.map(&:id).max
0
+ @last_message = @messages.map(&:id).min
0
+ end
0
     current_user.update_attribute('chatting_at', Time.now.utc) if logged_in?
0
     @chatters = User.chatting
0
- @messages = Message.paginate(:page => params[:page], :include => [:user], :order => 'messages.created_at desc')
0
- session[:message_id] = @messages.map(&:id).max unless @messages.empty?
0
   end
0
   
0
   def show
0
@@ -34,7 +37,17 @@ class MessagesController < ApplicationController
0
     redirect_to chat_url
0
   end
0
   
0
- def refresh_messages
0
+ def more
0
+ @messages = Message.more(params[:id])
0
+ @last_message = @messages.map(&:id).min unless @messages.empty?
0
+ render :update do |page|
0
+ page.insert_html :bottom, 'messages-index', :partial => 'messages', :object => @messages
0
+ page.replace_html 'messages-more', :partial => 'more', :object => @last_message
0
+ page.replace_html 'messages-more', :partial => 'more_disabled' if @messages.empty?
0
+ end
0
+ end
0
+
0
+ def refresh
0
     @messages = Message.refresh(session[:message_id], current_user)
0
     session[:message_id] = @messages.map(&:id).max unless @messages.empty?
0
     if @messages
0
@@ -53,5 +66,5 @@ class MessagesController < ApplicationController
0
         page.replace_html 'chatters', :partial => 'chatters', :object => @chatters
0
       end
0
     end
0
- end
0
+ end
0
 end
0
\ No newline at end of file
...
15
16
17
18
19
 
 
 
20
21
22
23
 
 
 
 
 
 
 
 
 
 
24
25
26
27
28
29
 
30
...
15
16
17
 
 
18
19
20
21
22
 
 
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
38
39
0
@@ -15,15 +15,24 @@ class Message < ActiveRecord::Base
0
   
0
   validates_presence_of :body
0
   
0
- def self.latest
0
- find(:first, :order => 'created_at desc')
0
+ # TODO can remove w/ rails 2.1
0
+ def self.last
0
+ find(:first, :order => 'id desc')
0
   end
0
   
0
- def self.refresh(message_id, current_user)
0
- find(:all, :order => 'created_at desc', :conditions => ['id > ? and user_id != ?', message_id, current_user])
0
+ def self.more(id)
0
+ find(:all, :limit => 50, :order => 'messages.id desc', :include => :user, :conditions => ['messages.id < ?', id])
0
+ end
0
+
0
+ def self.get(limit)
0
+ find(:all, :limit => limit || 50, :order => 'messages.id desc', :include => :user)
0
+ end
0
+
0
+ def self.refresh(id, current_user)
0
+ find(:all, :order => 'messages.id desc', :include => :user, :conditions => ['messages.id > ? and user_id != ?', id, current_user])
0
   end
0
   
0
   def to_s
0
     body
0
   end
0
-end
0
+end
0
\ No newline at end of file
...
22
23
24
25
26
27
28
29
30
 
 
 
 
 
 
 
31
...
22
23
24
 
 
 
 
 
25
26
27
28
29
30
31
32
33
0
@@ -22,8 +22,10 @@
0
   </tbody>
0
 </table>
0
 
0
-<% unless params[:page] %>
0
- <%= periodically_call_remote :url => refresh_messages_path, :method => 'get', :frequency => 3 %>
0
- <%= periodically_call_remote :url => refresh_chatters_path, :method => 'get', :frequency => 10 %>
0
- <%= javascript_tag "$('message_body').focus();$('message_body').writeAttribute('autocomplete', 'off');" if logged_in? %>
0
-<% end %>
0
\ No newline at end of file
0
+<p id="messages-more" class="center">
0
+ <%= render :partial => 'more', :object => @last_message %>
0
+</p>
0
+
0
+<%= periodically_call_remote :url => refresh_messages_path, :method => 'get', :frequency => 3 %>
0
+<%= periodically_call_remote :url => refresh_chatters_path, :method => 'get', :frequency => 10 %>
0
+<%= javascript_tag "$('message_body').focus();$('message_body').writeAttribute('autocomplete', 'off');" if logged_in? %>
0
\ No newline at end of file
...
115
116
117
118
119
120
121
122
123
124
125
126
...
115
116
117
 
 
 
 
 
 
118
119
120
0
@@ -115,12 +115,6 @@
0
   </div>
0
 <% end %>
0
 
0
-<% if current_controller == 'messages' and current_action == 'index' %>
0
- <div class="info-right">
0
- <%= will_paginate @messages, :inner_window => 1, :outer_window => 0, :prev_label => '&laquo; Prev' %>
0
- </div>
0
-<% end %>
0
-
0
 <% if current_controller == 'posts' and current_action == 'edit' %>
0
   <div class="info-left">
0
     <%= link_to 'Home', root_path %> &raquo;
...
7
8
9
10
 
11
12
13
...
18
19
20
21
22
23
24
...
7
8
9
 
10
11
12
13
...
18
19
20
 
21
22
23
0
@@ -7,7 +7,7 @@ ActionController::Routing::Routes.draw do |map|
0
   map.resources :events
0
   map.resources :forums, :member => { :confirm_delete => :get }
0
   map.resources :headers, :member => { :vote_up => :post, :vote_down => :post }
0
- map.resources :messages
0
+ map.resources :messages, :collection => { :more => :get, :refresh => :get }
0
   map.resources :posts, :member => { :quote => :get, :topic => :get }
0
   map.resources :ranks
0
   map.resources :settings
0
@@ -18,7 +18,6 @@ ActionController::Routing::Routes.draw do |map|
0
   map.resources :users, :member => { :posts => :get, :confirm_delete => :get, :admin => :post, :ban => :get, :remove_ban => :post }
0
   
0
   map.search 'search', :controller => 'search', :action => 'index'
0
- map.refresh_messages 'refresh_messages', :controller => 'messages', :action => 'refresh_messages'
0
   map.refresh_chatters 'refresh_chatters', :controller => 'messages', :action => 'refresh_chatters'
0
   
0
   map.login 'login', :controller => 'users', :action => 'login'
...
589
590
591
 
 
 
 
592
593
594
...
589
590
591
592
593
594
595
596
597
598
0
@@ -589,6 +589,10 @@ cite {
0
   padding: 4px 5px;
0
 }
0
 
0
+.center {
0
+ text-align: center;
0
+}
0
+
0
 .post-body img { max-width: 560px; }
0
 .post-body blockquote img { max-width: 528px; }
0
 .post-body blockquote blockquote img { max-width: 494px; }
...
99
100
101
 
 
 
 
 
102
103
 
104
105
106
...
108
109
110
111
 
112
...
99
100
101
102
103
104
105
106
107
 
108
109
110
111
...
113
114
115
 
116
117
0
@@ -99,8 +99,13 @@ class MessagesControllerTest < ActionController::TestCase
0
     assert_redirected_to root_path
0
   end
0
   
0
+ def test_more_messages_path_should_work
0
+ get :more
0
+ assert_response :success
0
+ end
0
+
0
   def test_refresh_messages_path_should_work
0
- get :refresh_messages
0
+ get :refresh
0
     assert_response :success
0
   end
0
   
0
@@ -108,5 +113,5 @@ class MessagesControllerTest < ActionController::TestCase
0
     get :refresh_chatters
0
     assert_response :success
0
   end
0
-
0
+
0
 end

Comments

    No one has commented yet.