Guest User

Untitled

a guest
Oct 21st, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.45 KB | None | 0 0
  1. (function($) {
  2.  
  3. var BASEURL = (function() {
  4. var url = $('script[src$="irc.js"]').attr('src').replace(/\/js\/[^\/]+$/, '');
  5. if(url.match(/^\//) || !url) url = window.location.href.replace(/\/[\/\w#\?]+$/, '');
  6. window.console && console.log('BASEURL=' + url);
  7. return url;
  8. })();
  9.  
  10. var url_replace = function(str, p1) {
  11. var text = p1;
  12.  
  13. if(str.match(/\.png/i)) {
  14. text = '<img src="' + p1 + '" alt="' + p1 + '">';
  15. }
  16. else if(str.match(/\.jpe?g/i)) {
  17. text = '<img src="' + p1 + '" alt="' + p1 + '">';
  18. }
  19. else {
  20. }
  21.  
  22. return '<a href="' + p1 + '" target="_blank">' + text + '</a>';
  23. };
  24.  
  25. /*
  26. * flash fallback
  27. *
  28. if(!('WebSocket' in window)) {
  29. document.write([
  30. '<script type="text/javascript" src="' + BASEURL + '/js/swfobject.js"></script>',
  31. '<script type="text/javascript" src="' + BASEURL + '/js/FABridge.js"></script>',
  32. '<script type="text/javascript" src="' + BASEURL + '/js/web_socket.js"></script>'
  33. ].join(''));
  34. }
  35. if(WebSocket.__initialize) {
  36. // Set URL of your WebSocketMain.swf here:
  37. WebSocket.__swfLocation = BASEURL + '/js/WebSocketMain.swf';
  38. }
  39. */
  40.  
  41.  
  42. $(document).ready(function() {
  43. var chat = new WebSocket(BASEURL.replace(/^http/, 'ws') + '/chat');
  44. var ui = { history_index: 0, history: [] };
  45. var channel = 'betsy';
  46. var nick = 'b_guest';
  47.  
  48. chat.init_commands = [
  49. 'NICK ' + nick,
  50. 'USER guest_username 8 * :Guest name',
  51. 'JOIN #' + channel
  52. ];
  53. chat.init_reader = function(e) {
  54. window.console && console.log(e.data);
  55. if(chat.init_commands.length) {
  56. chat.send(chat.init_commands.shift() + '\n');
  57. }
  58. else {
  59. ui.input.removeAttr('disabled');
  60. chat.onmessage = ui.print;
  61. }
  62. };
  63. chat.end = function() {
  64. ui.print({ internal_message: 1, data: 'Disconnected. <a href="">Reconnect?</a>' });
  65. ui.input.attr('disabled', 'disabled');
  66. };
  67.  
  68. /* this code block is leaking memory, like there's no tomorrow :/
  69. chat.keep_ws_alive = function() {
  70. window.console && console.log('keepalive');
  71. if(chat.keep_ws_alive.timer) clearTimeout(chat.keep_ws_alive.timer);
  72. if(chat && chat.readyState == WebSocket.OPEN) chat.send(''); // keep the websocket alive
  73. return setInterval(chat.keep_ws_alive, 100000);
  74. };
  75. chat.keep_ws_alive.timer = chat.keep_ws_alive();
  76. */
  77.  
  78. ui.input = $('#chat input');
  79. ui.input.keydown(function(e) {
  80. if(e.keyCode == 38) { // up
  81. ui.history_index++;
  82. if(ui.history_index >= ui.history.length) ui.history_index = ui.history.length - 1;
  83. ui.input.val(ui.history[ ui.history_index ]);
  84. }
  85. else if(e.keyCode == 40) { // down
  86. ui.history_index--;
  87. if(ui.history_index < 0) {
  88. ui.history_index = -1;
  89. ui.input.val('');
  90. }
  91. else {
  92. ui.input.val(ui.history[ ui.history_index ])
  93. }
  94. }
  95. });
  96.  
  97. ui.output = $('#chat ul');
  98. ui.print = function(e) {
  99. var str = e.data; // can this be a partial buffer? maybe we need to buffer up and then split on \n?
  100. window.console && console.log(str);
  101. if(str.match(/^PING (\S*)/i)) {
  102. chat.send('PONG ' + RegExp.$1 + '\n');
  103. }
  104. else if(str.match(/^:([^!]+).*PRIVMSG #\w+ :(.*)/)) { // :batman!~batman@cm-84.208.177.18.getinternet.no PRIVMSG #betsy :some message
  105. var nick = RegExp.$1;
  106. var message = RegExp.$2
  107. .replace(/&/g, '&')
  108. .replace(/</g, '<')
  109. .replace(/>/g, '>')
  110. .replace(/"/g, '"')
  111. .replace(/(http:\/\/\S+)\.?/gi, url_replace);
  112. ;
  113.  
  114. ui.output.append(
  115. '<li>'
  116. + '<span class="nick">' + nick + '</span>'
  117. + '<span class="message">' + message + '</span>'
  118. + '</li>'
  119. );
  120. }
  121.  
  122. else if(str.match(/ 353 \w+ = #\w+ :(.*)/)) { // :magnet.shadowcat.co.uk 353 guest123 = #betsy :guest123 batman
  123. var n = RegExp.$1.split(' ').length;
  124. ui.output.append('<li>' + n + ' person(s) in chat room</li>');
  125. }
  126. else if(e.internal_message) {
  127. ui.output.append('<li>' + str + '</li>');
  128. }
  129.  
  130. ui.output.scrollTop( ui.output.prop('scrollHeight') );
  131. };
  132. ui.paint = function() {
  133. $('#chat').height( $(window).height() - 70 );
  134. };
  135.  
  136. $('#chat form').submit(function() {
  137. var buffer = ui.input.val();
  138. ui.input.val('').focus();
  139. if(buffer == '') return false;
  140. ui.history.unshift(buffer);
  141.  
  142. if(buffer.match(/^\/(\w+)(.*)/)) {
  143. var cmd = RegExp.$1.toUpperCase();
  144. if(cmd == 'JOIN') return false;
  145. if(cmd == 'PART') return false;
  146. buffer = cmd + RegExp.$2;
  147. }
  148. else {
  149. buffer = 'PRIVMSG #' + channel + ' :' + buffer;
  150. }
  151.  
  152. window.console && console.log('send: ' + buffer);
  153. if(chat) chat.send(buffer + '\n');
  154. ui.print({ data: ':' + nick + '!~echo@getbetsy.com PRIVMSG #dummy :' + buffer });
  155. return false;
  156. });
  157.  
  158. $(window).bind('resize', ui.paint);
  159.  
  160. chat.onclose = chat.end;
  161. chat.onopen = chat.init_reader;
  162. chat.onmessage = chat.init_reader;
  163. ui.input.attr('disabled', 'disabled');
  164. ui.paint();
  165. }); // end $(document).ready()
  166. })(jQuery);
Add Comment
Please, Sign In to add comment