Issues (34)

public/js/main.js (2 issues)

Severity
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
The parameter e is not used and could be removed.

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.

Loading history...
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
The parameter e is not used and could be removed.

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.

Loading history...
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