diff options
author | Riyad Preukschas <riyad@informatik.uni-bremen.de> | 2012-12-03 23:35:09 +0400 |
---|---|---|
committer | Riyad Preukschas <riyad@informatik.uni-bremen.de> | 2012-12-04 01:51:57 +0400 |
commit | 7978f8dd2b62baacb0d045b65282b758a76da118 (patch) | |
tree | 66914e4449c230fd1a47c01ee99ee1d10ef8c36d /app/assets/javascripts/notes.js | |
parent | c1ffee4e65601a42c5d40ec5f3ddddb51a93251f (diff) |
Fix handling form errors.
Diffstat (limited to 'app/assets/javascripts/notes.js')
-rw-r--r-- | app/assets/javascripts/notes.js | 66 |
1 files changed, 55 insertions, 11 deletions
diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index c9137c887b9..8c4577bd1fc 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -69,12 +69,10 @@ var NoteList = { ".js-note-delete", NoteList.removeNote); - // clean up previews for forms - $(document).on("ajax:complete", ".js-main-target-form", function(){ - $(this).find('.error').remove(); - $(this).find('.js-note-text').val(""); - $(this).show(); - }); + // clean up previews for main target form + $(document).on("ajax:complete", + ".js-main-target-form", + NoteList.cleanupMainTargetForm); }, @@ -84,6 +82,26 @@ var NoteList = { /** + * + */ + cleanupMainTargetForm: function(){ + var form = $(this); + + // remove validation errors + form.find(".js-errors").remove(); + + // reset text and preview + var previewContainer = form.find(".js-toggler-container.note_text_and_preview"); + if (previewContainer.is(".on")) { + previewContainer.removeClass("on"); + } + form.find(".js-note-text").val("").trigger("input"); + + // re-enable submit button + form.find(".js-comment-button").enable(); + }, + + /** * Called when clicking on the "add a comment" button on the side of a diff line. * * Inserts a temporary row for the form below the line. @@ -219,6 +237,27 @@ var NoteList = { /** + * Called in response to creating a note failing validation. + * + * Adds the rendered errors to the respective form. + * If "discussionId" is null or undefined, the main target form is assumed. + */ + errorsOnForm: function(errorsHtml, discussionId) { + // find the form + if (discussionId) { + var form = $("form[rel='"+discussionId+"']"); + } else { + var form = $(".js-main-target-form"); + } + + form.find(".js-errors").remove(); + form.prepend(errorsHtml); + + form.find(".js-note-text").focus(); + }, + + + /** * Shows the diff/discussion form and does some setup on it. * * Sets some hidden fields in the form. @@ -235,8 +274,6 @@ var NoteList = { NoteList.setupNoteForm(form); - // cleanup after successfully creating a diff/discussion note - form.on("ajax:success", NoteList.removeDiscussionNoteForm); }, /** @@ -449,19 +486,26 @@ var NoteList = { /** * Adds a single discussion note to #notes-list. + * + * Also removes the corresponding form. */ appendNewDiscussionNote: function(discussionId, diffRowHtml, noteHtml) { + var form = $("form[rel='"+discussionId+"']"); + var row = form.closest("tr"); + // is this the first note of discussion? - var row = $("form[rel='"+discussionId+"']").closest("tr"); if (row.is(".js-temp-notes-holder")) { - // insert the note and the reply button after it + // insert the note and the reply button after the temp row row.after(diffRowHtml); - // will be added again below + // remove the note (will be added again below) row.next().find(".note").remove(); } // append new note to all matching discussions $(".notes[rel='"+discussionId+"']").append(noteHtml); + + // cleanup after successfully creating a diff/discussion note + $.proxy(NoteList.removeDiscussionNoteForm, form).call(); }, /** |