// === SCROLL MENU === const pageLink = document.querySelectorAll('.menu-scroll'); pageLink.forEach((elem) => { elem.addEventListener('click', (e) => { e.preventDefault(); document.querySelector(elem.getAttribute('href')).scrollIntoView({ behavior: 'smooth', offsetTop: 1 - 60, }); }); }); // section menu active function onScroll(event) { const sections = document.querySelectorAll('.menu-scroll'); const scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; for (let i = 0; i < sections.length; i++) { const currLink = sections[i]; const val = currLink.getAttribute('href'); const refElement = document.querySelector(val); const scrollTopMinus = scrollPos + 73; if (refElement.offsetTop <= scrollTopMinus && refElement.offsetTop + refElement.offsetHeight > scrollTopMinus) { document.querySelector('.menu-scroll').classList.remove('active'); currLink.classList.add('active'); } else { currLink.classList.remove('active'); } } } window.document.addEventListener('scroll', onScroll); // === FOOTER DYNAMIC === // Sélectionnez le footer par son ID const footer = document.getElementById('leFooter'); // Fonction pour positionner le footer en bas de la page function positionFooter() { const windowHeight = window.innerHeight; const bodyHeight = document.body.clientHeight; const footerHeight = footer.clientHeight; if (bodyHeight < windowHeight) { footer.style.position = 'absolute'; footer.style.bottom = '0'; } else { footer.style.position = 'static'; } } // Appelez la fonction lors du chargement de la page et lorsque la fenêtre est redimensionnée window.addEventListener('load', positionFooter); window.addEventListener('resize', positionFooter); // === MODE SOMBRE +> LOCAL STORAGE === // Fonction pour lire la valeur du thème depuis localStorage function getThemeLocalStorage() { return localStorage.getItem('theme'); } // Fonction pour définir le thème dans localStorage function setThemeLocalStorage(theme) { localStorage.setItem('theme', theme); } // Fonction pour mettre à jour la classe sur le en fonction du thème function updateThemeClass() { const darkTogglerCheckbox = document.querySelector('#darkToggler'); const html = document.querySelector('html'); const theme = getThemeLocalStorage(); // Appliquer la classe en fonction de la valeur de localStorage if (theme === 'dark') { darkTogglerCheckbox.checked = true; html.classList.add('dark'); } else { darkTogglerCheckbox.checked = false; html.classList.remove('dark'); } } // Appeler la fonction d'initialisation de la gestion du thème updateThemeClass(); // Gérer le changement de thème lorsque l'utilisateur clique sur la case à cocher const darkTogglerCheckbox = document.querySelector('#darkToggler'); darkTogglerCheckbox.addEventListener('click', function () { if (darkTogglerCheckbox.checked) { setThemeLocalStorage('dark'); } else { setThemeLocalStorage('light'); } }); // === ENVOIE FORMULAIRE AVEC AJAX === // Attendre que le document soit prêt $(document).ready(function () { // Sélectionnez le formulaire de COMPARAISON par son ID $('#formulaire-comp').submit(function (e) { // Fait scroll une fois le formulaire envoyé $(document).ready(function () { // Sélectionnez le lien par son ID $('html, body').animate({ scrollTop: $('#resultat').offset().top }, 1000); // 1000 millisecondes (1 seconde) pour l'animation }); // Empêchez la soumission normale du formulaire e.preventDefault(); // Affiche le chargement $('#loading').removeClass('hidden'); $('#articleIntrouvable').addClass('hidden'); $('#articleContainer1').addClass('hidden'); $('#articleContainer2').addClass('hidden'); // Reste du code pour gérer la soumission du formulaire //console.log('Formulaire soumis !'); // Récupérez les valeurs des champs du formulaire const articleTitle1 = $('#articleTitle1').val(); const articleTitle2 = $('#articleTitle2').val(); // Créez un objet JavaScript avec les données à envoyer au serveur const formData = { articleTitle1: articleTitle1, articleTitle2: articleTitle2 }; // Utilisez AJAX pour envoyer les données au serveur $.ajax({ type: 'POST', url: '/search', data: formData, dataType: 'json', success: function (response) { console.log(response); $('#loading').addClass('hidden'); $('#articleIntrouvable').removeClass('hidden'); // Mettez à jour la section HTML avec les données reçues ici // Vérifiez si response.articleInfo1 existe et contient les informations nécessaires if (response.articleInfo1) { $('#articleInfo1Title').html(response.articleInfo1.title); // Article 1 $('#articleInfo1Title').html(response.articleInfo1.title); $('#articleInfo1url').attr('href', response.articleInfo1.url); $('#articleInfo1extract').html(response.articleInfo1.extract); $('#articleInfo1lastEdit').html(response.articleInfo1.lastEdit); $('#articleInfo1numRevisions').html(response.articleInfo1.numRevisions); $('#articleInfo1pageSize').html(response.articleInfo1.pageSize); $('#articleInfo1firstRevisionUser').html(response.articleInfo1.firstRevisionUser); $('#articleInfo1latestRevisionId').html(response.articleInfo1.latestRevisionId); $('#articleInfo1pageId').html(response.articleInfo1.pageId); $('#articleInfo1latestVersion').html(response.articleInfo1.latestVersion); $('#articleInfo1wordCount').html(response.articleInfo1.wordCount); $('#articleInfo1charCount').html(response.articleInfo1.charCount); $('#articleInfo1lastContributor').html(response.articleInfo1.lastContributor); $('#articleInfo1image').attr('href', response.articleInfo1.image); $('#articleInfo1image img').attr('src', response.articleInfo1.image); // Récupérez la valeur de l'image const articleInfo1ImageValue = response.articleInfo1.image; // Récupérez l'élément image par son ID const articleInfo1Image = document.getElementById("articleInfo1image"); if (articleInfo1ImageValue === "Non disponible") { // Si la valeur est "Non disponible", masquez l'élément articleInfo1Image.style.display = "none"; } else { // Sinon, affichez l'élément articleInfo1Image.style.display = "block"; // Vous pouvez utiliser "inline" si nécessaire // Assurez-vous de définir la source de l'image ici en fonction de votre logique articleInfo1Image.src = articleInfo1ImageValue; } const infoboxContainer1 = document.getElementById("infoboxcontainer1"); // Supprimer le contenu précédent de l'infobox while (infoboxContainer1.firstChild) { infoboxContainer1.removeChild(infoboxContainer1.firstChild); } // Ajouter les nouvelles informations pour articleInfo1 const infoboxData1 = response.articleInfo1.infobox; Object.entries(infoboxData1).forEach(([key, value]) => { const ligne = document.createElement("tr"); ligne.innerHTML = `