-
Notifications
You must be signed in to change notification settings - Fork 43
/
chat.js
63 lines (63 loc) · 2.15 KB
/
chat.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Chat.Views.ChatView = Backbone.View.extend({
el: '.chat-wrapper',
events: {
'click #send-msg': 'sendMessage',
'keypress #chat-message': 'checkKey'
},
input: '#chat-message',
initialize: function() {
var self = this;
Chat.vent.on('message:add', self.renderMessage, self);
//event will be triggered when user was authorized in chat
Chat.vent.on('user:setCurrent', function(user) {
self.model = user;
}, self);
//event will be triggered when user was clicked in list
Chat.vent.on('user:select', self.selectUser, self);
Chat.vent.on('history:load', self.loadHistory, self);
},
renderMessage: function(message) {
var msg = new Chat.Views.Message({model: message});
var $container = this.$el.find('.chat-container');
$container.append(msg.render().el);
$container.animate({
scrollTop: $container[0].scrollHeight
}, 'slow');
return this;
},
sendMessage: function() {
var $input = this.$el.find(this.input);
var msg = $input.val();
$input.val('');
if (msg) {
//clear timestamp - it auto generated
this.model.set('timestamp', '');
this.model.set('message', msg);
this.model.set('type', 'info');
this.renderMessage(this.model);
Chat.vent.trigger('message:send', msg);
}
},
loadHistory: function(data) {
for (var key in data) {
var item = data[key];
var user = {
id: item.user_id, username: item.username, timestamp: item.timestamp,
message: item.message, avatar_16: item.avatar_16, avatar_32: item.avatar_32,
type: 'info'
};
this.renderMessage(new Chat.Models.User(user));
}
},
checkKey: function(e) {
//check if enter is pressed
if (e.keyCode === 13) {
this.sendMessage();
}
},
selectUser: function(name) {
if (this.model.get('username') != name) {
this.$el.find(this.input).val('@' + name + ':');
}
}
});