1+ const socket = io ( ) ;
2+ const roomsList = document . getElementById ( 'rooms' ) ;
3+ const messagesList = document . getElementById ( 'messages' ) ;
4+ const inputField = document . getElementById ( 'input' ) ;
5+ const form = document . getElementById ( 'form' ) ;
6+
7+ let currentUsername = localStorage . getItem ( 'username' ) || "Unbekannt" ;
8+ let currentRoom = null ;
9+
10+ // Username ins Profil setzen
11+ document . getElementById ( 'profileName' ) . textContent = currentUsername ;
12+
13+ // Profilbild ändern
14+ const fileInput = document . getElementById ( 'fileInput' ) ;
15+ const profilePic = document . getElementById ( 'profilePic' ) ;
16+
17+ // Profilbild laden wenn vorhanden 🔥
18+ const savedProfilePic = localStorage . getItem ( 'profilePic' ) ;
19+ if ( savedProfilePic ) {
20+ profilePic . src = savedProfilePic ;
21+ }
22+
23+ // Profilbild upload und speichern
24+ fileInput . addEventListener ( 'change' , ( event ) => {
25+ const file = event . target . files [ 0 ] ;
26+ if ( file ) {
27+ const reader = new FileReader ( ) ;
28+ reader . onload = function ( e ) {
29+ profilePic . src = e . target . result ;
30+
31+ // Profilbild im localStorage speichern 🔥
32+ localStorage . setItem ( 'profilePic' , e . target . result ) ;
33+
34+ // 📤 Bild an Server schicken
35+ socket . emit ( 'update profile picture' , {
36+ username : currentUsername ,
37+ profilePic : e . target . result
38+ } ) ;
39+ }
40+ reader . readAsDataURL ( file ) ;
41+ }
42+ } ) ;
43+
44+ document . getElementById ( 'profile' ) . addEventListener ( 'click' , ( ) => {
45+ fileInput . click ( ) ;
46+ } ) ;
47+
48+ // Raum betreten
49+ roomsList . addEventListener ( 'click' , ( event ) => {
50+ const room = event . target . getAttribute ( 'data-room' ) ;
51+ if ( ! room ) return ;
52+
53+ currentRoom = room ;
54+ messagesList . innerHTML = '' ;
55+
56+ socket . emit ( 'join room' , { username : currentUsername , room } ) ;
57+
58+ document . querySelectorAll ( '.room' ) . forEach ( r => r . classList . remove ( 'active' ) ) ;
59+ event . target . classList . add ( 'active' ) ;
60+ } ) ;
61+
62+ // Nachricht senden
63+ form . addEventListener ( 'submit' , ( e ) => {
64+ e . preventDefault ( ) ;
65+ if ( ! currentRoom ) {
66+ alert ( 'Bitte zuerst einen Raum betreten.' ) ;
67+ return ;
68+ }
69+
70+ const messageText = inputField . value . trim ( ) ;
71+ if ( messageText ) {
72+ socket . emit ( 'chat message' , {
73+ username : currentUsername ,
74+ text : messageText ,
75+ profilePic : profilePic . src
76+ } ) ;
77+ inputField . value = '' ;
78+ inputField . focus ( ) ;
79+ }
80+ } ) ;
81+
82+ // Nachricht empfangen
83+ socket . on ( 'chat message' , ( message ) => {
84+ const li = document . createElement ( 'li' ) ;
85+ li . classList . add ( 'message-item' ) ;
86+
87+ li . innerHTML = `
88+ <div class="message-line">
89+ <img src="${ message . profilePic || 'default-avatar.png' } " class="message-pic">
90+ <span class="message-name">${ message . username } :</span>
91+ <span class="message-text">${ message . text } </span>
92+ </div>
93+ ` ;
94+
95+ messagesList . appendChild ( li ) ;
96+ messagesList . scrollTop = messagesList . scrollHeight ;
97+
98+ setTimeout ( ( ) => {
99+ li . classList . add ( 'fade-in' ) ;
100+ } , 10 ) ;
101+ } ) ;
102+
103+ // Chatverlauf erhalten
104+ socket . on ( 'chat history' , ( messages ) => {
105+ messagesList . innerHTML = '' ; // Leeren
106+ messages . forEach ( ( message ) => {
107+ const li = document . createElement ( 'li' ) ;
108+ li . classList . add ( 'message-item' ) ;
109+ li . innerHTML = `
110+ <div class="message-line">
111+ <img src="${ message . profilePic || 'default-avatar.png' } " class="message-pic">
112+ <span class="message-name">${ message . username } :</span>
113+ <span class="message-text">${ message . text } </span>
114+ </div>
115+ ` ;
116+ messagesList . appendChild ( li ) ;
117+ } ) ;
118+
119+ messagesList . scrollTop = messagesList . scrollHeight ;
120+ } ) ;
121+ document . getElementById ( 'deleteAccountBtn' ) . addEventListener ( 'click' , ( ) => {
122+ if ( confirm ( 'Willst du wirklich deinen Account und alle deine Nachrichten löschen? Diese Aktion ist unwiderruflich!' ) ) {
123+ socket . emit ( 'delete account' , { username : currentUsername } ) ;
124+ }
125+ } ) ;
126+ socket . on ( 'account deleted' , ( ) => {
127+ alert ( 'Dein Account wurde gelöscht. Du wirst ausgeloggt.' ) ;
128+ localStorage . clear ( ) ; // Alles vom User löschen (username, profilbild)
129+ window . location . href = '/' ; // Zurück zur Startseite
130+ } ) ;
131+ socket . on ( 'reload messages' , ( ) => {
132+ if ( currentRoom ) {
133+ // Raum neu joinen, um Messages neu zu laden
134+ messagesList . innerHTML = '' ;
135+ socket . emit ( 'join room' , { username : currentUsername , room : currentRoom } ) ;
136+ }
137+ } ) ;
138+
0 commit comments