Docfile commited on
Commit
ae43fd8
·
verified ·
1 Parent(s): 10970c2

Update templates/index.html

Browse files
Files changed (1) hide show
  1. templates/index.html +28 -27
templates/index.html CHANGED
@@ -44,23 +44,23 @@
44
  }
45
 
46
  .upload-highlight {
47
- border-color: #1abc9c;
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 focus:ring-opacity-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,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 = '#e74c3c'; break;
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
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}`;