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 | 17 | // get initial set of notes |
| 18 | 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 | 24 | $(".note-form-holder").on("ajax:before", function(){ |
| 24 | 25 | $(".submit_note").disable() |
| ... | ... | @@ -197,13 +198,41 @@ var NoteList = { |
| 197 | 198 | var PerLineNotes = { |
| 198 | 199 | init: |
| 199 | 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 | 208 | var form = $(".per_line_form"); |
| 202 | 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 | 211 | form.show(); |
| 205 | 212 | return false; |
| 206 | 213 | }); |
| 214 | + | |
| 207 | 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 | 1 | - if note.valid? |
| 2 | 2 | :plain |
| 3 | + // hide and reset the form | |
| 3 | 4 | $(".per_line_form").hide(); |
| 4 | 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 | + } | ... | ... |