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,14 +4,17 @@ var NoteList = { | ||
4 | target_params: null, | 4 | target_params: null, |
5 | target_id: 0, | 5 | target_id: 0, |
6 | target_type: null, | 6 | target_type: null, |
7 | + top_id: 0, | ||
7 | bottom_id: 0, | 8 | bottom_id: 0, |
8 | loading_more_disabled: false, | 9 | loading_more_disabled: false, |
10 | + reversed: false, | ||
9 | 11 | ||
10 | init: | 12 | init: |
11 | function(tid, tt, path) { | 13 | function(tid, tt, path) { |
12 | this.notes_path = path + ".js"; | 14 | this.notes_path = path + ".js"; |
13 | this.target_id = tid; | 15 | this.target_id = tid; |
14 | this.target_type = tt; | 16 | this.target_type = tt; |
17 | + this.reversed = $("#notes-list").hasClass("reversed"); | ||
15 | this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; | 18 | this.target_params = "&target_type=" + this.target_type + "&target_id=" + this.target_id; |
16 | 19 | ||
17 | // get initial set of notes | 20 | // get initial set of notes |
@@ -69,12 +72,18 @@ var NoteList = { | @@ -69,12 +72,18 @@ var NoteList = { | ||
69 | * Replaces the content of #notes-list with the given html. | 72 | * Replaces the content of #notes-list with the given html. |
70 | */ | 73 | */ |
71 | setContent: | 74 | setContent: |
72 | - function(last_id, html) { | 75 | + function(first_id, last_id, html) { |
76 | + this.top_id = first_id; | ||
73 | this.bottom_id = last_id; | 77 | this.bottom_id = last_id; |
74 | $("#notes-list").html(html); | 78 | $("#notes-list").html(html); |
75 | 79 | ||
76 | - // Init infinite scrolling | 80 | + // init infinite scrolling |
77 | this.initLoadMore(); | 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,7 +123,7 @@ var NoteList = { | ||
114 | $.ajax({ | 123 | $.ajax({ |
115 | type: "GET", | 124 | type: "GET", |
116 | url: this.notes_path, | 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 | complete: function(){ $('.notes-status').removeClass("loading")}, | 127 | complete: function(){ $('.notes-status').removeClass("loading")}, |
119 | beforeSend: function() { $('.notes-status').addClass("loading") }, | 128 | beforeSend: function() { $('.notes-status').addClass("loading") }, |
120 | dataType: "script"}); | 129 | dataType: "script"}); |
@@ -142,7 +151,9 @@ var NoteList = { | @@ -142,7 +151,9 @@ var NoteList = { | ||
142 | this.loading_more_disabled = true; | 151 | this.loading_more_disabled = true; |
143 | 152 | ||
144 | // from now on only get new notes | 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,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 | getNew: | 180 | getNew: |
170 | function() { | 181 | function() { |
171 | $.ajax({ | 182 | $.ajax({ |
172 | type: "GET", | 183 | type: "GET", |
173 | url: this.notes_path, | 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 | dataType: "script"}); | 186 | dataType: "script"}); |
176 | }, | 187 | }, |
177 | 188 | ||
@@ -189,7 +200,9 @@ var NoteList = { | @@ -189,7 +200,9 @@ var NoteList = { | ||
189 | */ | 200 | */ |
190 | appendNewNote: | 201 | appendNewNote: |
191 | function(id, html) { | 202 | function(id, html) { |
192 | - if(id != this.bottom_id) { | 203 | + if (this.reversed) { |
204 | + $("#new-notes-list").prepend(html); | ||
205 | + } else { | ||
193 | $("#new-notes-list").append(html); | 206 | $("#new-notes-list").append(html); |
194 | } | 207 | } |
195 | } | 208 | } |
app/contexts/notes/load_context.rb
@@ -4,6 +4,7 @@ module Notes | @@ -4,6 +4,7 @@ module Notes | ||
4 | target_type = params[:target_type] | 4 | target_type = params[:target_type] |
5 | target_id = params[:target_id] | 5 | target_id = params[:target_id] |
6 | after_id = params[:after_id] | 6 | after_id = params[:after_id] |
7 | + before_id = params[:before_id] | ||
7 | 8 | ||
8 | 9 | ||
9 | @notes = case target_type | 10 | @notes = case target_type |
@@ -17,14 +18,16 @@ module Notes | @@ -17,14 +18,16 @@ module Notes | ||
17 | project.snippets.find(target_id).notes.fresh | 18 | project.snippets.find(target_id).notes.fresh |
18 | when "wall" | 19 | when "wall" |
19 | # this is the only case, where the order is DESC | 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 | when "wiki" | 22 | when "wiki" |
22 | project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] | 23 | project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20] |
23 | end | 24 | end |
24 | 25 | ||
25 | @notes = if after_id | 26 | @notes = if after_id |
26 | @notes.where("id > ?", after_id) | 27 | @notes.where("id > ?", after_id) |
27 | - else | 28 | + elsif before_id |
29 | + @notes.where("id < ?", before_id) | ||
30 | + else | ||
28 | @notes | 31 | @notes |
29 | end | 32 | end |
30 | end | 33 | end |
app/models/note.rb
@@ -36,7 +36,7 @@ class Note < ActiveRecord::Base | @@ -36,7 +36,7 @@ class Note < ActiveRecord::Base | ||
36 | scope :today, where("created_at >= :date", date: Date.today) | 36 | scope :today, where("created_at >= :date", date: Date.today) |
37 | scope :last_week, where("created_at >= :date", date: (Date.today - 7.days)) | 37 | scope :last_week, where("created_at >= :date", date: (Date.today - 7.days)) |
38 | scope :since, lambda { |day| where("created_at >= :date", date: (day)) } | 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 | scope :inc_author_project, includes(:project, :author) | 40 | scope :inc_author_project, includes(:project, :author) |
41 | scope :inc_author, includes(:author) | 41 | scope :inc_author, includes(:author) |
42 | 42 |
app/views/notes/index.js.haml
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | 9 | ||
10 | - else | 10 | - else |
11 | :plain | 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 | - else | 14 | - else |
15 | - if loading_more_notes? | 15 | - if loading_more_notes? |