Docfile commited on
Commit
099fcfc
·
verified ·
1 Parent(s): 6392218

Update templates/index.html

Browse files
Files changed (1) hide show
  1. templates/index.html +115 -88
templates/index.html CHANGED
@@ -5,6 +5,7 @@
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Mariam Anglais</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
 
8
  <script>
9
  tailwind.config = {
10
  theme: {
@@ -12,73 +13,113 @@
12
  colors: {
13
  primary: '#4CAF50',
14
  'primary-dark': '#3e8e41',
15
- }
 
 
 
 
 
 
 
16
  }
17
  }
18
  }
19
  </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  </head>
21
  <body class="bg-gray-50 min-h-screen">
22
- <div class="container mx-auto px-4 py-8 max-w-6xl">
23
- <!-- Header -->
24
- <header class="text-center mb-12">
25
- <h1 class="text-5xl font-bold text-primary mb-4 animate-fade-in">
26
- ✨ Mariam Anglais ✨
27
- </h1>
28
- <p class="text-gray-600 text-lg">
29
- Bienvenue ! Téléchargez vos images, choisissez votre type d'analyse, et laissez la magie opérer.
30
- </p>
31
- </header>
32
-
33
- <!-- Main Content -->
34
- <div class="grid md:grid-cols-2 gap-12">
35
- <!-- Upload Section -->
36
- <div class="bg-white rounded-lg shadow-lg p-6">
37
- <h2 class="text-2xl font-semibold text-primary mb-4">📷 Téléchargement d'images</h2>
38
- <div class="upload-zone border-2 border-dashed border-primary rounded-lg p-8 text-center cursor-pointer hover:bg-gray-50 transition-colors">
39
- <input type="file" id="image-upload" multiple accept="image/*" class="hidden">
40
- <label for="image-upload" class="cursor-pointer">
41
- <svg class="mx-auto h-12 w-12 text-primary mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
42
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"></path>
43
- </svg>
44
- <span class="text-gray-600">Cliquez ou glissez vos images ici</span>
45
- </label>
46
- </div>
47
- <div id="preview-container" class="mt-4 grid grid-cols-2 gap-4"></div>
48
- </div>
49
-
50
- <!-- Analysis Type Section -->
51
- <div class="bg-white rounded-lg shadow-lg p-6">
52
- <h2 class="text-2xl font-semibold text-primary mb-4">🎛️ Choix du type d'analyse</h2>
53
- <div class="space-y-4">
54
- <label class="flex items-center p-4 rounded-lg border border-gray-200 cursor-pointer hover:bg-gray-50 transition-colors">
55
- <input type="radio" name="analysis_type" value="text" class="h-4 w-4 text-primary">
56
- <span class="ml-3">🔍 Type 1: Analyse de Texte</span>
57
- </label>
58
- <label class="flex items-center p-4 rounded-lg border border-gray-200 cursor-pointer hover:bg-gray-50 transition-colors">
59
- <input type="radio" name="analysis_type" value="icon" class="h-4 w-4 text-primary">
60
- <span class="ml-3">🧠 Type 2: Document iconographique</span>
61
- </label>
62
- </div>
63
- <button id="submit-btn" class="w-full mt-6 bg-primary hover:bg-primary-dark text-white font-bold py-3 px-6 rounded-lg transition-all transform hover:-translate-y-1 hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed">
64
- 🚀 Soumettre
65
- </button>
66
- </div>
67
- </div>
68
 
69
- <!-- Results Section -->
70
- <div id="results" class="mt-12 bg-white rounded-lg shadow-lg p-6 hidden">
71
- <h2 class="text-2xl font-semibold text-primary mb-4">📝 Résultat de l'analyse</h2>
72
- <div id="analysis-result" class="prose max-w-none"></div>
73
- </div>
74
-
75
- <!-- Footer -->
76
- <footer class="mt-12 text-center text-gray-600">
77
- <hr class="mb-4">
78
- <p>© 2025 Mariam AI - Tous droits réservés.</p>
79
- </footer>
80
  </div>
81
 
 
 
82
  <script>
83
  document.addEventListener('DOMContentLoaded', () => {
84
  const imageUpload = document.getElementById('image-upload');
@@ -89,36 +130,18 @@
89
 
90
  let uploadedFiles = [];
91
 
92
- imageUpload.addEventListener('change', handleFileSelect);
93
- submitBtn.addEventListener('click', handleSubmit);
 
 
 
 
 
 
 
 
94
 
95
- function handleFileSelect(event) {
96
- uploadedFiles = Array.from(event.target.files);
97
- updatePreview();
98
- }
99
-
100
- function updatePreview() {
101
- previewContainer.innerHTML = '';
102
- uploadedFiles.forEach((file, index) => {
103
- const preview = document.createElement('div');
104
- preview.className = 'relative';
105
- preview.innerHTML = `
106
- <img src="${URL.createObjectURL(file)}" alt="Preview" class="w-full h-32 object-cover rounded-lg">
107
- <button onclick="removeImage(${index})" class="absolute top-2 right-2 bg-red-500 text-white rounded-full p-1 hover:bg-red-600">
108
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
109
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
110
- </svg>
111
- </button>
112
- `;
113
- previewContainer.appendChild(preview);
114
- });
115
- submitBtn.disabled = uploadedFiles.length === 0;
116
- }
117
-
118
- function removeImage(index) {
119
- uploadedFiles.splice(index, 1);
120
- updatePreview();
121
- }
122
 
123
  async function handleSubmit() {
124
  const formData = new FormData();
@@ -147,7 +170,11 @@
147
  }
148
 
149
  resultsSection.classList.remove('hidden');
150
- analysisResult.innerHTML = data.result;
 
 
 
 
151
  } catch (error) {
152
  alert('Erreur lors de l\'analyse: ' + error.message);
153
  } finally {
 
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
  <title>Mariam Anglais</title>
7
  <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
9
  <script>
10
  tailwind.config = {
11
  theme: {
 
13
  colors: {
14
  primary: '#4CAF50',
15
  'primary-dark': '#3e8e41',
16
+ },
17
+ typography: {
18
+ DEFAULT: {
19
+ css: {
20
+ maxWidth: 'none',
21
+ },
22
+ },
23
+ },
24
  }
25
  }
26
  }
27
  </script>
28
+ <style>
29
+ /* Styles spécifiques pour le Markdown */
30
+ .markdown-content {
31
+ width: 100%;
32
+ overflow-wrap: break-word;
33
+ word-wrap: break-word;
34
+ word-break: break-word;
35
+ hyphens: auto;
36
+ }
37
+
38
+ .markdown-content pre {
39
+ white-space: pre-wrap;
40
+ word-wrap: break-word;
41
+ padding: 1rem;
42
+ background-color: #f3f4f6;
43
+ border-radius: 0.5rem;
44
+ margin: 1rem 0;
45
+ overflow-x: auto;
46
+ }
47
+
48
+ .markdown-content code {
49
+ background-color: #f3f4f6;
50
+ padding: 0.2rem 0.4rem;
51
+ border-radius: 0.25rem;
52
+ font-family: ui-monospace, monospace;
53
+ }
54
+
55
+ .markdown-content p {
56
+ margin: 1rem 0;
57
+ line-height: 1.7;
58
+ }
59
+
60
+ .markdown-content h1,
61
+ .markdown-content h2,
62
+ .markdown-content h3,
63
+ .markdown-content h4 {
64
+ font-weight: bold;
65
+ margin: 1.5rem 0 1rem 0;
66
+ line-height: 1.3;
67
+ }
68
+
69
+ .markdown-content h1 { font-size: 1.875rem; }
70
+ .markdown-content h2 { font-size: 1.5rem; }
71
+ .markdown-content h3 { font-size: 1.25rem; }
72
+ .markdown-content h4 { font-size: 1.125rem; }
73
+
74
+ .markdown-content ul,
75
+ .markdown-content ol {
76
+ margin: 1rem 0;
77
+ padding-left: 1.5rem;
78
+ }
79
+
80
+ .markdown-content ul { list-style-type: disc; }
81
+ .markdown-content ol { list-style-type: decimal; }
82
+
83
+ .markdown-content li {
84
+ margin: 0.5rem 0;
85
+ }
86
+
87
+ .markdown-content blockquote {
88
+ border-left: 4px solid #e5e7eb;
89
+ padding-left: 1rem;
90
+ margin: 1rem 0;
91
+ color: #4b5563;
92
+ }
93
+
94
+ /* Ajustements pour mobile */
95
+ @media (max-width: 640px) {
96
+ .markdown-content {
97
+ font-size: 0.9375rem;
98
+ }
99
+
100
+ .markdown-content pre {
101
+ padding: 0.75rem;
102
+ font-size: 0.875rem;
103
+ }
104
+
105
+ .markdown-content h1 { font-size: 1.5rem; }
106
+ .markdown-content h2 { font-size: 1.25rem; }
107
+ .markdown-content h3 { font-size: 1.125rem; }
108
+ .markdown-content h4 { font-size: 1rem; }
109
+ }
110
+ </style>
111
  </head>
112
  <body class="bg-gray-50 min-h-screen">
113
+ <!-- [Previous body content remains the same until the results section] -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
+ <!-- Results Section with improved Markdown support -->
116
+ <div id="results" class="mt-12 bg-white rounded-lg shadow-lg p-6 hidden">
117
+ <h2 class="text-2xl font-semibold text-primary mb-4">📝 Résultat de l'analyse</h2>
118
+ <div id="analysis-result" class="markdown-content"></div>
 
 
 
 
 
 
 
119
  </div>
120
 
121
+ <!-- [Rest of the body content remains the same until the script section] -->
122
+
123
  <script>
124
  document.addEventListener('DOMContentLoaded', () => {
125
  const imageUpload = document.getElementById('image-upload');
 
130
 
131
  let uploadedFiles = [];
132
 
133
+ // Configure marked options for better Markdown rendering
134
+ marked.setOptions({
135
+ breaks: true, // Enable line breaks
136
+ gfm: true, // Enable GitHub Flavored Markdown
137
+ headerIds: false, // Disable header IDs to prevent conflicts
138
+ mangle: false, // Disable mangling to prevent emoji issues
139
+ smartLists: true, // Enable smart lists
140
+ smartypants: true, // Enable smart punctuation
141
+ xhtml: true // Enable XHTML output
142
+ });
143
 
144
+ // [Previous event listeners and functions remain the same]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
 
146
  async function handleSubmit() {
147
  const formData = new FormData();
 
170
  }
171
 
172
  resultsSection.classList.remove('hidden');
173
+ // Convert Markdown to HTML with proper spacing
174
+ analysisResult.innerHTML = marked.parse(data.result);
175
+
176
+ // Scroll to results
177
+ resultsSection.scrollIntoView({ behavior: 'smooth' });
178
  } catch (error) {
179
  alert('Erreur lors de l\'analyse: ' + error.message);
180
  } finally {