Update templates/index.html
Browse files- templates/index.html +28 -27
templates/index.html
CHANGED
@@ -44,23 +44,23 @@
|
|
44 |
}
|
45 |
|
46 |
.upload-highlight {
|
47 |
-
border-color:
|
48 |
-
background-color: #e8f8f5;
|
49 |
}
|
50 |
</style>
|
51 |
</head>
|
52 |
<body class="bg-gray-50 text-gray-700 min-h-screen flex flex-col items-center py-6 px-4">
|
53 |
<div class="bg-white rounded-xl shadow-lg w-full max-w-2xl p-6 md:p-8">
|
54 |
-
<h1 class="flex items-center justify-center text-3xl font-bold text-center mb-2 text-primary-color">
|
55 |
-
<i class="fas fa-atom text-4xl mr-3 text-secondary-color"></i>
|
56 |
Solveur Expert IA
|
57 |
</h1>
|
58 |
<p class="text-center text-gray-500 mb-8">Solutions LaTeX précises pour Maths, Physique et Chimie.</p>
|
59 |
|
60 |
<!-- Zone de dépôt de fichier améliorée -->
|
61 |
-
<div id="upload-section" class="relative border-3 border-dashed border-gray-300 rounded-xl p-8 mb-6 cursor-pointer transition-all duration-300 bg-gray-50 text-center group hover:border-secondary-color">
|
62 |
<div class="upload-content">
|
63 |
-
<i class="fas fa-file-arrow-up text-5xl mb-4 text-secondary-color transition-transform duration-300 transform group-hover:scale-110 group-hover:-translate-y-1"></i>
|
64 |
<p class="text-lg font-medium mb-1">Déposez l'image de votre exercice ici</p>
|
65 |
<p class="text-sm text-gray-500">ou cliquez pour sélectionner un fichier (PNG, JPG)</p>
|
66 |
</div>
|
@@ -72,13 +72,13 @@
|
|
72 |
|
73 |
<!-- Options de formatage -->
|
74 |
<div class="bg-gray-50 rounded-xl p-5 mb-6 border border-gray-200">
|
75 |
-
<h3 class="flex items-center font-semibold text-primary-color mb-4">
|
76 |
-
<i class="fas fa-cogs mr-2 text-secondary-color"></i>Options de Formatage
|
77 |
</h3>
|
78 |
<div class="prompt-selector">
|
79 |
<label for="prompt-type" class="block font-medium mb-2">Style de la correction LaTeX :</label>
|
80 |
<div class="relative">
|
81 |
-
<select id="prompt-type" name="prompt-type" class="w-full p-3 pr-10 rounded-xl border-2 border-gray-300 appearance-none bg-white focus:outline-none focus:border-secondary-color focus:ring-2 focus:ring-secondary-color
|
82 |
<option value="refined">Format Raffiné & Complet (mise en page avancée)</option>
|
83 |
<option value="light">Format Léger & Essentiel (LaTeX standard)</option>
|
84 |
</select>
|
@@ -93,29 +93,34 @@
|
|
93 |
<button id="solve-button" class="gradient-primary w-full py-4 px-6 rounded-xl text-white font-semibold text-lg tracking-wide flex items-center justify-center disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-400 disabled:shadow-none transition duration-300 transform hover:translate-y-px disabled:transform-none" disabled>
|
94 |
<i class="fas fa-rocket mr-2"></i>Obtenir la Solution
|
95 |
</button>
|
|
|
|
|
|
|
|
|
|
|
96 |
|
97 |
<!-- Conteneur de résolution (initialement caché) -->
|
98 |
<div id="solving-container" class="hidden mt-8">
|
99 |
<!-- Section de statut -->
|
100 |
<div class="text-center mb-5">
|
101 |
-
<div id="status-message-element" class="flex items-center justify-center flex-wrap text-lg font-medium text-primary-color">
|
102 |
<i class="fas fa-hourglass-start mr-2"></i>Prêt à résoudre votre exercice...
|
103 |
</div>
|
104 |
</div>
|
105 |
|
106 |
<!-- Spinner de chargement -->
|
107 |
-
<div id="loading-spinner-element" class="hidden w-10 h-10 mx-auto my-6 border-4 border-gray-300 border-l-secondary-color rounded-full animate-spin-custom"></div>
|
108 |
|
109 |
<!-- Notice Telegram -->
|
110 |
-
<div class="flex items-center bg-blue-50 border-l-4 border-secondary-color p-4 rounded-xl my-6">
|
111 |
-
<i class="fab fa-telegram text-2xl text-secondary-color mr-3"></i>
|
112 |
<span>Une copie de la solution sera envoyée sur Telegram pour archivage.</span>
|
113 |
</div>
|
114 |
|
115 |
<!-- Conteneur de réponse -->
|
116 |
<div id="response-container-element" class="hidden mt-6 p-6 border border-gray-300 rounded-xl bg-white">
|
117 |
-
<h3 class="flex items-center font-semibold text-xl text-primary-color mb-4">
|
118 |
-
<i class="fas fa-file-code mr-3 text-secondary-color"></i>Correction LaTeX Détaillée :
|
119 |
</h3>
|
120 |
<div id="response-output" class="font-code bg-gray-900 text-gray-200 p-5 rounded-xl overflow-x-auto whitespace-pre-wrap word-break-word max-h-96 mb-5 border border-gray-700"></div>
|
121 |
<button id="copy-button" class="gradient-secondary px-6 py-3 rounded-xl text-white font-medium flex items-center justify-center transition duration-300 transform hover:translate-y-px">
|
@@ -124,14 +129,14 @@
|
|
124 |
</div>
|
125 |
|
126 |
<!-- Affichage des erreurs -->
|
127 |
-
<div id="error-display-element" class="hidden bg-red-50 border-2 border-accent-color text-accent-color p-4 rounded-xl my-5 font-medium">
|
128 |
<!-- Les erreurs seront affichées ici -->
|
129 |
</div>
|
130 |
</div>
|
131 |
</div>
|
132 |
|
133 |
<footer class="mt-12 mb-5 text-gray-500 text-sm">
|
134 |
-
Solutions générées par <a href="#" target="_blank" class="text-secondary-color font-medium hover:underline">Mariam IA</a> © 2025 - Précision garantie.
|
135 |
</footer>
|
136 |
|
137 |
<script>
|
@@ -163,17 +168,13 @@
|
|
163 |
|
164 |
['dragenter', 'dragover'].forEach(eventName => {
|
165 |
uploadSection.addEventListener(eventName, () => {
|
166 |
-
uploadSection.classList.add('upload-highlight');
|
167 |
-
uploadSection.classList.add('border-secondary-color');
|
168 |
-
uploadSection.classList.add('bg-green-50');
|
169 |
}, false);
|
170 |
});
|
171 |
|
172 |
['dragleave', 'drop'].forEach(eventName => {
|
173 |
uploadSection.addEventListener(eventName, () => {
|
174 |
uploadSection.classList.remove('upload-highlight');
|
175 |
-
uploadSection.classList.remove('border-secondary-color');
|
176 |
-
uploadSection.classList.remove('bg-green-50');
|
177 |
}, false);
|
178 |
});
|
179 |
|
@@ -336,7 +337,7 @@
|
|
336 |
const selectedPromptText = promptTypeSelect.options[promptTypeSelect.selectedIndex].text.split('(')[0].trim();
|
337 |
let statusMsg = overrideMessage || '';
|
338 |
let iconClass = 'fas fa-hourglass-start';
|
339 |
-
let iconColor = 'var(--primary-color)';
|
340 |
|
341 |
if (!overrideMessage) {
|
342 |
switch(status) {
|
@@ -344,10 +345,10 @@
|
|
344 |
case 'processing': statusMsg = "L'IA déchiffre votre exercice..."; iconClass = 'fas fa-brain'; iconColor = 'var(--secondary-color)'; break;
|
345 |
case 'generating_latex': statusMsg = "Construction de la solution LaTeX..."; iconClass = 'fas fa-scroll'; break;
|
346 |
case 'cleaning_latex': statusMsg = "Peaufinage du code LaTeX..."; iconClass = 'fas fa-magic'; break;
|
347 |
-
case 'generating_pdf': statusMsg = "Compilation du document PDF final..."; iconClass = 'fas fa-file-pdf'; iconColor = '
|
348 |
case 'completed': statusMsg = "Solution Complète et Précise Générée !"; iconClass = 'fas fa-check-double'; iconColor = 'var(--success-color)'; break;
|
349 |
case 'completed_tex_only': statusMsg = "Solution LaTeX Précise Générée ! (PDF non requis/dispo)"; iconClass = 'fas fa-check-circle'; iconColor = 'var(--success-color)'; break;
|
350 |
-
case 'pdf_error': statusMsg = "Solution LaTeX Précise Générée ! (Erreur PDF)"; iconClass = 'fas fa-file-excel'; iconColor = '#f39c12'; break;
|
351 |
case 'error': statusMsg = "Une anomalie technique est survenue."; iconClass = 'fas fa-times-circle'; iconColor = 'var(--accent-color)'; break;
|
352 |
case 'error_user': statusMsg = "Veuillez vérifier votre image."; iconClass = 'fas fa-exclamation-triangle'; iconColor = 'var(--accent-color)'; break;
|
353 |
default: statusMsg = `Progression: ${status}`; iconClass = 'fas fa-spinner fa-spin';
|
@@ -364,7 +365,7 @@
|
|
364 |
|
365 |
function escapeHtml(unsafe) {
|
366 |
if (typeof unsafe !== 'string') return '';
|
367 |
-
return unsafe.replace(/&/g, "&
|
368 |
}
|
369 |
|
370 |
copyButton.addEventListener('click', () => {
|
@@ -374,7 +375,7 @@
|
|
374 |
const originalText = copyButton.childNodes[1] ? copyButton.childNodes[1].nodeValue : ' Copier le code LaTeX';
|
375 |
copyButton.innerHTML = `<i class="fas fa-check mr-2"></i> Code Copié !`;
|
376 |
copyButton.classList.remove('gradient-secondary');
|
377 |
-
copyButton.style.backgroundColor = 'var(--success-color)';
|
378 |
|
379 |
setTimeout(() => {
|
380 |
copyButton.innerHTML = `<i class="${originalIcon} mr-2"></i>${originalText}`;
|
|
|
44 |
}
|
45 |
|
46 |
.upload-highlight {
|
47 |
+
border-color: var(--secondary-color); /* Use variable directly */
|
48 |
+
background-color: #e8f8f5; /* Or a light version of secondary: var(--secondary-color) with opacity */
|
49 |
}
|
50 |
</style>
|
51 |
</head>
|
52 |
<body class="bg-gray-50 text-gray-700 min-h-screen flex flex-col items-center py-6 px-4">
|
53 |
<div class="bg-white rounded-xl shadow-lg w-full max-w-2xl p-6 md:p-8">
|
54 |
+
<h1 class="flex items-center justify-center text-3xl font-bold text-center mb-2 text-[var(--primary-color)]">
|
55 |
+
<i class="fas fa-atom text-4xl mr-3 text-[var(--secondary-color)]"></i>
|
56 |
Solveur Expert IA
|
57 |
</h1>
|
58 |
<p class="text-center text-gray-500 mb-8">Solutions LaTeX précises pour Maths, Physique et Chimie.</p>
|
59 |
|
60 |
<!-- Zone de dépôt de fichier améliorée -->
|
61 |
+
<div id="upload-section" class="relative border-3 border-dashed border-gray-300 rounded-xl p-8 mb-6 cursor-pointer transition-all duration-300 bg-gray-50 text-center group hover:border-[var(--secondary-color)]">
|
62 |
<div class="upload-content">
|
63 |
+
<i class="fas fa-file-arrow-up text-5xl mb-4 text-[var(--secondary-color)] transition-transform duration-300 transform group-hover:scale-110 group-hover:-translate-y-1"></i>
|
64 |
<p class="text-lg font-medium mb-1">Déposez l'image de votre exercice ici</p>
|
65 |
<p class="text-sm text-gray-500">ou cliquez pour sélectionner un fichier (PNG, JPG)</p>
|
66 |
</div>
|
|
|
72 |
|
73 |
<!-- Options de formatage -->
|
74 |
<div class="bg-gray-50 rounded-xl p-5 mb-6 border border-gray-200">
|
75 |
+
<h3 class="flex items-center font-semibold text-[var(--primary-color)] mb-4">
|
76 |
+
<i class="fas fa-cogs mr-2 text-[var(--secondary-color)]"></i>Options de Formatage
|
77 |
</h3>
|
78 |
<div class="prompt-selector">
|
79 |
<label for="prompt-type" class="block font-medium mb-2">Style de la correction LaTeX :</label>
|
80 |
<div class="relative">
|
81 |
+
<select id="prompt-type" name="prompt-type" class="w-full p-3 pr-10 rounded-xl border-2 border-gray-300 appearance-none bg-white focus:outline-none focus:border-[var(--secondary-color)] focus:ring-2 focus:ring-[var(--secondary-color)]/20 transition-all">
|
82 |
<option value="refined">Format Raffiné & Complet (mise en page avancée)</option>
|
83 |
<option value="light">Format Léger & Essentiel (LaTeX standard)</option>
|
84 |
</select>
|
|
|
93 |
<button id="solve-button" class="gradient-primary w-full py-4 px-6 rounded-xl text-white font-semibold text-lg tracking-wide flex items-center justify-center disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-gray-400 disabled:shadow-none transition duration-300 transform hover:translate-y-px disabled:transform-none" disabled>
|
94 |
<i class="fas fa-rocket mr-2"></i>Obtenir la Solution
|
95 |
</button>
|
96 |
+
|
97 |
+
<!-- Bouton rejoindre Telegram -->
|
98 |
+
<a href="https://t.me/+ic4zemy1E1k0MzQ0" target="_blank" id="telegram-join-button" class="mt-4 w-full bg-blue-500 hover:bg-blue-600 text-white font-semibold py-3 px-6 rounded-xl flex items-center justify-center transition duration-300 transform hover:translate-y-px">
|
99 |
+
<i class="fab fa-telegram-plane mr-2"></i>Rejoindre le groupe Telegram
|
100 |
+
</a>
|
101 |
|
102 |
<!-- Conteneur de résolution (initialement caché) -->
|
103 |
<div id="solving-container" class="hidden mt-8">
|
104 |
<!-- Section de statut -->
|
105 |
<div class="text-center mb-5">
|
106 |
+
<div id="status-message-element" class="flex items-center justify-center flex-wrap text-lg font-medium text-[var(--primary-color)]">
|
107 |
<i class="fas fa-hourglass-start mr-2"></i>Prêt à résoudre votre exercice...
|
108 |
</div>
|
109 |
</div>
|
110 |
|
111 |
<!-- Spinner de chargement -->
|
112 |
+
<div id="loading-spinner-element" class="hidden w-10 h-10 mx-auto my-6 border-4 border-gray-300 border-l-[var(--secondary-color)] rounded-full animate-spin-custom"></div>
|
113 |
|
114 |
<!-- Notice Telegram -->
|
115 |
+
<div class="flex items-center bg-blue-50 border-l-4 border-[var(--secondary-color)] p-4 rounded-xl my-6">
|
116 |
+
<i class="fab fa-telegram text-2xl text-[var(--secondary-color)] mr-3"></i>
|
117 |
<span>Une copie de la solution sera envoyée sur Telegram pour archivage.</span>
|
118 |
</div>
|
119 |
|
120 |
<!-- Conteneur de réponse -->
|
121 |
<div id="response-container-element" class="hidden mt-6 p-6 border border-gray-300 rounded-xl bg-white">
|
122 |
+
<h3 class="flex items-center font-semibold text-xl text-[var(--primary-color)] mb-4">
|
123 |
+
<i class="fas fa-file-code mr-3 text-[var(--secondary-color)]"></i>Correction LaTeX Détaillée :
|
124 |
</h3>
|
125 |
<div id="response-output" class="font-code bg-gray-900 text-gray-200 p-5 rounded-xl overflow-x-auto whitespace-pre-wrap word-break-word max-h-96 mb-5 border border-gray-700"></div>
|
126 |
<button id="copy-button" class="gradient-secondary px-6 py-3 rounded-xl text-white font-medium flex items-center justify-center transition duration-300 transform hover:translate-y-px">
|
|
|
129 |
</div>
|
130 |
|
131 |
<!-- Affichage des erreurs -->
|
132 |
+
<div id="error-display-element" class="hidden bg-red-50 border-2 border-[var(--accent-color)] text-[var(--accent-color)] p-4 rounded-xl my-5 font-medium">
|
133 |
<!-- Les erreurs seront affichées ici -->
|
134 |
</div>
|
135 |
</div>
|
136 |
</div>
|
137 |
|
138 |
<footer class="mt-12 mb-5 text-gray-500 text-sm">
|
139 |
+
Solutions générées par <a href="#" target="_blank" class="text-[var(--secondary-color)] font-medium hover:underline">Mariam IA</a> © 2025 - Précision garantie.
|
140 |
</footer>
|
141 |
|
142 |
<script>
|
|
|
168 |
|
169 |
['dragenter', 'dragover'].forEach(eventName => {
|
170 |
uploadSection.addEventListener(eventName, () => {
|
171 |
+
uploadSection.classList.add('upload-highlight'); // This class is defined in <style>
|
|
|
|
|
172 |
}, false);
|
173 |
});
|
174 |
|
175 |
['dragleave', 'drop'].forEach(eventName => {
|
176 |
uploadSection.addEventListener(eventName, () => {
|
177 |
uploadSection.classList.remove('upload-highlight');
|
|
|
|
|
178 |
}, false);
|
179 |
});
|
180 |
|
|
|
337 |
const selectedPromptText = promptTypeSelect.options[promptTypeSelect.selectedIndex].text.split('(')[0].trim();
|
338 |
let statusMsg = overrideMessage || '';
|
339 |
let iconClass = 'fas fa-hourglass-start';
|
340 |
+
let iconColor = 'var(--primary-color)'; // Uses CSS variable
|
341 |
|
342 |
if (!overrideMessage) {
|
343 |
switch(status) {
|
|
|
345 |
case 'processing': statusMsg = "L'IA déchiffre votre exercice..."; iconClass = 'fas fa-brain'; iconColor = 'var(--secondary-color)'; break;
|
346 |
case 'generating_latex': statusMsg = "Construction de la solution LaTeX..."; iconClass = 'fas fa-scroll'; break;
|
347 |
case 'cleaning_latex': statusMsg = "Peaufinage du code LaTeX..."; iconClass = 'fas fa-magic'; break;
|
348 |
+
case 'generating_pdf': statusMsg = "Compilation du document PDF final..."; iconClass = 'fas fa-file-pdf'; iconColor = 'var(--accent-color)'; break; // Changed from #e74c3c
|
349 |
case 'completed': statusMsg = "Solution Complète et Précise Générée !"; iconClass = 'fas fa-check-double'; iconColor = 'var(--success-color)'; break;
|
350 |
case 'completed_tex_only': statusMsg = "Solution LaTeX Précise Générée ! (PDF non requis/dispo)"; iconClass = 'fas fa-check-circle'; iconColor = 'var(--success-color)'; break;
|
351 |
+
case 'pdf_error': statusMsg = "Solution LaTeX Précise Générée ! (Erreur PDF)"; iconClass = 'fas fa-file-excel'; iconColor = '#f39c12'; break; // Kept specific orange
|
352 |
case 'error': statusMsg = "Une anomalie technique est survenue."; iconClass = 'fas fa-times-circle'; iconColor = 'var(--accent-color)'; break;
|
353 |
case 'error_user': statusMsg = "Veuillez vérifier votre image."; iconClass = 'fas fa-exclamation-triangle'; iconColor = 'var(--accent-color)'; break;
|
354 |
default: statusMsg = `Progression: ${status}`; iconClass = 'fas fa-spinner fa-spin';
|
|
|
365 |
|
366 |
function escapeHtml(unsafe) {
|
367 |
if (typeof unsafe !== 'string') return '';
|
368 |
+
return unsafe.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
369 |
}
|
370 |
|
371 |
copyButton.addEventListener('click', () => {
|
|
|
375 |
const originalText = copyButton.childNodes[1] ? copyButton.childNodes[1].nodeValue : ' Copier le code LaTeX';
|
376 |
copyButton.innerHTML = `<i class="fas fa-check mr-2"></i> Code Copié !`;
|
377 |
copyButton.classList.remove('gradient-secondary');
|
378 |
+
copyButton.style.backgroundColor = 'var(--success-color)'; // Uses CSS variable
|
379 |
|
380 |
setTimeout(() => {
|
381 |
copyButton.innerHTML = `<i class="${originalIcon} mr-2"></i>${originalText}`;
|