doctype 5 html head link(href='/stylesheets/style.css', rel='stylesheet') script(src='http://code.jquery.com/jquery-1.6.1.min.js') script(src='/socket.io/socket.io.js') script // socket.io specific code var socket = io.connect(); socket.on('connect', function () { $('#chat').addClass('connected'); }); socket.on('announcement', function (msg) { $('#lines').append($('

').append($('').text(msg))); }); socket.on('nicknames', function (nicknames) { $('#nicknames').empty().append($('Online: ')); for (var i in nicknames) { $('#nicknames').append($('').text(nicknames[i])); } }); socket.on('user message', message); socket.on('reconnect', function () { $('#lines').remove(); message('System', 'Reconnected to the server'); }); socket.on('reconnecting', function () { message('System', 'Attempting to re-connect to the server'); }); socket.on('error', function (e) { message('System', e ? e : 'A unknown error occurred'); }); function message (from, msg) { $('#lines').append($('

').append($('').text(from), msg)); } // dom manipulation $(function () { $('#set-nickname').submit(function (ev) { socket.emit('nickname', $('#nick').val(), function (set) { if (!set) { clear(); return $('#chat').addClass('nickname-set'); } $('#nickname-err').css('visibility', 'visible'); }); return false; }); $('#send-message').submit(function () { message('me', $('#message').val()); socket.emit('user message', $('#message').val()); clear(); $('#lines').get(0).scrollTop = 10000000; return false; }); function clear () { $('#message').val('').focus(); }; }); body #chat #nickname form.wrap#set-nickname p Please type in your nickname and press enter. input#nick p#nickname-err Nickname already in use #connecting .wrap Connecting to socket.io server #messages #nicknames #lines form#send-message input#message button Send