Spaces:
Running
Running
Update templates/philosophie.html
Browse files- templates/philosophie.html +96 -31
templates/philosophie.html
CHANGED
@@ -553,44 +553,109 @@
|
|
553 |
// Appeler la fonction pour afficher les dissertations au chargement de la page
|
554 |
updateSavedDissertationsList();
|
555 |
|
556 |
-
//
|
557 |
-
|
558 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
559 |
|
560 |
-
|
561 |
-
navigator.clipboard.writeText(response)
|
562 |
-
.then(() => {
|
563 |
-
$(this).removeClass('scale-95 bg-violet-100')
|
564 |
-
.addClass('bg-green-50 text-green-700');
|
565 |
|
566 |
-
|
567 |
-
|
568 |
-
}, 1000);
|
569 |
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
});
|
576 |
-
})
|
577 |
-
.catch(() => {
|
578 |
-
$(this).removeClass('scale-95 bg-violet-100')
|
579 |
-
.addClass('bg-red-50 text-red-700');
|
580 |
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
590 |
});
|
591 |
-
|
592 |
-
|
593 |
|
|
|
594 |
// Ajout des styles d'animation personnalisés
|
595 |
const style = document.createElement('style');
|
596 |
style.textContent = `
|
|
|
553 |
// Appeler la fonction pour afficher les dissertations au chargement de la page
|
554 |
updateSavedDissertationsList();
|
555 |
|
556 |
+
// Nouvelle gestion de la copie
|
557 |
+
$('#copy-btn').click(function() {
|
558 |
+
// Sélectionner le contenu de la réponse en utilisant innerHTML pour obtenir le HTML formaté
|
559 |
+
const responseDiv = document.querySelector('#response > div');
|
560 |
+
let textToCopy = '';
|
561 |
+
|
562 |
+
// Créer un élément temporaire pour convertir le HTML en texte brut tout en préservant le formatage
|
563 |
+
const temp = document.createElement('div');
|
564 |
+
temp.innerHTML = responseDiv.innerHTML;
|
565 |
+
|
566 |
+
// Fonction récursive pour extraire le texte en préservant les sauts de ligne
|
567 |
+
function extractText(node) {
|
568 |
+
let text = '';
|
569 |
+
node.childNodes.forEach(child => {
|
570 |
+
if (child.nodeType === 3) { // Nœud texte
|
571 |
+
text += child.textContent;
|
572 |
+
} else if (child.nodeType === 1) { // Élément
|
573 |
+
// Ajouter des sauts de ligne pour les éléments de bloc
|
574 |
+
if (window.getComputedStyle(child).display === 'block') {
|
575 |
+
text += '\n';
|
576 |
+
}
|
577 |
+
text += extractText(child);
|
578 |
+
if (window.getComputedStyle(child).display === 'block') {
|
579 |
+
text += '\n';
|
580 |
+
}
|
581 |
+
}
|
582 |
+
});
|
583 |
+
return text;
|
584 |
+
}
|
585 |
|
586 |
+
textToCopy = extractText(temp).trim();
|
|
|
|
|
|
|
|
|
587 |
|
588 |
+
// Animation et copie
|
589 |
+
$(this).addClass('scale-95 bg-violet-100');
|
|
|
590 |
|
591 |
+
// Utiliser l'API Clipboard avec gestion des erreurs
|
592 |
+
navigator.clipboard.writeText(textToCopy)
|
593 |
+
.then(() => {
|
594 |
+
$(this).removeClass('scale-95 bg-violet-100')
|
595 |
+
.addClass('bg-green-50 text-green-700');
|
|
|
|
|
|
|
|
|
|
|
596 |
|
597 |
+
setTimeout(() => {
|
598 |
+
$(this).removeClass('bg-green-50 text-green-700');
|
599 |
+
}, 1000);
|
600 |
|
601 |
+
Toast.fire({
|
602 |
+
icon: 'success',
|
603 |
+
title: 'Copié avec succès',
|
604 |
+
text: 'Le contenu a été copié dans votre presse-papiers',
|
605 |
+
timer: 2000
|
606 |
+
});
|
607 |
+
})
|
608 |
+
.catch((err) => {
|
609 |
+
// Fallback pour les appareils mobiles qui ne supportent pas l'API Clipboard
|
610 |
+
try {
|
611 |
+
// Créer un élément textarea temporaire
|
612 |
+
const textarea = document.createElement('textarea');
|
613 |
+
textarea.value = textToCopy;
|
614 |
+
textarea.style.position = 'fixed'; // Évite le défilement
|
615 |
+
textarea.style.opacity = '0';
|
616 |
+
document.body.appendChild(textarea);
|
617 |
+
|
618 |
+
// Sélectionner et copier le texte
|
619 |
+
textarea.select();
|
620 |
+
document.execCommand('copy');
|
621 |
+
|
622 |
+
// Nettoyer
|
623 |
+
document.body.removeChild(textarea);
|
624 |
+
|
625 |
+
// Feedback positif
|
626 |
+
$(this).removeClass('scale-95 bg-violet-100')
|
627 |
+
.addClass('bg-green-50 text-green-700');
|
628 |
+
|
629 |
+
setTimeout(() => {
|
630 |
+
$(this).removeClass('bg-green-50 text-green-700');
|
631 |
+
}, 1000);
|
632 |
+
|
633 |
+
Toast.fire({
|
634 |
+
icon: 'success',
|
635 |
+
title: 'Copié avec succès',
|
636 |
+
timer: 2000
|
637 |
+
});
|
638 |
+
} catch (fallbackErr) {
|
639 |
+
// Si même le fallback échoue
|
640 |
+
$(this).removeClass('scale-95 bg-violet-100')
|
641 |
+
.addClass('bg-red-50 text-red-700');
|
642 |
+
|
643 |
+
setTimeout(() => {
|
644 |
+
$(this).removeClass('bg-red-50 text-red-700');
|
645 |
+
}, 1000);
|
646 |
+
|
647 |
+
Toast.fire({
|
648 |
+
icon: 'error',
|
649 |
+
title: 'Erreur de copie',
|
650 |
+
text: 'Impossible de copier le contenu',
|
651 |
+
timer: 3000
|
652 |
+
});
|
653 |
+
}
|
654 |
});
|
655 |
+
});
|
656 |
+
|
657 |
|
658 |
+
|
659 |
// Ajout des styles d'animation personnalisés
|
660 |
const style = document.createElement('style');
|
661 |
style.textContent = `
|