1 | 'use strict'; |
||
2 | |||
3 | var app = { |
||
4 | |||
5 | rooms: function(){ |
||
6 | |||
7 | var socket = io('/rooms', { transports: ['websocket'] }); |
||
8 | |||
9 | // When socket connects, get a list of chatrooms |
||
10 | socket.on('connect', function () { |
||
11 | |||
12 | // Update rooms list upon emitting updateRoomsList event |
||
13 | socket.on('updateRoomsList', function(room) { |
||
14 | |||
15 | // Display an error message upon a user error(i.e. creating a room with an existing title) |
||
16 | $('.room-create p.message').remove(); |
||
17 | if(room.error != null){ |
||
18 | $('.room-create').append(`<p class="message error">${room.error}</p>`); |
||
19 | }else{ |
||
20 | app.helpers.updateRoomsList(room); |
||
21 | } |
||
22 | }); |
||
23 | |||
24 | // Whenever the user hits the create button, emit createRoom event. |
||
25 | $('.room-create button').on('click', function(e) { |
||
0 ignored issues
–
show
|
|||
26 | var inputEle = $("input[name='title']"); |
||
27 | var roomTitle = inputEle.val().trim(); |
||
28 | if(roomTitle !== '') { |
||
29 | socket.emit('createRoom', roomTitle); |
||
30 | inputEle.val(''); |
||
31 | } |
||
32 | }); |
||
33 | |||
34 | }); |
||
35 | }, |
||
36 | |||
37 | chat: function(roomId, username){ |
||
38 | |||
39 | var socket = io('/chatroom', { transports: ['websocket'] }); |
||
40 | |||
41 | // When socket connects, join the current chatroom |
||
42 | socket.on('connect', function () { |
||
43 | |||
44 | socket.emit('join', roomId); |
||
45 | |||
46 | // Update users list upon emitting updateUsersList event |
||
47 | socket.on('updateUsersList', function(users, clear) { |
||
48 | |||
49 | $('.container p.message').remove(); |
||
50 | if(users.error != null){ |
||
51 | $('.container').html(`<p class="message error">${users.error}</p>`); |
||
52 | }else{ |
||
53 | app.helpers.updateUsersList(users, clear); |
||
54 | } |
||
55 | }); |
||
56 | |||
57 | // Whenever the user hits the save button, emit newMessage event. |
||
58 | $(".chat-message button").on('click', function(e) { |
||
0 ignored issues
–
show
|
|||
59 | |||
60 | var textareaEle = $("textarea[name='message']"); |
||
61 | var messageContent = textareaEle.val().trim(); |
||
62 | if(messageContent !== '') { |
||
63 | var message = { |
||
64 | content: messageContent, |
||
65 | username: username, |
||
66 | date: Date.now() |
||
67 | }; |
||
68 | |||
69 | socket.emit('newMessage', roomId, message); |
||
70 | textareaEle.val(''); |
||
71 | app.helpers.addMessage(message); |
||
72 | } |
||
73 | }); |
||
74 | |||
75 | // Whenever a user leaves the current room, remove the user from users list |
||
76 | socket.on('removeUser', function(userId) { |
||
77 | $('li#user-' + userId).remove(); |
||
78 | app.helpers.updateNumOfUsers(); |
||
79 | }); |
||
80 | |||
81 | // Append a new message |
||
82 | socket.on('addMessage', function(message) { |
||
83 | app.helpers.addMessage(message); |
||
84 | }); |
||
85 | }); |
||
86 | }, |
||
87 | |||
88 | helpers: { |
||
89 | |||
90 | encodeHTML: function (str){ |
||
91 | return $('<div />').text(str).html(); |
||
92 | }, |
||
93 | |||
94 | // Update rooms list |
||
95 | updateRoomsList: function(room){ |
||
96 | room.title = this.encodeHTML(room.title); |
||
97 | var html = `<a href="/chat/${room._id}"><li class="room-item">${room.title}</li></a>`; |
||
98 | |||
99 | if(html === ''){ return; } |
||
100 | |||
101 | if($(".room-list ul li").length > 0){ |
||
102 | $('.room-list ul').prepend(html); |
||
103 | }else{ |
||
104 | $('.room-list ul').html('').html(html); |
||
105 | } |
||
106 | |||
107 | this.updateNumOfRooms(); |
||
108 | }, |
||
109 | |||
110 | // Update users list |
||
111 | updateUsersList: function(users, clear){ |
||
112 | if(users.constructor !== Array){ |
||
113 | users = [users]; |
||
114 | } |
||
115 | |||
116 | var html = ''; |
||
117 | for(var user of users) { |
||
118 | user.username = this.encodeHTML(user.username); |
||
119 | html += `<li class="clearfix" id="user-${user._id}"> |
||
120 | <img src="${user.picture}" alt="${user.username}" /> |
||
121 | <div class="about"> |
||
122 | <div class="name">${user.username}</div> |
||
123 | <div class="status"><i class="fa fa-circle online"></i> online</div> |
||
124 | </div></li>`; |
||
125 | } |
||
126 | |||
127 | if(html === ''){ return; } |
||
128 | |||
129 | if(clear != null && clear == true){ |
||
130 | $('.users-list ul').html('').html(html); |
||
131 | }else{ |
||
132 | $('.users-list ul').prepend(html); |
||
133 | } |
||
134 | |||
135 | this.updateNumOfUsers(); |
||
136 | }, |
||
137 | |||
138 | // Adding a new message to chat history |
||
139 | addMessage: function(message){ |
||
140 | message.date = (new Date(message.date)).toLocaleString(); |
||
141 | message.username = this.encodeHTML(message.username); |
||
142 | message.content = this.encodeHTML(message.content); |
||
143 | |||
144 | var html = `<li> |
||
145 | <div class="message-data"> |
||
146 | <span class="message-data-name">${message.username}</span> |
||
147 | <span class="message-data-time">${message.date}</span> |
||
148 | </div> |
||
149 | <div class="message my-message" dir="auto">${message.content}</div> |
||
150 | </li>`; |
||
151 | $(html).hide().appendTo('.chat-history ul').slideDown(200); |
||
152 | |||
153 | // Keep scroll bar down |
||
154 | $(".chat-history").animate({ scrollTop: $('.chat-history')[0].scrollHeight}, 1000); |
||
155 | }, |
||
156 | |||
157 | // Update number of rooms |
||
158 | // This method MUST be called after adding a new room |
||
159 | updateNumOfRooms: function(){ |
||
160 | var num = $('.room-list ul li').length; |
||
161 | $('.room-num-rooms').text(num + " Room(s)"); |
||
162 | }, |
||
163 | |||
164 | // Update number of online users in the current room |
||
165 | // This method MUST be called after adding, or removing list element(s) |
||
166 | updateNumOfUsers: function(){ |
||
167 | var num = $('.users-list ul li').length; |
||
168 | $('.chat-num-users').text(num + " User(s)"); |
||
169 | } |
||
170 | } |
||
171 | }; |
||
172 |
This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.