Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function($) {
- var BASEURL = (function() {
- var url = $('script[src$="irc.js"]').attr('src').replace(/\/js\/[^\/]+$/, '');
- if(url.match(/^\//) || !url) url = window.location.href.replace(/\/[\/\w#\?]+$/, '');
- window.console && console.log('BASEURL=' + url);
- return url;
- })();
- var url_replace = function(str, p1) {
- var text = p1;
- if(str.match(/\.png/i)) {
- text = '<img src="' + p1 + '" alt="' + p1 + '">';
- }
- else if(str.match(/\.jpe?g/i)) {
- text = '<img src="' + p1 + '" alt="' + p1 + '">';
- }
- else {
- }
- return '<a href="' + p1 + '" target="_blank">' + text + '</a>';
- };
- /*
- * flash fallback
- *
- if(!('WebSocket' in window)) {
- document.write([
- '<script type="text/javascript" src="' + BASEURL + '/js/swfobject.js"></script>',
- '<script type="text/javascript" src="' + BASEURL + '/js/FABridge.js"></script>',
- '<script type="text/javascript" src="' + BASEURL + '/js/web_socket.js"></script>'
- ].join(''));
- }
- if(WebSocket.__initialize) {
- // Set URL of your WebSocketMain.swf here:
- WebSocket.__swfLocation = BASEURL + '/js/WebSocketMain.swf';
- }
- */
- $(document).ready(function() {
- var chat = new WebSocket(BASEURL.replace(/^http/, 'ws') + '/chat');
- var ui = { history_index: 0, history: [] };
- var channel = 'betsy';
- var nick = 'b_guest';
- chat.init_commands = [
- 'NICK ' + nick,
- 'USER guest_username 8 * :Guest name',
- 'JOIN #' + channel
- ];
- chat.init_reader = function(e) {
- window.console && console.log(e.data);
- if(chat.init_commands.length) {
- chat.send(chat.init_commands.shift() + '\n');
- }
- else {
- ui.input.removeAttr('disabled');
- chat.onmessage = ui.print;
- }
- };
- chat.end = function() {
- ui.print({ internal_message: 1, data: 'Disconnected. <a href="">Reconnect?</a>' });
- ui.input.attr('disabled', 'disabled');
- };
- /* this code block is leaking memory, like there's no tomorrow :/
- chat.keep_ws_alive = function() {
- window.console && console.log('keepalive');
- if(chat.keep_ws_alive.timer) clearTimeout(chat.keep_ws_alive.timer);
- if(chat && chat.readyState == WebSocket.OPEN) chat.send(''); // keep the websocket alive
- return setInterval(chat.keep_ws_alive, 100000);
- };
- chat.keep_ws_alive.timer = chat.keep_ws_alive();
- */
- ui.input = $('#chat input');
- ui.input.keydown(function(e) {
- if(e.keyCode == 38) { // up
- ui.history_index++;
- if(ui.history_index >= ui.history.length) ui.history_index = ui.history.length - 1;
- ui.input.val(ui.history[ ui.history_index ]);
- }
- else if(e.keyCode == 40) { // down
- ui.history_index--;
- if(ui.history_index < 0) {
- ui.history_index = -1;
- ui.input.val('');
- }
- else {
- ui.input.val(ui.history[ ui.history_index ])
- }
- }
- });
- ui.output = $('#chat ul');
- ui.print = function(e) {
- var str = e.data; // can this be a partial buffer? maybe we need to buffer up and then split on \n?
- window.console && console.log(str);
- if(str.match(/^PING (\S*)/i)) {
- chat.send('PONG ' + RegExp.$1 + '\n');
- }
- else if(str.match(/^:([^!]+).*PRIVMSG #\w+ :(.*)/)) { // :batman!~batman@cm-84.208.177.18.getinternet.no PRIVMSG #betsy :some message
- var nick = RegExp.$1;
- var message = RegExp.$2
- .replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/"/g, '"')
- .replace(/(http:\/\/\S+)\.?/gi, url_replace);
- ;
- ui.output.append(
- '<li>'
- + '<span class="nick">' + nick + '</span>'
- + '<span class="message">' + message + '</span>'
- + '</li>'
- );
- }
- else if(str.match(/ 353 \w+ = #\w+ :(.*)/)) { // :magnet.shadowcat.co.uk 353 guest123 = #betsy :guest123 batman
- var n = RegExp.$1.split(' ').length;
- ui.output.append('<li>' + n + ' person(s) in chat room</li>');
- }
- else if(e.internal_message) {
- ui.output.append('<li>' + str + '</li>');
- }
- ui.output.scrollTop( ui.output.prop('scrollHeight') );
- };
- ui.paint = function() {
- $('#chat').height( $(window).height() - 70 );
- };
- $('#chat form').submit(function() {
- var buffer = ui.input.val();
- ui.input.val('').focus();
- if(buffer == '') return false;
- ui.history.unshift(buffer);
- if(buffer.match(/^\/(\w+)(.*)/)) {
- var cmd = RegExp.$1.toUpperCase();
- if(cmd == 'JOIN') return false;
- if(cmd == 'PART') return false;
- buffer = cmd + RegExp.$2;
- }
- else {
- buffer = 'PRIVMSG #' + channel + ' :' + buffer;
- }
- window.console && console.log('send: ' + buffer);
- if(chat) chat.send(buffer + '\n');
- ui.print({ data: ':' + nick + '!~echo@getbetsy.com PRIVMSG #dummy :' + buffer });
- return false;
- });
- $(window).bind('resize', ui.paint);
- chat.onclose = chat.end;
- chat.onopen = chat.init_reader;
- chat.onmessage = chat.init_reader;
- ui.input.attr('disabled', 'disabled');
- ui.paint();
- }); // end $(document).ready()
- })(jQuery);
Add Comment
Please, Sign In to add comment