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();
       }
      });
  });