From 2bffffab98ecedbc1aa86d7ccae3f0a71c0d4f4a Mon Sep 17 00:00:00 2001
From: Adrien Fryson <adrien@macbook.local>
Date: Fri, 7 Mar 2025 10:48:31 +0100
Subject: [PATCH] clean + nouvelle interface

---
 sae/WEB-INF/src/.DS_Store     | Bin 6148 -> 6148 bytes
 sae/WEB-INF/vue/accueil.jsp   |  88 ++++++++-----------
 sae/WEB-INF/vue/creerFil.jsp  |  87 ++++++++-----------
 sae/WEB-INF/vue/fil.jsp       | 153 ++++++++++++++++++----------------
 sae/WEB-INF/vue/listerFil.jsp |  95 +++++++++------------
 sae/WEB-INF/vue/login.jsp     |  68 +++++++--------
 sae/WEB-INF/vue/register.jsp  |  70 ++++++++--------
 7 files changed, 264 insertions(+), 297 deletions(-)

diff --git a/sae/WEB-INF/src/.DS_Store b/sae/WEB-INF/src/.DS_Store
index 7e26352a1583e69cc3679c58b929a84e089fa611..bdd80980c19d3b8b05bfa17ca08fb98ff5b03703 100644
GIT binary patch
delta 21
ccmZoMXffC@hmpg?&_GAQ$kKT862=5E07lgY3jhEB

delta 21
ccmZoMXffC@hmphB$W%wc$kJl-62=5E07oeX6#xJL

diff --git a/sae/WEB-INF/vue/accueil.jsp b/sae/WEB-INF/vue/accueil.jsp
index d920f55..ffb7d3a 100644
--- a/sae/WEB-INF/vue/accueil.jsp
+++ b/sae/WEB-INF/vue/accueil.jsp
@@ -15,57 +15,43 @@
     <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
     <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png"> 
 </head>
-<body class="bg-gray-100">
-    <nav class="bg-white shadow-md">
-        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
-            <div class="relative flex items-center justify-between h-16">
-                <div class="absolute inset-y-0 left-0 flex items-center sm:hidden">
-                    <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
-                        <span class="sr-only">Open main menu</span>
-                        <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
-                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
-                        </svg>
-                        <svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
-                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
-                        </svg>
-                    </button>
-                </div>
-                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
-                    <div class="flex-shrink-0">
-                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
-                    </div>
-                    <div class="hidden sm:block sm:ml-auto">
-                        <div class="flex space-x-4">
-                            <a href="<%= request.getContextPath() %>/logout" class="text-red-600 hover:bg-red-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">Se déconnecter</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </nav>
-    <% 
-        UtilisateurDao udao=new UtilisateurDao(); String email=(String) session.getAttribute("email");
-        String username=udao.findUtilisateur(email).getNom(); AbonnementDao adao=new AbonnementDao();
-        List<Abonnement> abonnements = adao.findAbonnements(email);
-        FilDeDiscussionDAO fdao = new FilDeDiscussionDAO();
-    %>
-        <div class="max-w-2xl mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
-            <h2 class="text-2xl font-bold mb-4">Bienvenue sur CampusTalk</h2>
-            <p class="mb-4">Bonjour, <%= username %> !</p>
-            <p class="mb-4">Vous êtes connecté en tant que <%= email %></p>
-            <a href="<%= request.getContextPath() %>/listerFil" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Voir les autres fils de discussion</a>
-        </div>
-        <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
-            <h3 class="text-xl font-bold mb-4">Vos abonnements</h3>
-            <ul class="list-disc pl-5">
-                <% for (Abonnement abo : abonnements) { %>
-                    <li class="mb-2">
-                        <a href="<%= request.getContextPath() %>/fil?id=<%= abo.getIdFil() %>" class="text-blue-500 hover:underline">
-                            <%= fdao.findById(abo.getIdFil()).getNom() %>
-                        </a>
-                    </li>
-                <% } %>
-            </ul>
+<body class="bg-gray-100 flex">
+    <aside class="w-64 bg-gray-800 text-white h-screen">
+        <div class="p-4">
+            <h1 class="text-2xl font-bold">CampusTalk</h1>
         </div>
+        <nav class="mt-4">
+            <a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
+            <a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
+            <a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
+            <a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
+        </nav>
+    </aside>
+    <div class="flex-1 p-6">
+        <% 
+            UtilisateurDao udao=new UtilisateurDao(); String email=(String) session.getAttribute("email");
+            String username=udao.findUtilisateur(email).getNom(); AbonnementDao adao=new AbonnementDao();
+            List<Abonnement> abonnements = adao.findAbonnements(email);
+            FilDeDiscussionDAO fdao = new FilDeDiscussionDAO();
+        %>
+            <div class="max-w-2xl mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
+                <h2 class="text-2xl font-bold mb-4">Bienvenue sur CampusTalk</h2>
+                <p class="mb-4">Bonjour, <%= username %> !</p>
+                <p class="mb-4">Vous êtes connecté en tant que <%= email %></p>
+                <a href="<%= request.getContextPath() %>/listerFil" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Voir les autres fils de discussion</a>
+            </div>
+            <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
+                <h3 class="text-xl font-bold mb-4">Vos abonnements</h3>
+                <ul class="list-disc pl-5">
+                    <% for (Abonnement abo : abonnements) { %>
+                        <li class="mb-2">
+                            <a href="<%= request.getContextPath() %>/fil?id=<%= abo.getIdFil() %>" class="text-blue-500 hover:underline">
+                                <%= fdao.findById(abo.getIdFil()).getNom() %>
+                            </a>
+                        </li>
+                    <% } %>
+                </ul>
+            </div>
+    </div>
 </body>
 </html>
diff --git a/sae/WEB-INF/vue/creerFil.jsp b/sae/WEB-INF/vue/creerFil.jsp
index 6b141be..5ac6e50 100644
--- a/sae/WEB-INF/vue/creerFil.jsp
+++ b/sae/WEB-INF/vue/creerFil.jsp
@@ -9,61 +9,44 @@
     <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
     <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
 </head>
-<body class="bg-gray-100">
-    <nav class="bg-white shadow-md">
-        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
-            <div class="relative flex items-center justify-between h-16">
-                <div class="absolute inset-y-0 left-0 flex items-center sm:hidden">
-                    <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
-                        <span class="sr-only">Open main menu</span>
-                        <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
-                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
-                        </svg>
-                        <svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
-                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
-                        </svg>
-                    </button>
-                </div>
-                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
-                    <div class="flex-shrink-0">
-                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
-                    </div>
-                    <div class="hidden sm:block sm:ml-auto">
-                        <div class="flex space-x-4">
-                            <a href="<%= request.getContextPath() %>/logout" class="text-red-600 hover:bg-red-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">Se déconnecter</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
+<body class="bg-gray-100 flex">
+    <aside class="w-64 bg-gray-800 text-white h-screen">
+        <div class="p-4">
+            <h1 class="text-2xl font-bold">CampusTalk</h1>
         </div>
-    </nav>
-    <div class="container mx-auto px-4 mt-4 text-center">
-        <a href="<%= request.getContextPath() %>/listerFil" class="bg-blue-500 text-white px-4 py-2 rounded">Retour aux fils de discussion</a>
-    </div>
+        <nav class="mt-4">
+            <a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
+            <a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
+            <a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
+            <a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
+        </nav>
+    </aside>
+    <div class="flex-1 p-6">
 
-    <% if (request.getAttribute("error") != null) { %>
-        <div class="max-w-2xl mx-auto mt-4 p-4 bg-red-100 text-red-700 rounded-lg">
-            <%= request.getAttribute("error") %>
-        </div>
-    <% } %>
-
-    <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
-        <h1 class="text-2xl font-bold mb-4 text-center">Créer un nouveau fil de discussion</h1>
-        <form action="creerFil" method="post" class="mt-4">
-            <div class="mb-4">
-                <label for="nom" class="block text-gray-700 font-semibold">Nom du fil:</label>
-                <input type="text" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="nom" name="nom" required>
-            </div>
-            <div class="mb-4">
-                <label for="createuremail" class="block text-gray-700 font-semibold">Email du créateur:</label>
-                <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="createuremail" name="createuremail" required>
+        <% if (request.getAttribute("error") != null) { %>
+            <div class="max-w-2xl mx-auto mt-4 p-4 bg-red-100 text-red-700 rounded-lg">
+                <%= request.getAttribute("error") %>
             </div>
-            <div class="mb-4">
-                <label for="description" class="block text-gray-700 font-semibold">Description:</label>
-                <textarea class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="description" name="description" rows="3" required></textarea>
-            </div>
-            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">Créer</button>
-        </form>
+        <% } %>
+
+        <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
+            <h1 class="text-2xl font-bold mb-4 text-center">Créer un nouveau fil de discussion</h1>
+            <form action="creerFil" method="post" class="mt-4">
+                <div class="mb-4">
+                    <label for="nom" class="block text-gray-700 font-semibold">Nom du fil:</label>
+                    <input type="text" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="nom" name="nom" required>
+                </div>
+                <div class="mb-4">
+                    <label for="createuremail" class="block text-gray-700 font-semibold">Email du créateur:</label>
+                    <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="createuremail" name="createuremail" required>
+                </div>
+                <div class="mb-4">
+                    <label for="description" class="block text-gray-700 font-semibold">Description:</label>
+                    <textarea class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="description" name="description" rows="3" required></textarea>
+                </div>
+                <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">Créer</button>
+            </form>
+        </div>
     </div>
 </body>
 </html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/fil.jsp b/sae/WEB-INF/vue/fil.jsp
index 8d673bb..0284686 100644
--- a/sae/WEB-INF/vue/fil.jsp
+++ b/sae/WEB-INF/vue/fil.jsp
@@ -30,85 +30,98 @@
         }
     </style>
 </head>
-<body class="bg-gray-100 text-gray-900 font-sans">
-    <nav class="bg-white shadow-md">
-        <div class="container mx-auto px-4 py-2 flex justify-between items-center">
-            <a class="text-xl font-bold" href="#">CampusTalk</a>
-            <div>
-                <a class="bg-red-500 text-white px-4 py-2 rounded" href="<%= request.getContextPath() %>/logout">Se déconnecter</a>
-            </div>
+<body class="bg-gray-100 flex">
+    <aside class="w-64 bg-gray-800 text-white h-screen">
+        <div class="p-4">
+            <h1 class="text-2xl font-bold">CampusTalk</h1>
         </div>
-    </nav>
-
-    <div class="container mx-auto px-4 mt-4 text-center">
-        <a href="<%= request.getContextPath() %>/accueil" class="bg-blue-500 text-white px-4 py-2 rounded">Retour</a>
-    </div>
+        <nav class="mt-4">
+            <a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
+            <a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
+            <a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
+            <a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
+        </nav>
+    </aside>
+    <div class="flex-1 p-6">
 
-    <%
-        int id = Integer.parseInt(request.getParameter("id"));
-        session.setAttribute("filId", id);
-        FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
-        FilDeDiscussion fil = fddao.findById(id);
-        MessageDao mdao = new MessageDao();
-        List<Message> messages = mdao.findByFil(id);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy 'à' HH:mm");
-    %>
+        <%
+            int id = Integer.parseInt(request.getParameter("id"));
+            session.setAttribute("filId", id);
+            FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
+            FilDeDiscussion fil = fddao.findById(id);
+            MessageDao mdao = new MessageDao();
+            List<Message> messages = mdao.findByFil(id);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy 'à' HH:mm");
+        %>
 
-    <div class="container mx-auto px-4 mt-8">
-        <div class="bg-white p-6 rounded-lg shadow-lg">
-            <h2 class="text-2xl font-bold mb-4 text-center"><%= fil.getNom() %></h2>
-            <div class="overflow-y-auto max-h-96" id="messages-box">
-                <% for (Message m : messages) {
-                    LocalDateTime datePublication = m.getDatePublication();
-                    String formattedDate = (datePublication != null) ? datePublication.format(formatter) : "Date non disponible";
-                %>
-                <div class="flex items-start mb-4 message-container">
-                    <div class="w-10 h-10 rounded-full overflow-hidden">
-                        <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar">
-                    </div>
-                    <div class="ml-4 bg-gray-200 p-4 rounded-lg">
-                        <h4 class="font-bold"><%= mdao.findUserName(m.getAuteurEmail()) %></h4>
-                        <p class="text-sm text-gray-600"><%= formattedDate %></p>
-                        <p class="mt-2"><%= m.getContenu() %></p>
-                        <% if (m.getFileName() != null) { %>
-                        <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" class="mt-2 message-image">
-                        <% } %>
+        <div class="container mx-auto px-4 mt-8">
+            <div class="bg-white p-6 rounded-lg shadow-lg">
+                <h2 class="text-2xl font-bold mb-4 text-center"><%= fil.getNom() %></h2>
+                <div class="overflow-y-auto max-h-96" id="messages-box">
+                    <% for (Message m : messages) {
+                        LocalDateTime datePublication = m.getDatePublication();
+                        String formattedDate = (datePublication != null) ? datePublication.format(formatter) : "Date non disponible";
+                    %>
+                    <div class="flex items-start mb-4 message-container">
+                        <div class="w-10 h-10 rounded-full overflow-hidden">
+                            <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar">
+                        </div>
+                        <div class="ml-4 bg-gray-200 p-4 rounded-lg">
+                            <h4 class="font-bold"><%= mdao.findUserName(m.getAuteurEmail()) %></h4>
+                            <p class="text-sm text-gray-600"><%= formattedDate %></p>
+                            <p class="mt-2"><%= m.getContenu() %></p>
+                            <% if (m.getFileName() != null) { %>
+                            <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" class="mt-2 message-image">
+                            <% } %>
+                            <div class="mt-2 flex items-center">
+                                <form action="<%= request.getContextPath() %>/Like" method="post" class="mr-2">
+                                    <input type="hidden" name="messageId" value="<%= m.getId() %>">
+                                    <button type="submit" class="text-blue-500 hover:text-blue-700">
+                                        <% if (m.getLikeCount()) { %>
+                                        ❤️ Enlever le like
+                                        <% } else { %>
+                                        🤍 Like
+                                        <% } %>
+                                    </button>
+                                </form>
+                            </div>
+                        </div>
                     </div>
+                    <% } %>
                 </div>
-                <% } %>
-            </div>
 
-            <div class="mt-6 bg-white p-6 rounded-lg shadow-lg">
-                <form action="envoyerMessage" method="post" enctype="multipart/form-data">
-                    <div class="mb-4">
-                        <label for="contenu" class="block text-gray-700 font-semibold">Votre message :</label>
-                        <textarea class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="contenu" name="contenu" rows="3" required></textarea>
-                    </div>
-                    <div class="mb-4">
-                        <label for="file" class="block text-gray-700 font-semibold">Ajouter une image :</label>
-                        <div class="flex items-center">
-                            <input type="file" class="hidden" id="file" name="file">
-                            <label for="file" class="cursor-pointer bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors flex items-center">
-                                <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
-                                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"></path>
-                                </svg>
-                                Télécharger
-                            </label>
+                <div class="mt-6 bg-white p-6 rounded-lg shadow-lg">
+                    <form action="envoyerMessage" method="post" enctype="multipart/form-data">
+                        <div class="mb-4">
+                            <label for="contenu" class="block text-gray-700 font-semibold">Votre message :</label>
+                            <textarea class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" id="contenu" name="contenu" rows="3" required></textarea>
                         </div>
-                    </div>
-                    <input type="hidden" name="filId" value="<%= id %>">
-                    <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors">Envoyer</button>
-                </form>
+                        <div class="mb-4">
+                            <label for="file" class="block text-gray-700 font-semibold">Ajouter une image :</label>
+                            <div class="flex items-center">
+                                <input type="file" class="hidden" id="file" name="file">
+                                <label for="file" class="cursor-pointer bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors flex items-center">
+                                    <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+                                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"></path>
+                                    </svg>
+                                    Télécharger
+                                </label>
+                            </div>
+                        </div>
+                        <input type="hidden" name="filId" value="<%= id %>">
+                        <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors">Envoyer</button>
+                    </form>
+                </div>
+                
             </div>
-            
         </div>
-    </div>
 
-    <script>
-        window.onload = function () {
-            let messagesBox = document.getElementById('messages-box');
-            messagesBox.scrollTop = messagesBox.scrollHeight;
-        };
-    </script>
+        <script>
+            window.onload = function () {
+                let messagesBox = document.getElementById('messages-box');
+                messagesBox.scrollTop = messagesBox.scrollHeight;
+            };
+        </script>
+    </div>
 </body>
 </html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/listerFil.jsp b/sae/WEB-INF/vue/listerFil.jsp
index 4754c08..0b53034 100644
--- a/sae/WEB-INF/vue/listerFil.jsp
+++ b/sae/WEB-INF/vue/listerFil.jsp
@@ -16,67 +16,48 @@
     <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
     <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
 </head>
-<body class="bg-gray-100">
-    <nav class="bg-white shadow-md">
-        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
-            <div class="relative flex items-center justify-between h-16">
-                <div class="absolute inset-y-0 left-0 flex items-center sm:hidden">
-                    <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white" aria-controls="mobile-menu" aria-expanded="false">
-                        <span class="sr-only">Open main menu</span>
-                        <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
-                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
-                        </svg>
-                        <svg class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
-                            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
-                        </svg>
-                    </button>
-                </div>
-                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
-                    <div class="flex-shrink-0">
-                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
-                    </div>
-                    <div class="hidden sm:block sm:ml-auto">
-                        <div class="flex space-x-4">
-                            <a href="<%= request.getContextPath() %>/logout" class="text-red-600 hover:bg-red-700 hover:text-white px-3 py-2 rounded-md text-sm font-medium">Se déconnecter</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
+<body class="bg-gray-100 flex">
+    <aside class="w-64 bg-gray-800 text-white h-screen">
+        <div class="p-4">
+            <h1 class="text-2xl font-bold">CampusTalk</h1>
         </div>
-    </nav>
-
-    <div class="container mx-auto px-4 mt-4 text-center">
-        <a href="<%= request.getContextPath() %>/accueil" class="bg-blue-500 text-white px-4 py-2 rounded">Retour à l'accueil</a>
-        <a href="<%= request.getContextPath() %>/creerFil" class="bg-blue-500 text-white px-4 py-2 rounded">Créer un fil de discussion</a>
-    </div>
+        <nav class="mt-4">
+            <a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
+            <a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
+            <a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
+            <a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
+        </nav>
+    </aside>
+    <div class="flex-1 p-6">
 
-    <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
-        <h2 class="text-2xl font-bold mb-4 text-center">Fils de Discussion</h2>
-        <p class="text-gray-700 mb-4 text-center">(auxquels vous n'êtes pas abonné)</p>
-        <% 
-            String email = (String) session.getAttribute("email");
-            AbonnementDao adao = new AbonnementDao();
-            List<Abonnement> abonnements = adao.findAbonnements(email);
-            Set<Integer> abonnementsIds = new HashSet<>();
-            for (Abonnement abonnement : abonnements) {
-                abonnementsIds.add(abonnement.getIdFil());
-            }
+        <div class="max-w-2xl mx-auto mt-8 p-6 bg-white rounded-lg shadow-md">
+            <h2 class="text-2xl font-bold mb-4 text-center">Fils de Discussion</h2>
+            <p class="text-gray-700 mb-4 text-center">(auxquels vous n'êtes pas abonné)</p>
+            <% 
+                String email = (String) session.getAttribute("email");
+                AbonnementDao adao = new AbonnementDao();
+                List<Abonnement> abonnements = adao.findAbonnements(email);
+                Set<Integer> abonnementsIds = new HashSet<>();
+                for (Abonnement abonnement : abonnements) {
+                    abonnementsIds.add(abonnement.getIdFil());
+                }
 
-            FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
-            for (FilDeDiscussion f : fddao.findAll()) {
-                if (!abonnementsIds.contains(f.getId())) {
-        %>
-        <div class="mb-4 p-4 bg-gray-100 rounded-lg shadow-md">
-            <h4 class="font-bold text-lg"><%= f.getNom() %></h4>
-            <% if (f.getDescription() != null) { %>
-                <p class="text-gray-700"><%= f.getDescription() %></p>
-            <% } %>
-            <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" class="bg-blue-500 text-white px-4 py-2 rounded mt-2 inline-block">Suivre</a>
-        </div>
-        <% 
+                FilDeDiscussionDAO fddao = new FilDeDiscussionDAO();
+                for (FilDeDiscussion f : fddao.findAll()) {
+                    if (!abonnementsIds.contains(f.getId())) {
+            %>
+            <div class="mb-4 p-4 bg-gray-100 rounded-lg shadow-md">
+                <h4 class="font-bold text-lg"><%= f.getNom() %></h4>
+                <% if (f.getDescription() != null) { %>
+                    <p class="text-gray-700"><%= f.getDescription() %></p>
+                <% } %>
+                <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" class="bg-blue-500 text-white px-4 py-2 rounded mt-2 inline-block">Suivre</a>
+            </div>
+            <% 
+                    }
                 }
-            }
-        %>
+            %>
+        </div>
     </div>
 </body>
 </html>
\ No newline at end of file
diff --git a/sae/WEB-INF/vue/login.jsp b/sae/WEB-INF/vue/login.jsp
index ae0c51d..f9c1f98 100644
--- a/sae/WEB-INF/vue/login.jsp
+++ b/sae/WEB-INF/vue/login.jsp
@@ -14,41 +14,43 @@
         }
     </style>
 </head>
-<body class="bg-gray-100">
-    <nav class="bg-white shadow-md">
-        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
-            <div class="relative flex items-center justify-between h-16">
-                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
-                    <div class="flex-shrink-0">
-                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
-                    </div>
-                </div>
-            </div>
+<body class="bg-gray-100 flex">
+    <aside class="w-64 bg-gray-800 text-white h-screen">
+        <div class="p-4">
+            <h1 class="text-2xl font-bold">CampusTalk</h1>
         </div>
-    </nav>
-    <div class="max-w-md mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
-        <h2 class="text-2xl font-bold mb-4 text-center">Bienvenue sur CampusTalk</h2>
-        <form action="login" method="post">
-            <%
-                request.getAttribute("error");
-                if (request.getAttribute("error") != null) {
-            %>
-            <div class="bg-red-100 text-red-700 p-4 rounded-lg mb-4">
-                <%= request.getAttribute("error") %>
-            </div>
-            <% request.removeAttribute("error"); } %>
-            <div class="mb-4">
-                <label for="email" class="block text-gray-700 font-semibold">Adresse e-mail</label>
-                <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="email" id="email" placeholder="Entrez votre e-mail" required>
-            </div>
-            <div class="mb-4">
-                <label for="motdepasse" class="block text-gray-700 font-semibold">Mot de passe</label>
-                <input type="password" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="motdepasse" id="motdepasse" placeholder="Entrez votre mot de passe" required>
+        <nav class="mt-4">
+            <a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
+            <a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
+            <a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
+            <a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
+        </nav>
+    </aside>
+    <div class="flex-1 p-6">
+        <div class="max-w-md mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
+            <h2 class="text-2xl font-bold mb-4 text-center">Bienvenue sur CampusTalk</h2>
+            <form action="login" method="post">
+                <%
+                    request.getAttribute("error");
+                    if (request.getAttribute("error") != null) {
+                %>
+                <div class="bg-red-100 text-red-700 p-4 rounded-lg mb-4">
+                    <%= request.getAttribute("error") %>
+                </div>
+                <% request.removeAttribute("error"); } %>
+                <div class="mb-4">
+                    <label for="email" class="block text-gray-700 font-semibold">Adresse e-mail</label>
+                    <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="email" id="email" placeholder="Entrez votre e-mail" required>
+                </div>
+                <div class="mb-4">
+                    <label for="motdepasse" class="block text-gray-700 font-semibold">Mot de passe</label>
+                    <input type="password" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="motdepasse" id="motdepasse" placeholder="Entrez votre mot de passe" required>
+                </div>
+                <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">Se connecter</button>
+            </form>
+            <div class="text-center mt-3">
+                <p>Vous n'avez pas de compte ? <a href="<%= request.getContextPath() %>/register" class="text-blue-500 hover:underline">S'inscrire</a></p>
             </div>
-            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">Se connecter</button>
-        </form>
-        <div class="text-center mt-3">
-            <p>Vous n'avez pas de compte ? <a href="<%= request.getContextPath() %>/register" class="text-blue-500 hover:underline">S'inscrire</a></p>
         </div>
     </div>
 </body>
diff --git a/sae/WEB-INF/vue/register.jsp b/sae/WEB-INF/vue/register.jsp
index 321f260..fb8ae2b 100644
--- a/sae/WEB-INF/vue/register.jsp
+++ b/sae/WEB-INF/vue/register.jsp
@@ -9,42 +9,44 @@
     <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
     <link rel="shortcut icon" href="https://www.shareicon.net/data/2016/07/10/119195_chat_512x512.png">
 </head>
-<body class="bg-gray-100">
-    <nav class="bg-white shadow-md">
-        <div class="max-w-7xl mx-auto px-2 sm:px-6 lg:px-8">
-            <div class="relative flex items-center justify-between h-16">
-                <div class="flex-1 flex items-center justify-center sm:items-stretch sm:justify-start">
-                    <div class="flex-shrink-0">
-                        <a class="text-xl font-bold text-gray-800" href="#">CampusTalk</a>
-                    </div>
-                </div>
-            </div>
+<body class="bg-gray-100 flex">
+    <aside class="w-64 bg-gray-800 text-white h-screen">
+        <div class="p-4">
+            <h1 class="text-2xl font-bold">CampusTalk</h1>
         </div>
-    </nav>
-    <div class="max-w-md mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
-        <h2 class="text-2xl font-bold mb-4 text-center">Inscription</h2>
-        <% if (request.getAttribute("error") != null) { %>
-            <div class="bg-red-100 text-red-700 p-4 rounded-lg mb-4">
-                <%= request.getAttribute("error") %>
-            </div>
-            <% request.removeAttribute("error"); } %>
-        <form action="register" method="post">
-            <div class="mb-4">
-                <label for="nom" class="block text-gray-700 font-semibold">Nom</label>
-                <input type="text" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="nom" id="nom" placeholder="Entrez votre nom" required>
-            </div>
-            <div class="mb-4">
-                <label for="email" class="block text-gray-700 font-semibold">Adresse e-mail</label>
-                <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="email" id="email" placeholder="Entrez votre e-mail" required>
-            </div>
-            <div class="mb-4">
-                <label for="motdepasse" class="block text-gray-700 font-semibold">Mot de passe</label>
-                <input type="password" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="motdepasse" id="motdepasse" placeholder="Choisissez un mot de passe" required>
+        <nav class="mt-4">
+            <a href="<%= request.getContextPath() %>/accueil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Accueil</a>
+            <a href="<%= request.getContextPath() %>/listerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Autres Fils de Discussion</a>
+            <a href="<%= request.getContextPath() %>/creerFil" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-gray-700">Créer un Fil</a>
+            <a href="<%= request.getContextPath() %>/logout" class="block py-2.5 px-4 rounded transition duration-200 hover:bg-red-700">Se déconnecter</a>
+        </nav>
+    </aside>
+    <div class="flex-1 p-6">
+        <div class="max-w-md mx-auto mt-12 p-6 bg-white rounded-lg shadow-md">
+            <h2 class="text-2xl font-bold mb-4 text-center">Inscription</h2>
+            <% if (request.getAttribute("error") != null) { %>
+                <div class="bg-red-100 text-red-700 p-4 rounded-lg mb-4">
+                    <%= request.getAttribute("error") %>
+                </div>
+                <% request.removeAttribute("error"); } %>
+            <form action="register" method="post">
+                <div class="mb-4">
+                    <label for="nom" class="block text-gray-700 font-semibold">Nom</label>
+                    <input type="text" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="nom" id="nom" placeholder="Entrez votre nom" required>
+                </div>
+                <div class="mb-4">
+                    <label for="email" class="block text-gray-700 font-semibold">Adresse e-mail</label>
+                    <input type="email" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="email" id="email" placeholder="Entrez votre e-mail" required>
+                </div>
+                <div class="mb-4">
+                    <label for="motdepasse" class="block text-gray-700 font-semibold">Mot de passe</label>
+                    <input type="password" class="w-full p-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-400" name="motdepasse" id="motdepasse" placeholder="Choisissez un mot de passe" required>
+                </div>
+                <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">S'inscrire</button>
+            </form>
+            <div class="text-center mt-3">
+                <p>Vous avez déjà un compte ? <a href="<%= request.getContextPath() %>/login" class="text-blue-500 hover:underline">Se connecter</a></p>
             </div>
-            <button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:bg-blue-600 transition-colors w-full">S'inscrire</button>
-        </form>
-        <div class="text-center mt-3">
-            <p>Vous avez déjà un compte ? <a href="<%= request.getContextPath() %>/login" class="text-blue-500 hover:underline">Se connecter</a></p>
         </div>
     </div>
 </body>
-- 
GitLab