Skip to content
Snippets Groups Projects
Commit 7978f8dd authored by Riyad Preukschas's avatar Riyad Preukschas
Browse files

Fix handling form errors.

parent c1ffee4e
No related branches found
No related tags found
1 merge request!1878Discussions (a.k.a. Grouped Comments)
Loading
Loading
@@ -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);
},
 
 
Loading
Loading
@@ -83,6 +81,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.
*
Loading
Loading
@@ -218,6 +236,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.
*
Loading
Loading
@@ -235,8 +274,6 @@ var NoteList = {
 
NoteList.setupNoteForm(form);
 
// cleanup after successfully creating a diff/discussion note
form.on("ajax:success", NoteList.removeDiscussionNoteForm);
},
 
/**
Loading
Loading
@@ -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();
},
 
/**
Loading
Loading
Loading
Loading
@@ -5,11 +5,6 @@
= f.hidden_field :noteable_id
= f.hidden_field :noteable_type
 
- if @note.errors.any?
.alert-message.block-message.error
- @note.errors.full_messages.each do |msg|
%div= msg
.note_text_and_preview.js-toggler-container
%a.js-note-preview-button.js-toggler-target.turn-on{ href: "javascript:;", data: {title: "Preview", url: preview_project_notes_path(@project)} }
%i.icon-eye-open
Loading
Loading
.error_message.js-errors
- note.errors.full_messages.each do |msg|
%div= msg
Loading
Loading
@@ -7,10 +7,15 @@
- else
NoteList.appendNewNote(#{@note.id}, noteHtml);
- else
var firstDiscussionNoteHtml = "#{escape_javascript(render "notes/diff_notes_with_reply", notes: [@note])}";
NoteList.appendNewDiscussionNote("#{@note.discussion_id}", firstDiscussionNoteHtml, noteHtml);
:plain
var firstDiscussionNoteHtml = "#{escape_javascript(render "notes/diff_notes_with_reply", notes: [@note])}";
NoteList.appendNewDiscussionNote("#{@note.discussion_id}",
firstDiscussionNoteHtml,
noteHtml);
 
- else
-# TODO: insert form correctly
$(".js-main-target-note").replaceWith("#{escape_javascript(render 'notes/common_form')}");
GitLab.GfmAutoComplete.setup();
\ No newline at end of file
var errorsHtml = "#{escape_javascript(render 'notes/form_errors', note: @note)}";
- if note_for_main_target?(@note)
NoteList.errorsOnForm(errorsHtml);
- else
NoteList.errorsOnForm(errorsHtml, "#{@note.discussion_id}");
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment