in chat.js [30:90]
var chatHandler = function(message) {
var type = message.getAttribute('type');
var from = message.getAttribute('from');
switch (type) {
// Incoming chat message
case 'chat' : {
var text = message.childNodes[0].data;
if (from == last) from = '...';
else {
last = from;
from += ':';
}
chat.innerHTML += '<span class=\'from\'>' + from + ' </span><span class=\'text\'>' + text + '</span><br/>';
break;
}
// Incoming ping request, add the person's name to your list.
case 'ping' : {
members.innerHTML += '<span class="member">' + from + '</span><br/>';
break;
}
// someone new joined the chatroom, clear your list and
// broadcast your name to all users.
case 'join' : {
members.innerHTML = '';
if (user != null)
amq.sendMessage(chatTopic, '<message type="ping" from="' + user + '"/>');
chat.innerHTML += '<span class="alert"><span class="from">' + from + ' </span><span class="text">has joined the room!</span></span><br/>';
break;
}
// Screw you guys, I'm going home...
// When I (and everyone else) receive a leave message, we broadcast
// our own names in a ping in order to update everyone's list.
// todo: Make this more efficient by simply removing the person's name from the list.
case 'leave': {
members.innerHTML = '';
chat.innerHTML += '<span class="alert"><span class="from">' + from + ' </span><span class="text">has left the room!</span></span><br/>';
// If we are the one that is leaving...
if (from == user) {
// switch the input form
join.className = '';
joined.className = 'hidden';
username.focus();
user = null;
amq.removeListener('chat', chatTopic);
}
if (user != null)
amq.sendMessage(chatTopic, '<message type="ping" from="' + user + '"/>');
break;
}
}
chat.scrollTop = chat.scrollHeight - chat.clientHeight;
};