mirror of
https://github.com/olehomelchenko/minivlat-local-ua.git
synced 2025-12-21 21:22:24 +00:00
reorganize files
This commit is contained in:
80
public/js/questionnaire.js
Normal file
80
public/js/questionnaire.js
Normal file
@@ -0,0 +1,80 @@
|
||||
// This file handles the logic for the questionnaire, including collecting additional participant information after the quiz.
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const questionnaireForm = document.getElementById('questionnaire-form');
|
||||
|
||||
questionnaireForm.addEventListener('submit', function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
// Form validation
|
||||
const age = document.getElementById('age').value;
|
||||
if (age < 0 || age > 120) {
|
||||
showError('Please enter a valid age between 0 and 120');
|
||||
return;
|
||||
}
|
||||
|
||||
const participantData = {
|
||||
age: age,
|
||||
gender: document.getElementById('gender').value,
|
||||
education: document.getElementById('education').value,
|
||||
colorBlind: document.getElementById('color-blind').value,
|
||||
familiarity: document.getElementById('familiarity').value,
|
||||
englishLevel: document.getElementById('english-level').value,
|
||||
ukrainianLevel: document.getElementById('ukrainian-level').value,
|
||||
visualizationDifficulty: document.getElementById('visualization-difficulty').value,
|
||||
quizDifficulty: document.getElementById('quiz-difficulty').value,
|
||||
kseAffiliation: document.getElementById('kse-affiliation').value,
|
||||
comments: document.getElementById('comments').value
|
||||
};
|
||||
|
||||
// Disable form while submitting
|
||||
const submitButton = document.querySelector('button[type="submit"]');
|
||||
submitButton.disabled = true;
|
||||
|
||||
// Store participant data in local storage
|
||||
localStorage.setItem('participantData', JSON.stringify(participantData));
|
||||
|
||||
// Retrieve existing quiz data
|
||||
const allQuizzes = JSON.parse(localStorage.getItem('allQuizzes') || '{}');
|
||||
const quizId = 'quiz';
|
||||
if (allQuizzes[quizId]) {
|
||||
allQuizzes[quizId].participantData = participantData;
|
||||
allQuizzes[quizId].iterationVersion = 'v1.0.0'; // Add semantic versioning
|
||||
localStorage.setItem('allQuizzes', JSON.stringify(allQuizzes));
|
||||
}
|
||||
|
||||
// Send data to the backend
|
||||
fetch('/api/responses', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(allQuizzes)
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
console.log('Success:', data);
|
||||
window.location.href = 'results.html';
|
||||
} else {
|
||||
throw new Error(data.message || 'Failed to submit the form');
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
showError('Failed to submit the form. Please try again.');
|
||||
submitButton.disabled = false;
|
||||
});
|
||||
});
|
||||
|
||||
function showError(message) {
|
||||
const errorDiv = document.getElementById('error-message');
|
||||
errorDiv.textContent = message;
|
||||
errorDiv.style.display = 'block';
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user