Mercurial > cosocket
view openwebchat.js @ 50:f78b986ecb6e
OWC now remembers your name.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Tue, 28 Apr 2009 19:08:16 +0000 |
parents | 4e21d301ea27 |
children | 3071f85fb694 |
line wrap: on
line source
var OpenWebChat = { startMessageListener: function startMessageListener(options) { var req = new XMLHttpRequest(); req.multipart = true; req.open('GET', 'listen/multipart', true); req.overrideMimeType('application/json'); req.addEventListener( "error", function() { options.onError(null); }, false ); req.addEventListener( "load", function onload(evt) { var msg; var errorOccurred = false; try { msg = JSON.parse(req.responseText); } catch (e) { options.onError(e); errorOccurred = true; } if (!errorOccurred) options.onMessage(msg); }, false ); req.send(null); }, sendMessage: function sendMessage(msg) { var req = new XMLHttpRequest(); req.open('POST', 'send', true); req.overrideMimeType('application/json'); req.send(JSON.stringify(msg)); } }; $(window).ready( function() { var ENTER_KEYCODE = 13; var MAX_ANIMATING_MESSAGES = 3; var animatingMessages = 0; var localStorage = globalStorage[document.location.hostname]; if (!localStorage.name) localStorage.name = "A Mysterious Stranger"; $('#name').val(localStorage.name.value); $('#name').blur( function() { localStorage.name = $('#name').val(); }); $('#outgoing-message').focus(); $('#outgoing-message').keydown( function(evt) { var content = $(this).val(); var author = $('#name').val(); if (evt.keyCode == ENTER_KEYCODE) { if (content) { $(this).val(''); var msg = {content: content, time: new Date()}; if (author) msg.author = author; OpenWebChat.sendMessage(msg); } evt.preventDefault(); } }); OpenWebChat.startMessageListener( {onMessage: function onMessage(msg) { var block = $('#templates .message').clone(); $('.content', block).html(msg.content); var author = msg.author ? msg.author : 'Anonymous'; if (author != $('#content .author:last').text()) $('.author', block).text(author); else $('.author', block).remove(); $('.timestamp', block).text(msg.time); block.hide(); $('#incoming-messages').append(block); if (animatingMessages < MAX_ANIMATING_MESSAGES) { animatingMessages += 1; block.slideDown( function() { animatingMessages -= 1; window.scrollTo(0, $('#bottom').position().top); }); } else block.show(); }, onError: function onError(exception) { if (window.console) window.console.log('The error', exception, 'occurred.'); var error = $('#templates .error').clone(); error.hide(); $('#incoming-messages').append(error); error.slideDown(); } }); });