$(document).ready(function () { let index = 1; let activeSection = null; function addOption(type, container) { // let optionIndex = container.children().length + 1; let optionHtml; if (type === "multiple-choice" || type === "checkboxes") { optionHtml = `
×
`; } else if (type === "dropdown") { optionHtml = `
×
`; } container.append(optionHtml); } function createFormSection() { let newSection = `
${index === 1 ? '
' : ""}
`; $("#form-container").append(newSection); index++; positionAddSectionButton(); } function positionAddSectionButton() { if (activeSection) { let position = activeSection.position(); let buttonWidth = $("#add-section-btn").outerWidth(); let buttonHeight = $("#add-section-btn").outerHeight(); $("#add-section-btn").css({ position: "absolute", left: position.left - buttonWidth - 47 + "px", top: position.top + activeSection.height() / 2 - buttonHeight / 2 + "px", }); } } $("#add-section-btn").on("click", function () { createFormSection(); $(".form-section").removeClass("active"); activeSection = $(".form-section").last(); activeSection.addClass("active"); positionAddSectionButton(); }); $(document).on("change", ".custom-select", function () { let type = $(this).val(); let container = $(this).closest(".form-section").find(".options-container"); container.empty(); $(this).closest(".form-section").find(".add-option-btn").remove(); if (type === "short-answer") { container.append( '', ); } else if (type === "paragraph") { container.append( '', ); } else { addOption(type, container); $(this) .closest(".form-section") .append( '', ); } }); $(document).on("click", ".add-option-btn", function () { let type = $(this).closest(".form-section").find(".custom-select").val(); let container = $(this).closest(".form-section").find(".options-container"); addOption(type, container); }); $(document).on("click", ".delete-section-icon", function () { let section = $(this).closest(".form-section"); let prevSection = section.prev(".form-section"); let nextSection = section.next(".form-section"); section.remove(); if (section.hasClass("active")) { activeSection = null; } if (prevSection.length > 0) { prevSection .find(".delete-section-icon") .appendTo(prevSection.find(".form-section")); activeSection = prevSection; row; } else if (nextSection.length > 0) { nextSection .find(".delete-section-icon") .appendTo(nextSection.find(".form-header")); activeSection = nextSection; } positionAddSectionButton(); }); $(document).on("click", ".delete-option-icon", function () { let option = $(this).closest(".option"); let container = option.closest(".options-container"); option.remove(); }); $(document).on("click", ".required-toggle", function () { $(this).closest(".form-section").toggleClass("required"); }); $("#preview-btn").on("click", function () { let previewWindow = window.open("", "_blank"); let previewContent = ` Form Preview

Form Preview

`; $(".form-section").each(function () { previewContent += '
'; previewContent += '
'; previewContent += '
' + $(this).find(".untitled-question").val() + "
"; previewContent += "
"; let type = $(this).find(".custom-select").val(); let optionsContainer = $(this).find(".options-container"); if (type === "multiple-choice") { optionsContainer.find(".option").each(function () { previewContent += `
`; }); } else if (type === "checkboxes") { optionsContainer.find(".option").each(function () { previewContent += `
`; }); } else if (type === "short-answer") { previewContent += ''; } else if (type === "paragraph") { previewContent += ''; } else if (type === "dropdown") { let dropdownHtml = '"; previewContent += dropdownHtml; } previewContent += "
"; }); previewContent += `
`; previewWindow.document.write(previewContent); previewWindow.document.close(); }); $(document).on("click", ".form-section", function () { $(".form-section").removeClass("active"); $(this).addClass("active"); activeSection = $(this); positionAddSectionButton(); }); $("#form-container").sortable({ placeholder: "ui-state-highlight", start: function (event, ui) { ui.placeholder.height(ui.item.height()); }, stop: function (event, ui) { positionAddSectionButton(); }, }); function collectFormData() { var formData = { questions: [], }; $(".form-section").each(function () { var questionType = $(this).find(".custom-select").val(); var questionData = { text: $(this).find(".untitled-question").val(), type: questionType, is_required: $(this).find(".required-toggle").is(":checked"), options: [], }; // Only add options if the question type supports them if ( questionType === "multiple-choice" || questionType === "checkboxes" || questionType === "dropdown" ) { $(this) .find(".option-label") .each(function () { questionData.options.push($(this).val()); }); } formData.questions.push(questionData); }); console.log(formData); return formData; } function validateFormData(formData) { for (let question of formData.questions) { if (!question.text.trim()) { return { isValid: false, message: "All questions must have text." }; } if ( (question.type === "multiple-choice" || question.type === "checkboxes" || question.type === "dropdown") && question.options.length === 0 ) { return { isValid: false, message: "All options-based questions must have at least one option.", }; } for (let option of question.options) { if (!option.trim()) { return { isValid: false, message: "All options must have text." }; } } } return { isValid: true }; } $("#submit-btn").on("click", function () { let formData = collectFormData(); console.log(formData); let validation = validateFormData(formData); if (!validation.isValid) { alert(validation.message); return; } $.ajax({ url: base_url + "New_form_controller/submit_form", type: "POST", data: { formData: formData }, dataType: "JSON", success: function (response) { if (response.status === "success") { Swal.fire({ title: "Success!", text: "Form submitted successfully!", icon: "success", confirmButtonText: "OK", }).then((result) => { window.location.href = base_url; }); } else { Swal.fire({ title: "Error!", text: response.message, icon: "error", confirmButtonText: "OK", }); console.log(response); } }, error: function (error) { Swal.fire({ title: "Error!", text: "Error submitting form!", icon: "error", confirmButtonText: "OK", width: "400px", height: "300px", padding: "auto", }).then((result) => { if (result.isConfirmed) { window.location.href = home; } }); console.log(error); }, }); }); $("#form-container").disableSelection(); });