body {
font-family: ‘Arial’, sans-serif;
line-height: 1.6;
max-width: 100%;
margin: 0 auto;
padding: 20px;
color: #333;
}
h1, h2 {
color: #0066cc;
text-align: center;
}
.intro {
background-color: #f0f8ff;
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
}
.question-container {
margin-bottom: 20px;
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
background-color: #f9f9f9;
}
.options {
margin-top: 10px;
}
button {
background-color: #0066cc;
color: white;
border: none;
padding: 10px 15px;
border-radius: 5px;
cursor: pointer;
margin-top: 10px;
}
button:hover {
background-color: #004c99;
}
input[type=”text”] {
width: 100%;
padding: 8px;
margin-top: 5px;
border: 1px solid #ddd;
border-radius: 4px;
}
.result-section {
display: none;
text-align: center;
margin-top: 20px;
}
.badge {
border: 2px solid #0066cc;
padding: 20px;
margin: 20px auto;
text-align: center;
background-color: #f0f8ff;
max-width: 500px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
border-radius: 10px;
}
.progress-container {
width: 100%;
background-color: #ddd;
margin-bottom: 20px;
border-radius: 5px;
}
.progress-bar {
height: 20px;
background-color: #0066cc;
border-radius: 5px;
width: 0%;
text-align: center;
line-height: 20px;
color: white;
}
.controls {
display: flex;
justify-content: center;
margin-top: 15px;
}
#email-form {
margin-top: 20px;
display: none;
}
.stamp {
width: 100px;
height: 100px;
border: 2px solid #0066cc;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 20px auto;
background-color: #e6f0ff;
font-weight: bold;
color: #0066cc;
transform: rotate(-15deg);
}
#badge {
border: 5px solid #0066cc;
border-radius: 10px;
padding: 20px;
max-width: 800px;
margin: 20px auto;
background-color: #f9f9f9;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
position: relative;
}
#grade-stamp {
position: absolute;
top: 20px;
right: 20px;
width: 60px;
height: 60px;
background-color: #e63946;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
font-weight: bold;
border: 3px solid #333;
transform: rotate(15deg);
}
#email-status {
padding: 10px;
background-color: #dff0d8;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
margin-top: 15px;
display: none;
}
.certificate-header {
text-align: center;
margin-bottom: 20px;
}
.certificate-header h2 {
color: #0066cc;
font-size: 28px;
margin-bottom: 5px;
}
.certificate-header p {
font-style: italic;
color: #666;
}
.certificate-body {
margin: 20px 0;
text-align: center;
}
.certificate-signature {
margin-top: 40px;
text-align: center;
}
.signature-line {
width: 200px;
height: 1px;
background-color: #333;
margin: 10px auto;
}
/* Estilo para el temporizador */
.timer-container {
position: fixed;
top: 10px;
right: 10px;
background-color: #0066cc;
color: white;
padding: 10px 15px;
border-radius: 5px;
font-size: 18px;
font-weight: bold;
z-index: 1000;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.timer-warning {
background-color: #e63946;
animation: pulse 1s infinite;
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.7; }
100% { opacity: 1; }
}
Iniciar sesión para acceder al examen
Selecciona tu clase
Français 3ème A
Français 3ème B
Français 3ème C
Procesando…
¡Gracias! Ya puedes acceder al examen.
.aplenguas-login-form {
max-width: 100%;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.form-group input,
.form-group select {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
}
.btn-submit {
background-color: #4285f4;
color: white;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
}
#continuar {
background-color: #34a853;
color: white;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
margin-top: 10px;
}
Examen de Français A1, 3ème – Les Vacances et les Transports
Cette évaluation porte sur le vocabulaire des transports (publics et privés) et la conjugaison des verbes du premier et deuxième groupe. L’examen est noté sur 100 points.
Important: Vous avez 50 minutes pour compléter cet examen. Une fois le temps écoulé, l’examen se fermera automatiquement.
Résultats de l’évaluation
Nom:
Prénom:
Score: /100
Commentaire:
Certificat de Réussite
Aplenguas – Évaluation de Français
Ce certificat atteste que
a complété avec succès l’évaluation de français avec un score de
sur un total de 100 points
Signature du professeur
Envoyer le certificat par email
// Script para el formulario de inicio de sesión
const SCRIPT_URL = ‘https://script.google.com/macros/s/AKfycbzxYTLfaRuvekZR0RsNfLSxEcZ3pkH5o5yVyBSTUnOfqAFURFvQB1ATcEChHyzjAuW-/exec’;
document.getElementById(‘login-form’).addEventListener(‘submit’, function(e) {
e.preventDefault();
const email = document.getElementById(‘email’).value;
const nombre = document.getElementById(‘nombre’).value;
const curso = document.getElementById(‘curso’).value;
// Validar que se haya seleccionado un curso
if (!curso) {
alert(‘Por favor, selecciona tu clase’);
return;
}
// Mostrar estado de procesamiento
document.getElementById(‘estado-envio’).style.display = ‘block’;
document.getElementById(‘mensaje-estado’).innerText = ‘Enviando datos…’;
// Guardar los datos localmente
sessionStorage.setItem(‘student_email’, email);
sessionStorage.setItem(‘student_name’, nombre);
sessionStorage.setItem(‘student_course’, curso);
// Enviar datos al servidor usando fetch
const formData = new FormData();
formData.append(‘email’, email);
formData.append(‘nombre’, nombre);
formData.append(‘curso’, curso);
formData.append(‘accion’, ‘iniciar’); // Indica que es inicio de sesión
fetch(SCRIPT_URL, {
method: ‘POST’,
body: formData,
mode: ‘no-cors’
})
.then(response => {
// No podemos acceder a la respuesta debido a no-cors,
// pero asumimos que funcionó si no hubo errores
document.getElementById(‘login-form’).style.display = ‘none’;
document.getElementById(‘mensaje-confirmacion’).style.display = ‘block’;
document.getElementById(‘estado-envio’).style.display = ‘none’;
})
.catch(error => {
console.error(‘Error:’, error);
document.getElementById(‘mensaje-estado’).innerText = ‘Error al enviar datos’;
document.getElementById(‘detalles-error’).innerText = error.message;
document.getElementById(‘detalles-error’).style.display = ‘block’;
});
});
document.getElementById(‘continuar’).addEventListener(‘click’, function() {
document.querySelector(‘.aplenguas-login-form’).style.display = ‘none’;
document.getElementById(‘contenido-ejercicio’).style.display = ‘block’;
});
// Variables globales para el examen
let currentQuestionIndex = 0;
let userAnswers = [];
let questionOrder = [];
let studentData = {};
let timerInterval;
let examTimeInSeconds = 50 * 60; // 50 minutos en segundos
let timeRemaining = examTimeInSeconds;
// Las preguntas de la evaluación
const questionsData = [
// Parte 1: Vocabulario de los transportes públicos
{
type: “qcm”,
question: “Quel moyen de transport public peut-on prendre pour voyager entre deux villes?”,
options: [“Un train”, “Une voiture personnelle”, “Un vélo”, “Un skateboard”],
correct: 0,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Comment s’appelle le transport public qui circule sous terre dans les grandes villes?”,
options: [“Le taxi”, “Le bus”, “Le métro”, “Le tramway”],
correct: 2,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Où peut-on prendre l’avion?”,
options: [“À la gare”, “À l’aéroport”, “Au port”, “À la station de bus”],
correct: 1,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Quel document est nécessaire pour voyager en train?”,
options: [“Un permis de conduire”, “Un passeport”, “Un billet”, “Une carte d’identité”],
correct: 2,
category: “Transport public”,
points: 2.5
},
{
type: “text”,
question: “Comment s’appelle le moyen de transport public qui circule sur des rails dans la ville? (Commençant par T)”,
correct: “tramway”,
category: “Transport public”,
points: 2.5
},
{
type: “text”,
question: “Je vais à l’________ pour prendre l’avion.”,
correct: “aéroport”,
category: “Transport public”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Je prends le train à l’aéroport.”,
“Je prends l’avion à la gare.”,
“Je prends le métro à la station.”,
“Je prends le bateau à la boulangerie.”
],
correct: 2,
category: “Transport public”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Le bus arrive à la plage.”,
“Le train arrive à la gare.”,
“L’avion arrive à la piscine.”,
“Le métro arrive à la mer.”
],
correct: 1,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Comment appelle-t-on la personne qui conduit un bus?”,
options: [“Un pilote”, “Un chauffeur”, “Un conducteur de train”, “Un capitaine”],
correct: 1,
category: “Transport public”,
points: 2.5
},
{
type: “text”,
question: “Pour aller à l’école, je prends le _____ qui passe près de chez moi.”,
correct: “bus”,
category: “Transport public”,
points: 2.5
},
// Parte 2: Vocabulario de los transportes privados
{
type: “qcm”,
question: “Quel véhicule privé a deux roues et un moteur?”,
options: [“Une voiture”, “Un vélo”, “Une moto”, “Un bus”],
correct: 2,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Qu’est-ce qui est nécessaire pour conduire une voiture?”,
options: [“Un billet”, “Un permis de conduire”, “Un passeport”, “Une carte d’étudiant”],
correct: 1,
category: “Transport privé”,
points: 2.5
},
{
type: “text”,
question: “Ma _______ est garée dans le garage.”,
correct: “voiture”,
category: “Transport privé”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Je conduis mon train à l’école.”,
“Je conduis ma voiture au travail.”,
“Je conduis mon métro au parc.”,
“Je conduis mon avion à la plage.”
],
correct: 1,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Quel véhicule privé n’a pas de moteur?”,
options: [“Une voiture”, “Une moto”, “Un vélo”, “Un scooter”],
correct: 2,
category: “Transport privé”,
points: 2.5
},
{
type: “text”,
question: “Pour faire du sport, je préfère utiliser mon _____.”,
correct: “vélo”,
category: “Transport privé”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“J’achète de l’essence pour mon vélo.”,
“J’achète un billet pour ma voiture.”,
“J’achète de l’essence pour ma voiture.”,
“J’achète un ticket pour ma moto.”
],
correct: 2,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Qu’est-ce qui protège la tête quand on fait de la moto?”,
options: [“Des gants”, “Un casque”, “Des lunettes”, “Une écharpe”],
correct: 1,
category: “Transport privé”,
points: 2.5
},
{
type: “text”,
question: “Je mets ma _______ dans le garage pour la nuit.”,
correct: “voiture”,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Quel véhicule peut transporter toute la famille?”,
options: [“Une moto”, “Un vélo”, “Un scooter”, “Une voiture”],
correct: 3,
category: “Transport privé”,
points: 2.5
},
// Parte 3: Conjugación de los verbos del 1er grupo
{
type: “text”,
question: “Je _____ (voyager) en train.”,
correct: “voyage”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Vous _____ (parler) français.”,
correct: “parlez”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Nous _____ (visiter) Paris.”,
correct: “visitons”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Tu parlent anglais.”,
“Tu parlez anglais.”,
“Tu parle anglais.”,
“Tu parles anglais.”
],
correct: 3,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Ils mangent au restaurant.”,
“Ils mange au restaurant.”,
“Ils manges au restaurant.”,
“Ils mangeons au restaurant.”
],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Elle _____ (aimer) voyager en avion.”,
correct: “aime”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘regarder’ à la première personne du pluriel?”,
options: [“regardons”, “regardez”, “regardent”, “regarde”],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘réserver’ à la deuxième personne du singulier?”,
options: [“réserves”, “réservez”, “réserve”, “réservons”],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Je monte dans le bus.”,
“Je montes dans le bus.”,
“Je montez dans le bus.”,
“Je montons dans le bus.”
],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Elles _____ (écouter) de la musique pendant le voyage.”,
correct: “écoutent”,
category: “Verbes 1er groupe”,
points: 2.5
},
// Parte 4: Conjugación de los verbos del 2º grupo
{
type: “text”,
question: “Je _____ (finir) mes devoirs.”,
correct: “finis”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “text”,
question: “Nous _____ (choisir) un hôtel.”,
correct: “choisissons”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “text”,
question: “Vous _____ (réussir) votre examen.”,
correct: “réussissez”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Ils finit leur repas.”,
“Ils finissent leur repas.”,
“Ils finis leur repas.”,
“Ils finissons leur repas.”
],
correct: 1,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Elle choisit un livre.”,
“Elle choisie un livre.”,
“Elle choisis un livre.”,
“Elle choisissent un livre.”
],
correct: 0,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘grandir’ à la troisième personne du pluriel?”,
options: [“grandissent”, “grandissez”, “grandit”, “grandis”],
correct: 0,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘réfléchir’ à la première personne du singulier?”,
options: [“réfléchissons”, “réfléchit”, “réfléchis”, “réfléchissez”],
correct: 2,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “text”,
question: “Tu _____ (réussir) à prendre le train à l’heure.”,
correct: “réussis”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Nous remplissez le formulaire.”,
“Nous remplis le formulaire.”,
“Nous remplit le formulaire.”,
“Nous remplissons le formulaire.”
],
correct: 3,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “qcm”,
question: “À quel groupe appartient le verbe ‘finir’?”,
options: [“Premier groupe”, “Deuxième groupe”, “Troisième groupe”, “Quatrième groupe”],
correct: 1,
category: “Distinction des groupes”,
points: 2.5
}
];
// Función para formatear el tiempo
function formatTime(seconds) {
const minutes = Math.floor(seconds / 60);
const secs = seconds % 60;
return `${minutes.toString().padStart(2, ‘0’)}:${secs.toString().padStart(2, ‘0’)}`;
}
// Iniciar el temporizador
function startTimer() {
document.getElementById(‘timer-container’).style.display = ‘block’;
timerInterval = setInterval(function() {
timeRemaining–;
// Actualizar el display del temporizador
document.getElementById(‘timer’).textContent = formatTime(timeRemaining);
// Advertencia cuando queden menos de 5 minutos
if (timeRemaining <= 300) {
document.getElementById('timer-container').classList.add('timer-warning');
}
// Finalizar el examen cuando se acabe el tiempo
if (timeRemaining i);
for (let i = questionOrder.length – 1; i > 0; i–) {
const j = Math.floor(Math.random() * (i + 1));
[questionOrder[i], questionOrder[j]] = [questionOrder[j], questionOrder[i]];
}
// Inicializar respuestas
userAnswers = Array(questionsData.length).fill(null);
// Mostrar primera pregunta
showQuestion(0);
// Iniciar temporizador
startTimer();
}
// Función para mostrar una pregunta
function showQuestion(index) {
if (index >= questionOrder.length) {
// Si no hay más preguntas, finalizar el examen
endExam();
return;
}
currentQuestionIndex = index;
const questionIdx = questionOrder[index];
const question = questionsData[questionIdx];
// Actualizar barra de progreso
const progressPercentage = Math.round((index / questionOrder.length) * 100);
document.querySelector(‘.progress-bar’).style.width = `${progressPercentage}%`;
document.querySelector(‘.progress-bar’).textContent = `${progressPercentage}%`;
// Construir HTML de la pregunta
let questionHTML = `
Question ${index + 1}/${questionOrder.length} (${question.points} pts)
Catégorie: ${question.category}
${question.question}
`;
// Añadir opciones según el tipo de pregunta
if (question.type === ‘qcm’ || question.type === ‘choix_phrase’) {
questionHTML += ‘
‘;
} else if (question.type === ‘text’) {
const value = userAnswers[questionIdx] || ”;
questionHTML += `
`;
}
questionHTML += ‘
‘;
// Mostrar la pregunta en el área correspondiente
document.getElementById(‘question-area’).innerHTML = questionHTML;
// Añadir eventos a los inputs
if (question.type === ‘qcm’ || question.type === ‘choix_phrase’) {
const radioInputs = document.querySelectorAll(‘input[type=”radio”]’);
radioInputs.forEach(input => {
input.addEventListener(‘change’, function() {
userAnswers[questionIdx] = parseInt(this.value);
});
});
} else if (question.type === ‘text’) {
const textInput = document.getElementById(‘text-answer’);
textInput.addEventListener(‘input’, function() {
userAnswers[questionIdx] = this.value;
});
// Enfocar en el input de texto
textInput.focus();
}
}
// Función para ir a la siguiente pregunta
function nextQuestion() {
// Guardar respuesta actual
const questionIdx = questionOrder[currentQuestionIndex];
if (questionsData[questionIdx].type === ‘text’) {
const textAnswer = document.getElementById(‘text-answer’).value;
userAnswers[questionIdx] = textAnswer;
} else {
const selectedOption = document.querySelector(‘input[name=”answer”]:checked’);
if (selectedOption) {
userAnswers[questionIdx] = parseInt(selectedOption.value);
}
}
// Ir a la siguiente pregunta
showQuestion(currentQuestionIndex + 1);
}
// Función para calcular la puntuación
function calculateScore() {
let totalScore = 0;
for (let i = 0; i = 90) feedback = “Excellent! Tu maîtrises très bien le vocabulaire et la conjugaison.”;
else if (score >= 75) feedback = “Très bien! Tu as une bonne compréhension des concepts.”;
else if (score >= 60) feedback = “Bien! Continue à pratiquer pour améliorer tes connaissances.”;
else if (score >= 50) feedback = “Passable. Tu dois réviser davantage le vocabulaire et la conjugaison.”;
else feedback = “Insuffisant. Il est nécessaire de revoir les concepts de base.”;
document.getElementById(‘feedback’).textContent = feedback;
// Completar el certificado
document.getElementById(‘cert-nom’).textContent = lastName;
document.getElementById(‘cert-prenom’).textContent = firstName;
document.getElementById(‘cert-score’).textContent = score + “/100″;
// Agregar calificación al sello
const gradeElement = document.getElementById(‘grade-stamp’);
let grade = ”;
if (score >= 90) grade = ‘A’;
else if (score >= 75) grade = ‘B’;
else if (score >= 60) grade = ‘C’;
else if (score >= 50) grade = ‘D’;
else grade = ‘F’;
gradeElement.textContent = grade;
// Mostrar la fecha actual en el certificado
const date = new Date();
const options = { year: ‘numeric’, month: ‘long’, day: ‘numeric’ };
document.getElementById(‘cert-date’).textContent = date.toLocaleDateString(‘fr-FR’, options);
// Ocultar área de preguntas y controles
document.getElementById(‘question-area’).style.display = ‘none’;
document.querySelector(‘.controls’).style.display = ‘none’;
document.querySelector(‘.progress-container’).style.display = ‘none’;
// Mostrar sección de resultados
document.getElementById(‘result-section’).style.display = ‘block’;
// Enviar resultado al servidor
sendResultToServer(firstName, lastName, score);
}
// Función para enviar resultados al servidor
function sendResultToServer(firstName, lastName, score) {
const email = sessionStorage.getItem(‘student_email’) || ”;
const course = sessionStorage.getItem(‘student_course’) || ”;
const formData = new FormData();
formData.append(‘email’, email);
formData.append(‘nombre’, firstName + ‘ ‘ + lastName);
formData.append(‘curso’, course);
formData.append(‘puntaje’, score);
formData.append(‘accion’, ‘finalizar’);
fetch(SCRIPT_URL, {
method: ‘POST’,
body: formData,
mode: ‘no-cors’
})
.catch(error => {
console.error(‘Error al enviar resultados:’, error);
});
}
// Función para descargar el certificado como PDF
function downloadCertificate() {
const { jspdf } = window.jspdf;
const badge = document.getElementById(‘badge’);
html2canvas(badge).then(canvas => {
const imgData = canvas.toDataURL(‘image/png’);
const pdf = new jspdf.jsPDF({
orientation: ‘landscape’,
unit: ‘mm’,
format: ‘a4’
});
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
const imgWidth = canvas.width;
const imgHeight = canvas.height;
const ratio = Math.min(pdfWidth / imgWidth, pdfHeight / imgHeight);
const imgX = (pdfWidth – imgWidth * ratio) / 2;
const imgY = 30;
pdf.addImage(imgData, ‘PNG’, imgX, imgY, imgWidth * ratio, imgHeight * ratio);
pdf.save(‘certificat_francais.pdf’);
});
}
// Función para mostrar el formulario de email
function showEmailForm() {
document.getElementById(‘email-form’).style.display = ‘block’;
document.getElementById(‘show-email-form’).style.display = ‘none’;
}
// Función para enviar el certificado por email
function sendCertificateByEmail() {
const recipientEmail = document.getElementById(‘recipient-email’).value;
if (!recipientEmail) {
alert(‘Veuillez saisir une adresse e-mail valide.’);
return;
}
const statusElement = document.getElementById(‘email-status’);
statusElement.textContent = ‘Envoi en cours…’;
statusElement.style.display = ‘block’;
// Aquí normalmente iría el código para enviar el email, pero como este es un ejercicio,
// simplemente simulamos una respuesta exitosa
setTimeout(() => {
statusElement.textContent = ‘Certificat envoyé avec succès!’;
statusElement.style.backgroundColor = ‘#dff0d8’;
statusElement.style.color = ‘#3c763d’;
}, 2000);
}
// Event listeners
document.addEventListener(‘DOMContentLoaded’, function() {
// Evento para iniciar el examen
document.getElementById(‘start-btn’).addEventListener(‘click’, startExam);
// Evento para ir a la siguiente pregunta
document.getElementById(‘next-btn’).addEventListener(‘click’, nextQuestion);
// Evento para descargar el certificado
document.getElementById(‘download-badge’).addEventListener(‘click’, downloadCertificate);
// Evento para mostrar el formulario de email
document.getElementById(‘show-email-form’).addEventListener(‘click’, showEmailForm);
// Evento para enviar el certificado por email
document.getElementById(‘send-email’).addEventListener(‘click’, sendCertificateByEmail);
});