Commit cee230a158e72a973150a17034b58c869f7e9407
1 parent
653f7ec4
Exists in
master
and in
4 other branches
Update JS for adding and removing diff line notes
Showing
2 changed files
with
48 additions
and
8 deletions
Show diff stats
app/assets/javascripts/note.js
@@ -17,8 +17,9 @@ var NoteList = { | @@ -17,8 +17,9 @@ var NoteList = { | ||
17 | // get initial set of notes | 17 | // get initial set of notes |
18 | this.getContent(); | 18 | this.getContent(); |
19 | 19 | ||
20 | - $('.delete-note').live('ajax:success', function() { | ||
21 | - $(this).closest('li').fadeOut(); }); | 20 | + $("#notes-list, #new-notes-list").on("ajax:success", ".delete-note", function() { |
21 | + $(this).closest('li').fadeOut(); | ||
22 | + }); | ||
22 | 23 | ||
23 | $(".note-form-holder").on("ajax:before", function(){ | 24 | $(".note-form-holder").on("ajax:before", function(){ |
24 | $(".submit_note").disable() | 25 | $(".submit_note").disable() |
@@ -197,13 +198,41 @@ var NoteList = { | @@ -197,13 +198,41 @@ var NoteList = { | ||
197 | var PerLineNotes = { | 198 | var PerLineNotes = { |
198 | init: | 199 | init: |
199 | function() { | 200 | function() { |
200 | - $(".line_note_link, .line_note_reply_link").on("click", function(e) { | 201 | + /** |
202 | + * Called when clicking on the "add note" or "reply" button for a diff line. | ||
203 | + * | ||
204 | + * Shows the note form below the line. | ||
205 | + * Sets some hidden fields in the form. | ||
206 | + */ | ||
207 | + $(".diff_file_content").on("click", ".line_note_link, .line_note_reply_link", function(e) { | ||
201 | var form = $(".per_line_form"); | 208 | var form = $(".per_line_form"); |
202 | $(this).closest("tr").after(form); | 209 | $(this).closest("tr").after(form); |
203 | - form.find("#note_line_code").val($(this).attr("line_code")); | 210 | + form.find("#note_line_code").val($(this).data("lineCode")); |
204 | form.show(); | 211 | form.show(); |
205 | return false; | 212 | return false; |
206 | }); | 213 | }); |
214 | + | ||
207 | disableButtonIfEmptyField(".line-note-text", ".submit_inline_note"); | 215 | disableButtonIfEmptyField(".line-note-text", ".submit_inline_note"); |
216 | + | ||
217 | + /** | ||
218 | + * Called in response to successfully deleting a note on a diff line. | ||
219 | + * | ||
220 | + * Removes the actual note from view. | ||
221 | + * Removes the reply button if the last note for that line has been removed. | ||
222 | + */ | ||
223 | + $(".diff_file_content").on("ajax:success", ".delete-note", function() { | ||
224 | + var trNote = $(this).closest("tr"); | ||
225 | + trNote.fadeOut(function() { | ||
226 | + $(this).remove(); | ||
227 | + }); | ||
228 | + | ||
229 | + // check if this is the last note for this line | ||
230 | + // elements must really be removed for this to work reliably | ||
231 | + var trLine = trNote.prev(); | ||
232 | + var trRpl = trNote.next(); | ||
233 | + if (trLine.hasClass("line_holder") && trRpl.hasClass("reply")) { | ||
234 | + trRpl.fadeOut(function() { $(this).remove(); }); | ||
235 | + } | ||
236 | + }); | ||
208 | } | 237 | } |
209 | } | 238 | } |
app/views/notes/_create_line.js.haml
1 | - if note.valid? | 1 | - if note.valid? |
2 | :plain | 2 | :plain |
3 | + // hide and reset the form | ||
3 | $(".per_line_form").hide(); | 4 | $(".per_line_form").hide(); |
4 | $('.line-note-form-holder textarea').val(""); | 5 | $('.line-note-form-holder textarea').val(""); |
5 | - $("a.line_note_reply_link[line_code='#{note.line_code}']").closest("tr").remove(); | ||
6 | - var trEl = $(".#{note.line_code}").parent(); | ||
7 | - trEl.after("#{escape_javascript(render partial: "notes/per_line_show", locals: {note: note})}"); | ||
8 | - trEl.after("#{escape_javascript(render partial: "notes/reply_button", locals: {line_code: note.line_code})}"); | 6 | + |
7 | + // find the reply button for this line | ||
8 | + // (might not be there if this is the first note) | ||
9 | + var trRpl = $("a.line_note_reply_link[data-line-code='#{note.line_code}']").closest("tr"); | ||
10 | + if (trRpl.size() == 0) { | ||
11 | + // find the commented line ... | ||
12 | + var trEl = $(".#{note.line_code}").parent(); | ||
13 | + // ... and insert the note and the reply button after it | ||
14 | + trEl.after("#{escape_javascript(render "notes/reply_button", line_code: note.line_code)}"); | ||
15 | + trEl.after("#{escape_javascript(render "notes/per_line_show", note: note)}"); | ||
16 | + } else { | ||
17 | + // instert new note before reply button | ||
18 | + trRpl.before("#{escape_javascript(render "notes/per_line_show", note: note)}"); | ||
19 | + } |