Spaces:
Sleeping
Sleeping
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 = `
|