mirror of
https://github.com/sstent/node.git
synced 2026-03-16 09:55:58 +00:00
100 lines
3.4 KiB
JavaScript
100 lines
3.4 KiB
JavaScript
// Generated by CoffeeScript 1.3.1
|
|
var NUM_USER_IMAGES, get, getRoom, ready, view, _ref;
|
|
|
|
_ref = require('derby').createApp(module), get = _ref.get, view = _ref.view, ready = _ref.ready;
|
|
|
|
NUM_USER_IMAGES = 10;
|
|
|
|
get('/:room?', function(page, model, _arg) {
|
|
var room, userId, _room;
|
|
room = _arg.room;
|
|
if (!(room && /^[-\w ]+$/.test(room))) {
|
|
return page.redirect('/lobby');
|
|
}
|
|
_room = room.toLowerCase().replace(/[_ ]/g, '-');
|
|
if (_room !== room) {
|
|
return page.redirect("/" + _room);
|
|
}
|
|
if (userId = model.get('_session.userId')) {
|
|
return getRoom(page, model, room, userId);
|
|
}
|
|
return model.async.incr('configs.1.nextUserId', function(err, userId) {
|
|
model.set('_session.userId', userId);
|
|
model.set("users." + userId, {
|
|
name: 'User ' + userId,
|
|
picClass: 'pic' + (userId % NUM_USER_IMAGES)
|
|
});
|
|
return getRoom(page, model, room, userId);
|
|
});
|
|
});
|
|
|
|
getRoom = function(page, model, roomName, userId) {
|
|
return model.subscribe("rooms." + roomName, 'users', function(err, room, users) {
|
|
model.ref('_room', room);
|
|
model.setNull('_room.messages', []);
|
|
model.set('_newComment', '');
|
|
model.ref('_user', "users." + userId);
|
|
model.fn('_numMessages', '_room.messages', function(messages) {
|
|
return messages.length;
|
|
});
|
|
return page.render();
|
|
});
|
|
};
|
|
|
|
ready(function(model) {
|
|
var atBottom, displayTime, i, message, messageList, messages, months, _i, _len, _ref1;
|
|
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
displayTime = function(time) {
|
|
var hours, minutes, period;
|
|
time = new Date(time);
|
|
hours = time.getHours();
|
|
period = hours < 12 ? ' am, ' : ' pm, ';
|
|
hours = (hours % 12) || 12;
|
|
minutes = time.getMinutes();
|
|
if (minutes < 10) {
|
|
minutes = '0' + minutes;
|
|
}
|
|
return hours + ':' + minutes + period + months[time.getMonth()] + ' ' + time.getDate() + ', ' + time.getFullYear();
|
|
};
|
|
_ref1 = model.get('_room.messages');
|
|
for (i = _i = 0, _len = _ref1.length; _i < _len; i = ++_i) {
|
|
message = _ref1[i];
|
|
model.set("_room.messages." + i + "._displayTime", displayTime(message.time));
|
|
}
|
|
model.set('_showReconnect', true);
|
|
exports.connect = function() {
|
|
model.set('_showReconnect', false);
|
|
setTimeout((function() {
|
|
return model.set('_showReconnect', true);
|
|
}), 1000);
|
|
return model.socket.socket.connect();
|
|
};
|
|
exports.reload = function() {
|
|
return window.location.reload();
|
|
};
|
|
messages = document.getElementById('messages');
|
|
messageList = document.getElementById('messageList');
|
|
atBottom = true;
|
|
model.on('pre:push', '_room.messages', function() {
|
|
var bottom, containerHeight, scrollBottom;
|
|
bottom = messageList.offsetHeight;
|
|
containerHeight = messages.offsetHeight;
|
|
scrollBottom = messages.scrollTop + containerHeight;
|
|
return atBottom = bottom < containerHeight || scrollBottom === bottom;
|
|
});
|
|
model.on('push', '_room.messages', function(message, len, isLocal) {
|
|
if (isLocal || atBottom) {
|
|
messages.scrollTop = messageList.offsetHeight;
|
|
}
|
|
return model.set("_room.messages." + (len - 1) + "._displayTime", displayTime(message.time));
|
|
});
|
|
return exports.postMessage = function() {
|
|
model.push('_room.messages', {
|
|
userId: model.get('_session.userId'),
|
|
comment: model.get('_newComment'),
|
|
time: +(new Date)
|
|
});
|
|
return model.set('_newComment', '');
|
|
};
|
|
});
|