var max_length = 50; var default_channel = "#channel1" if (window.location.hash.length == 0 && default_channel.length > 0) { window.location.replace(default_channel); } var channel = ""; var i; if ((i = window.location.hash.indexOf("#")) >= 0) { channel = window.location.hash.substring(i + 1); } function scrollDown() { $('html, body').animate({scrollTop: $('html, body').height()}, 1); } function cleanOld() { var elems = $("#chat li"); if (elems.length > max_length) { var i = elems.length - max_length; elems.each(function() { if (i > 0) { $(this).remove(); i--; return true; } else { return false; } }); } } function printMessage(msg) { $("#chat").append("
  • "+msg+"
  • "); cleanOld(); scrollDown(); } function setTopic(newTopic) { if (newTopic === "") { $("#topic").children("h3").html(" "); document.title = "IRC-SSE"; } else { $("#topic").children("h3").html(newTopic); document.title = newTopic + " - IRC-SSE"; } } function getUser(user) { return user.substring(0, user.indexOf('!')); } function privmsg(msg) { printMessage(msg.time + " <" + getUser(msg.user) + "> " + msg.message); } function action(msg) { printMessage(msg.time + " * " + getUser(msg.user) + " " + msg.action); } function join(msg) { printMessage(msg.time + " -!- " + msg.user + " joined"); } function leave(msg) { printMessage(msg.time + " -!- " + msg.user + " left"); } function quit(msg) { var output = msg.time + " -!- " + msg.user + " quit (" + msg.quitMsg + ")"; printMessage(output); } function kick(msg) { printMessage(msg.time + " -!- " + msg.kickee + " was kicked by " + msg.kicker + " reason: " + msg.message); } function rename(msg) { printMessage(msg.time + " -!- " + msg.oldname + " is now known as " + msg.newname); } function mode(msg) { var output = msg.time + " -!- mode/" + msg.channel + " [" + ((msg.set == true)?"+":"-") + msg.modes; $.each(msg.args, function(i, v) { if(v != null) { output += " " + v; } }); output += "] by " + getUser(msg.user); printMessage(output); } function topic(msg) { var output = msg.time + " -!- " + msg.user + " changed topic to " + msg.topic; printMessage(output); } function daychange(msg) { var output = msg.time + " Day changed to " + msg.date; printMessage(output); } function parseMsg(msg) { switch(msg.type) { case 'action': action(msg); break; case 'topic': topic(msg); setTopic(msg.topic); break; case 'privmsg': privmsg(msg); break; case 'mode': mode(msg); break; case 'leave': leave(msg); break; case 'join': join(msg); break; case 'kick': kick(msg); break; case 'rename': rename(msg); break; case 'daychange': daychange(msg); break; case 'refresh': location.reload(); break; case 'quit': quit(msg); break; default: break; } } $(document).ready(function() { if (channel.length > 0) { $.ajax({ url: "/backlog?" + channel, // crossDomain: true, dataType: "json", success: function(data) { setTopic(data.topic); $.each(data.msg, function(i, msg) { parseMsg(msg); }); } }); } $(window).on('hashchange', function() { location.reload(); }); }); ;(function($) { $.fn.textfill = function(options) { var fontSize = options.maxFontPixels; var ourText = $('#chat', this); var maxHeight = $(this).height(); var maxWidth = $(this).width(); var textHeight; var textWidth; do { ourText.css('font-size', fontSize); textHeight = ourText.height(); textWidth = ourText.width(); fontSize = fontSize - 1; } while ((textHeight > maxHeight || textWidth > maxWidth) && fontSize > 3); return this; } })(jQuery); //$(document).ready(function() { // $("#chat-container").textfill({ maxFontPixels: 100 }); //}); var evtSrc = new EventSource("/subscribe?" + channel); evtSrc.onmessage = function(e) { //console.log(e.data) parseMsg($.parseJSON(e.data)) }