Docfile commited on
Commit
3854279
·
verified ·
1 Parent(s): 764fe47

Update templates/philosophie.html

Browse files
Files changed (1) hide show
  1. 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
- // Gestion de la copie avec retour visuel amélioré
557
- $('#copy-btn').click(function() {
558
- const response = $('#response').text();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
559
 
560
- $(this).addClass('scale-95 bg-violet-100');
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
- setTimeout(() => {
567
- $(this).removeClass('bg-green-50 text-green-700');
568
- }, 1000);
569
 
570
- Toast.fire({
571
- icon: 'success',
572
- title: 'Copié avec succès',
573
- text: 'Le contenu a été copié dans votre presse-papiers',
574
- timer: 2000
575
- });
576
- })
577
- .catch(() => {
578
- $(this).removeClass('scale-95 bg-violet-100')
579
- .addClass('bg-red-50 text-red-700');
580
 
581
- setTimeout(() => {
582
- $(this).removeClass('bg-red-50 text-red-700');
583
- }, 1000);
584
 
585
- Toast.fire({
586
- icon: 'error',
587
- title: 'Erreur de copie',
588
- text: 'Impossible de copier le contenu',
589
- timer: 3000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = `