-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchat.js
113 lines (87 loc) · 2.94 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Messages = new Meteor.Collection("messages");
if (Meteor.is_client) {
Template.entry.events = {
'keyup #entry': function(event) {
if (event.keyCode == 13)
{
Meteor.call('addMessage', $('#nick').val(), $('#entry').val(), function (error, result) {
if (error)
alert(error);
});
$('#entry').val('');
}
}
};
Template.messages.messages = function() {
return Messages.find();
};
Template.message.formatted_time= function() {
var date = new Date(this.time);
return date.toLocaleTimeString();
};
function finishMessageEdit(messageId, messageDiv)
{
var messageText = messageDiv.find('.text');
Meteor.call('changeMessage', messageId, messageText.val(), function (error, result) {
if (error)
{
alert(error);
}
else
{
messageText.replaceWith(function (){
return '<span class="text">' + $(this).val() + '</span>';
});
messageDiv.find('.edit').removeClass('icon-ok').addClass('icon-pencil');
}
});
}
function startMessageEdit(messageId, messageDiv)
{
var messageText = messageDiv.find('.text');
var messageInput = $('<input type="text" class="text" value="' + messageText.html() + '">');
messageInput.keyup(function(event) {
if (event.keyCode == 13)
finishMessageEdit(messageId, messageDiv);
});
messageText.replaceWith(function (){
return messageInput;
});
messageInput.focus();
messageDiv.find('.edit').removeClass('icon-pencil').addClass('icon-ok');
}
Template.message.events = {
'click .edit': function (event) {
var messageDiv = $(event.target).parent();
var messageText = messageDiv.find('.text');
if (messageText.get(0).tagName == 'INPUT')
{
finishMessageEdit(this._id, messageDiv);
}
else
{
startMessageEdit(this._id, messageDiv);
}
}
};
}
if (Meteor.is_server) {
function disableClientMongo() {
_.each(['messages'], function(collection) {
_.each(['insert', 'update', 'remove'], function(method) {
Meteor.default_server.method_handlers['/' + collection + '/' + method] = function() {};
});
});
};
Meteor.startup(function () {
disableClientMongo();
});
Meteor.methods({
addMessage: function(nick, message) {
Messages.insert({nick:nick, message:message, time:Date.now()});
},
changeMessage: function(messageId, messageText) {
Messages.update({_id:messageId}, {'$set':{message : messageText}});
}
});
}