main.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // This file is part of Mongoose project, http://code.google.com/p/mongoose
  2. // $Id: main.js 514 2010-05-03 11:06:27Z valenok $
  3. var chat = {
  4. // Backend URL, string.
  5. // 'http://backend.address.com' or '' if backend is the same as frontend
  6. backendUrl: '',
  7. maxVisibleMessages: 10,
  8. errorMessageFadeOutTimeoutMs: 2000,
  9. errorMessageFadeOutTimer: null,
  10. lastMessageId: 0,
  11. };
  12. chat.refresh = function(data) {
  13. $.each(data, function(index, entry) {
  14. var row = $('<div>').addClass('message-row').appendTo('#mml');
  15. var timestamp = (new Date(entry.timestamp * 1000)).toLocaleTimeString();
  16. $('<span>').addClass('message-timestamp').html(
  17. '[' + timestamp + ']').prependTo(row);
  18. $('<span>').addClass('message-user').html(entry.user + ':').appendTo(row);
  19. $('<span>').addClass('message-text').html(entry.text).appendTo(row);
  20. chat.lastMessageId = Math.max(chat.lastMessageId, entry.id) + 1;
  21. });
  22. // TODO(lsm): keep only chat.maxVisibleMessages, delete older ones.
  23. /*
  24. while ($('#mml').children().length < chat.maxVisibleMessages) {
  25. $('#mml').children()[0].remove();
  26. }
  27. */
  28. };
  29. chat.getMessages = function() {
  30. $.ajax({
  31. dataType: 'jsonp',
  32. url: chat.backendUrl + '/ajax/get_messages',
  33. data: {last_id: chat.lastMessageId},
  34. success: chat.refresh,
  35. error: function() {
  36. },
  37. });
  38. };
  39. chat.handleMenuItemClick = function(ev) {
  40. $('.menu-item').removeClass('menu-item-selected'); // Deselect menu buttons
  41. $(this).addClass('menu-item-selected'); // Select clicked button
  42. $('.main').addClass('hidden'); // Hide all main windows
  43. $('#' + $(this).attr('name')).removeClass('hidden'); // Show main window
  44. };
  45. chat.showError = function(message) {
  46. $('#error').html(message).fadeIn('fast');
  47. window.clearTimeout(chat.errorMessageFadeOutTimer);
  48. chat.errorMessageFadeOutTimer = window.setTimeout(function() {
  49. $('#error').fadeOut('slow');
  50. }, chat.errorMessageFadeOutTimeoutMs);
  51. };
  52. chat.handleMessageInput = function(ev) {
  53. var input = ev.target;
  54. if (ev.keyCode != 13 || !input.value)
  55. return;
  56. input.disabled = true;
  57. $.ajax({
  58. dataType: 'jsonp',
  59. url: chat.backendUrl + '/ajax/send_message',
  60. data: {text: input.value},
  61. success: function(ev) {
  62. input.value = '';
  63. input.disabled = false;
  64. chat.getMessages();
  65. },
  66. error: function(ev) {
  67. chat.showError('Error sending message');
  68. input.disabled = false;
  69. },
  70. });
  71. };
  72. $(document).ready(function() {
  73. $('.menu-item').click(chat.handleMenuItemClick);
  74. $('.message-input').keypress(chat.handleMessageInput);
  75. chat.getMessages();
  76. });
  77. // vim:ts=2:sw=2:et