$(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() })