diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-07-02 11:47:09 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-07-02 11:47:09 +0300 |
commit | ee890f2b2a66be925746f2238dc462a74b0fd219 (patch) | |
tree | bb2e74eb834d5c69f66e42c7a80af1705e616ea9 /app/assets/javascripts/notes.js | |
parent | f49fb5dca1ecf2b1ae6415920de09b4d95c14bb1 (diff) | |
parent | 7588186e8173f53a7f9b86d2b6959d7f94a3caac (diff) | |
download | gitlab-ce-ee890f2b2a66be925746f2238dc462a74b0fd219.tar.gz |
Merge branch 'master' into 6-0-dev
Conflicts:
app/views/dashboard/projects.html.haml
app/views/layouts/_head_panel.html.haml
config/routes.rb
Diffstat (limited to 'app/assets/javascripts/notes.js')
-rw-r--r-- | app/assets/javascripts/notes.js | 147 |
1 files changed, 140 insertions, 7 deletions
diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index e0715f45417..85d86f3f0bd 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -56,6 +56,26 @@ var NoteList = { ".js-note-delete", NoteList.removeNote); + // show the edit note form + $(document).on("click", + ".js-note-edit", + NoteList.showEditNoteForm); + + // cancel note editing + $(document).on("click", + ".note-edit-cancel", + NoteList.cancelNoteEdit); + + // delete note attachment + $(document).on("click", + ".js-note-attachment-delete", + NoteList.deleteNoteAttachment); + + // update the note after editing + $(document).on("ajax:complete", + "form.edit_note", + NoteList.updateNote); + // reset main target form after submit $(document).on("ajax:complete", ".js-main-target-form", @@ -63,12 +83,12 @@ var NoteList = { $(document).on("click", - ".js-choose-note-attachment-button", - NoteList.chooseNoteAttachment); + ".js-choose-note-attachment-button", + NoteList.chooseNoteAttachment); $(document).on("click", - ".js-show-outdated-discussion", - function(e) { $(this).next('.outdated-discussion').show(); e.preventDefault() }); + ".js-show-outdated-discussion", + function(e) { $(this).next('.outdated-discussion').show(); e.preventDefault() }); }, @@ -107,8 +127,8 @@ var NoteList = { /** * Called when clicking the "Choose File" button. - * - * Opesn the file selection dialog. + * + * Opens the file selection dialog. */ chooseNoteAttachment: function() { var form = $(this).closest("form"); @@ -143,7 +163,7 @@ var NoteList = { /** * Called in response to "cancel" on a diff note form. - * + * * Shows the reply button again. * Removes the form and if necessary it's temporary row. */ @@ -187,6 +207,59 @@ var NoteList = { }, /** + * Called in response to clicking the edit note link + * + * Replaces the note text with the note edit form + * Adds a hidden div with the original content of the note to fill the edit note form with + * if the user cancels + */ + showEditNoteForm: function(e) { + e.preventDefault(); + var note = $(this).closest(".note"); + note.find(".note-text").hide(); + + // Show the attachment delete link + note.find(".js-note-attachment-delete").show(); + + var form = note.find(".note-edit-form"); + form.show(); + + + var textarea = form.find("textarea"); + var p = $("<p></p>").text(textarea.val()); + var hidden_div = $('<div class="note-original-content"></div>').append(p); + form.append(hidden_div); + hidden_div.hide(); + textarea.focus(); + }, + + /** + * Called in response to clicking the cancel button when editing a note + * + * Resets and hides the note editing form + */ + cancelNoteEdit: function(e) { + e.preventDefault(); + var note = $(this).closest(".note"); + NoteList.resetNoteEditing(note); + }, + + + /** + * Called in response to clicking the delete attachment link + * + * Removes the attachment wrapper view, including image tag if it exists + * Resets the note editing form + */ + deleteNoteAttachment: function() { + var note = $(this).closest(".note"); + note.find(".note-attachment").remove(); + NoteList.resetNoteEditing(note); + NoteList.rewriteTimestamp(note.find(".note-last-update")); + }, + + + /** * Called when clicking on the "reply" button for a diff line. * * Shows the note form below the notes. @@ -436,5 +509,65 @@ var NoteList = { votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes)); votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes)); } + }, + + /** + * Called in response to the edit note form being submitted + * + * Updates the current note field. + * Hides the edit note form + */ + updateNote: function(e, xhr, settings) { + response = JSON.parse(xhr.responseText); + if (response.success) { + var note_li = $("#note_" + response.id); + var note_text = note_li.find(".note-text"); + note_text.html(response.note).show(); + + var note_form = note_li.find(".note-edit-form"); + note_form.hide(); + note_form.find(".btn-save").enableButton(); + + // Update the "Edited at xxx label" on the note to show it's just been updated + NoteList.rewriteTimestamp(note_li.find(".note-last-update")); + } + }, + + /** + * Called in response to the 'cancel note' link clicked, or after deleting a note attachment + * + * Hides the edit note form and shows the note + * Resets the edit note form textarea with the original content of the note + */ + resetNoteEditing: function(note) { + note.find(".note-text").show(); + + // Hide the attachment delete link + note.find(".js-note-attachment-delete").hide(); + + // Put the original content of the note back into the edit form textarea + var form = note.find(".note-edit-form"); + var original_content = form.find(".note-original-content"); + form.find("textarea").val(original_content.text()); + original_content.remove(); + + note.find(".note-edit-form").hide(); + }, + + /** + * Utility function to generate new timestamp text for a note + * + */ + rewriteTimestamp: function(element) { + // Strip all newlines from the existing timestamp + var ts = element.text().replace(/\n/g, ' ').trim(); + + // If the timestamp already has '(Edited xxx ago)' text, remove it + ts = ts.replace(new RegExp("\\(Edited [A-Za-z0-9 ]+\\)$", "gi"), ""); + + // Append "(Edited just now)" + ts = (ts + " <small>(Edited just now)</small>"); + + element.html(ts); } }; |