Commit 07eec9c66a910b5a808852f498e1dc9c88b701d2
1 parent
7563abbe
Exists in
master
and in
4 other branches
Update Notes JS for reversed notes
Showing
4 changed files
with
27 additions
and
11 deletions
Show diff stats
app/assets/javascripts/notes.js
... | ... | @@ -4,14 +4,17 @@ var NoteList = { |
4 | 4 | target_params: null, |
5 | 5 | target_id: 0, |
6 | 6 | target_type: null, |
7 | + top_id: 0, | |
7 | 8 | bottom_id: 0, |
8 | 9 | loading_more_disabled: false, |
10 | + reversed: false, | |
9 | 11 | |
10 | 12 | init: |
11 | 13 | function(tid, tt, path) { |
12 | 14 | this.notes_path = path + ".js"; |
13 | 15 | this.target_id = tid; |
14 | 16 | this.target_type = tt; |
17 | + this.reversed = $("#notes-list").hasClass("reversed"); | |
15 | 18 | this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; |
16 | 19 | |
17 | 20 | // get initial set of notes |
... | ... | @@ -69,12 +72,18 @@ var NoteList = { |
69 | 72 | * Replaces the content of #notes-list with the given html. |
70 | 73 | */ |
71 | 74 | setContent: |
72 | - function(last_id, html) { | |
75 | + function(first_id, last_id, html) { | |
76 | + this.top_id = first_id; | |
73 | 77 | this.bottom_id = last_id; |
74 | 78 | $("#notes-list").html(html); |
75 | 79 | |
76 | - // Init infinite scrolling | |
80 | + // init infinite scrolling | |
77 | 81 | this.initLoadMore(); |
82 | + | |
83 | + // init getting new notes | |
84 | + if (this.reversed) { | |
85 | + this.initRefreshNew(); | |
86 | + } | |
78 | 87 | }, |
79 | 88 | |
80 | 89 | |
... | ... | @@ -114,7 +123,7 @@ var NoteList = { |
114 | 123 | $.ajax({ |
115 | 124 | type: "GET", |
116 | 125 | url: this.notes_path, |
117 | - data: "loading_more=1&after_id=" + this.bottom_id + this.target_params, | |
126 | + data: "loading_more=1&" + (this.reversed ? "before_id" : "after_id") + "=" + this.bottom_id + this.target_params, | |
118 | 127 | complete: function(){ $('.notes-status').removeClass("loading")}, |
119 | 128 | beforeSend: function() { $('.notes-status').addClass("loading") }, |
120 | 129 | dataType: "script"}); |
... | ... | @@ -142,7 +151,9 @@ var NoteList = { |
142 | 151 | this.loading_more_disabled = true; |
143 | 152 | |
144 | 153 | // from now on only get new notes |
145 | - this.initRefreshNew(); | |
154 | + if (!this.reversed) { | |
155 | + this.initRefreshNew(); | |
156 | + } | |
146 | 157 | }, |
147 | 158 | |
148 | 159 | |
... | ... | @@ -164,14 +175,14 @@ var NoteList = { |
164 | 175 | }, |
165 | 176 | |
166 | 177 | /** |
167 | - * Gets the new set of notes (i.e. all notes after ). | |
178 | + * Gets the new set of notes. | |
168 | 179 | */ |
169 | 180 | getNew: |
170 | 181 | function() { |
171 | 182 | $.ajax({ |
172 | 183 | type: "GET", |
173 | 184 | url: this.notes_path, |
174 | - data: "loading_new=1&after_id=" + this.bottom_id + this.target_params, | |
185 | + data: "loading_new=1&after_id=" + (this.reversed ? this.top_id : this.bottom_id) + this.target_params, | |
175 | 186 | dataType: "script"}); |
176 | 187 | }, |
177 | 188 | |
... | ... | @@ -189,7 +200,9 @@ var NoteList = { |
189 | 200 | */ |
190 | 201 | appendNewNote: |
191 | 202 | function(id, html) { |
192 | - if(id != this.bottom_id) { | |
203 | + if (this.reversed) { | |
204 | + $("#new-notes-list").prepend(html); | |
205 | + } else { | |
193 | 206 | $("#new-notes-list").append(html); |
194 | 207 | } |
195 | 208 | } | ... | ... |
app/contexts/notes/load_context.rb
... | ... | @@ -4,6 +4,7 @@ module Notes |
4 | 4 | target_type = params[:target_type] |
5 | 5 | target_id = params[:target_id] |
6 | 6 | after_id = params[:after_id] |
7 | + before_id = params[:before_id] | |
7 | 8 | |
8 | 9 | |
9 | 10 | @notes = case target_type |
... | ... | @@ -17,14 +18,16 @@ module Notes |
17 | 18 | project.snippets.find(target_id).notes.fresh |
18 | 19 | when "wall" |
19 | 20 | # this is the only case, where the order is DESC |
20 | - project.common_notes.order("created_at DESC").limit(50) | |
21 | + project.common_notes.order("created_at DESC, id DESC").limit(50) | |
21 | 22 | when "wiki" |
22 | 23 | project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] |
23 | 24 | end |
24 | 25 | |
25 | 26 | @notes = if after_id |
26 | 27 | @notes.where("id > ?", after_id) |
27 | - else | |
28 | + elsif before_id | |
29 | + @notes.where("id < ?", before_id) | |
30 | + else | |
28 | 31 | @notes |
29 | 32 | end |
30 | 33 | end | ... | ... |
app/models/note.rb
... | ... | @@ -36,7 +36,7 @@ class Note < ActiveRecord::Base |
36 | 36 | scope :today, where("created_at >= :date", date: Date.today) |
37 | 37 | scope :last_week, where("created_at >= :date", date: (Date.today - 7.days)) |
38 | 38 | scope :since, lambda { |day| where("created_at >= :date", date: (day)) } |
39 | - scope :fresh, order("created_at ASC") | |
39 | + scope :fresh, order("created_at ASC, id ASC") | |
40 | 40 | scope :inc_author_project, includes(:project, :author) |
41 | 41 | scope :inc_author, includes(:author) |
42 | 42 | ... | ... |
app/views/notes/index.js.haml
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | |
10 | 10 | - else |
11 | 11 | :plain |
12 | - NoteList.setContent(#{@notes.last.id}, "#{escape_javascript(render 'notes/notes')}"); | |
12 | + NoteList.setContent(#{@notes.first.id}, #{@notes.last.id}, "#{escape_javascript(render 'notes/notes')}"); | |
13 | 13 | |
14 | 14 | - else |
15 | 15 | - if loading_more_notes? | ... | ... |