<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Reliable Chat</title>
- <link rel="stylesheet" title="Default style" href="rc.css" type="text/css"/>
- <script type="text/javascript" src="rc.js"></script>
+ <style type="text/css"><!--/*--><![CDATA[/*><!--*/
+ html, body, #outer-table, #history { width: 99.9%; height: 100%; margin: 0; padding: 0 }
+ #status { background-color: #eef }
+ #say { width: 100% }
+ #history { vertical-align: bottom }
+ img { width: 1px; height: 1px; }
+ iframe { display: none }
+ #status span { margin-right: 2em }
+ #status span.sad { background-color: #fee }
+ #status span.happy { background-color: #efe }
+ /*]]>*/--></style>
+ <script type="text/javascript"><!--//--><![CDATA[//><!--
+ var servers = ['chkno.net', 'rc2.chkno.net', 'echto.net', 'the-wes.com', 'vibrantlogic.com'];
+
+ var session = Math.random();
+ var seen = {};
+
+ function rcnick() {
+ var nick = localStorage.getItem("nick");
+ if (nick) {
+ return nick;
+ }
+ return 'anonymous';
+ }
+
+ function rcsetnick(new_nick) {
+ localStorage.setItem("nick", new_nick);
+ }
+
+ function rcserverbase(server) {
+ // Add the default port if server doesn't contain a port number already
+ if (server.indexOf(":") == -1) {
+ return "http://" + server + ":21059";
+ } else {
+ return "http://" + server;
+ }
+ }
+
+ function rcchangeserverstatus(server, new_status) {
+ var statusbar = document.getElementById("status");
+ var spans = statusbar.getElementsByTagName("span");
+ for (var i in spans) {
+ if (spans[i].firstChild && 'data' in spans[i].firstChild && spans[i].firstChild.data == server) {
+ spans[i].setAttribute("class", new_status);
+ }
+ }
+ }
+
+ function rcaddmessagetohistory(message) {
+ var d = document.createElement("div");
+ d.appendChild(document.createTextNode(message));
+ var h = document.getElementById("history");
+ h.appendChild(d);
+ window.scrollTo(0, document.body.scrollHeight);
+ return d;
+ }
+
+ function make_seen_key(id, text) {
+ return id.replace(/@/g, "@@") + "_@_" + text.replace(/@/g, "@@");
+ }
+
+ function receiveMessage(server, time, id, text) {
+ var seen_key = make_seen_key(id, text);
+ if (!(seen_key in seen)) {
+ seen[seen_key] = true;
+ rcaddmessagetohistory(text);
+ for (var i in servers) {
+ rcchangeserverstatus(servers[i], "sad");
+ }
+ }
+ rcchangeserverstatus(server, "happy");
+ }
+
+ function receiveMessageEvent(event)
+ {
+ for (var i in servers) {
+ if (event.origin === rcserverbase(servers[i])) {
+ messages = JSON.parse(event.data);
+ for (var j in messages) {
+ if ('Time' in messages[j] &&
+ 'ID' in messages[j] &&
+ 'Text' in messages[j]) {
+ receiveMessage(servers[i], messages[j]['Time'], messages[j]['ID'], messages[j]['Text']);
+ }
+ }
+ }
+ }
+ }
+
+ function rcconnect() {
+ window.addEventListener("message", receiveMessageEvent, false);
+ for (var i in servers) {
+ // Create a hidden iframe for same-origin workaround
+ var iframe = document.createElement("iframe");
+ iframe.setAttribute("src", rcserverbase(servers[i]) + "/frame");
+ document.body.insertBefore(iframe, document.body.firstChild);
+ // Status bar entry
+ var status_indicator = document.createElement("span");
+ status_indicator.appendChild(document.createTextNode(servers[i]));
+ status_indicator.setAttribute("class", "sad");
+ document.getElementById("status").appendChild(status_indicator);
+ }
+ if (rcnick() == 'anonymous') {
+ rcaddmessagetohistory("-!- Set your nick with /nick");
+ }
+ }
+
+ function rcsend(d, message) {
+ var id = new Date().getTime() + "-" + session + "-" + Math.random();
+ seen[make_seen_key(id, message)] = true;
+ var path = "/speak" +
+ "?id=" + encodeURIComponent(id) +
+ "&text=" + encodeURIComponent(message);
+ for (var i in servers) {
+ var uri = rcserverbase(servers[i]) + path;
+ var img = document.createElement("img");
+ img.setAttribute("src", uri);
+ d.appendChild(img);
+ }
+ }
+
+ function rckeydown(event) {
+ if (event.keyCode == 13) {
+ var input = document.input.say.value;
+ document.input.say.value = "";
+
+ // Check nick change
+ var message;
+ var re = /^\/nick (.*)/;
+ var match = re.exec(input);
+ if (match) {
+ message = "*** " + rcnick() + " is now known as " + match[1];
+ rcsetnick(match[1]);
+ } else {
+ message = "<" + rcnick() + "> " + input;
+ }
+
+ // Remind people to set their nick
+ if (rcnick() == 'anonymous') {
+ rcaddmessagetohistory("-!- Set your nick with /nick");
+ }
+
+ // Say the message
+ var d = rcaddmessagetohistory(message);
+ rcsend(d, message);
+ }
+ }
+ //--><!]]></script>
+
</head>
<body onload="rcconnect()">
+++ /dev/null
-var servers = ['chkno.net', 'rc2.chkno.net', 'echto.net', 'the-wes.com', 'vibrantlogic.com'];
-
-var session = Math.random();
-var seen = {};
-
-function rcnick() {
- var nick = localStorage.getItem("nick");
- if (nick) {
- return nick;
- }
- return 'anonymous';
-}
-
-function rcsetnick(new_nick) {
- localStorage.setItem("nick", new_nick);
-}
-
-function rcserverbase(server) {
- // Add the default port if server doesn't contain a port number already
- if (server.indexOf(":") == -1) {
- return "http://" + server + ":21059";
- } else {
- return "http://" + server;
- }
-}
-
-function rcchangeserverstatus(server, new_status) {
- var statusbar = document.getElementById("status");
- var spans = statusbar.getElementsByTagName("span");
- for (var i in spans) {
- if (spans[i].firstChild && 'data' in spans[i].firstChild && spans[i].firstChild.data == server) {
- spans[i].setAttribute("class", new_status);
- }
- }
-}
-
-function rcaddmessagetohistory(message) {
- var d = document.createElement("div");
- d.appendChild(document.createTextNode(message));
- var h = document.getElementById("history");
- h.appendChild(d);
- window.scrollTo(0, document.body.scrollHeight);
- return d;
-}
-
-function make_seen_key(id, text) {
- return id.replace(/@/g, "@@") + "_@_" + text.replace(/@/g, "@@");
-}
-
-function receiveMessage(server, time, id, text) {
- var seen_key = make_seen_key(id, text);
- if (!(seen_key in seen)) {
- seen[seen_key] = true;
- rcaddmessagetohistory(text);
- for (var i in servers) {
- rcchangeserverstatus(servers[i], "sad");
- }
- }
- rcchangeserverstatus(server, "happy");
-}
-
-function receiveMessageEvent(event)
-{
- for (var i in servers) {
- if (event.origin === rcserverbase(servers[i])) {
- messages = JSON.parse(event.data);
- for (var j in messages) {
- if ('Time' in messages[j] &&
- 'ID' in messages[j] &&
- 'Text' in messages[j]) {
- receiveMessage(servers[i], messages[j]['Time'], messages[j]['ID'], messages[j]['Text']);
- }
- }
- }
- }
-}
-
-function rcconnect() {
- window.addEventListener("message", receiveMessageEvent, false);
- for (var i in servers) {
- // Create a hidden iframe for same-origin workaround
- var iframe = document.createElement("iframe");
- iframe.setAttribute("src", rcserverbase(servers[i]) + "/frame");
- document.body.insertBefore(iframe, document.body.firstChild);
- // Status bar entry
- var status_indicator = document.createElement("span");
- status_indicator.appendChild(document.createTextNode(servers[i]));
- status_indicator.setAttribute("class", "sad");
- document.getElementById("status").appendChild(status_indicator);
- }
- if (rcnick() == 'anonymous') {
- rcaddmessagetohistory("-!- Set your nick with /nick");
- }
-}
-
-function rcsend(d, message) {
- var id = new Date().getTime() + "-" + session + "-" + Math.random();
- seen[make_seen_key(id, message)] = true;
- var path = "/speak" +
- "?id=" + encodeURIComponent(id) +
- "&text=" + encodeURIComponent(message);
- for (var i in servers) {
- var uri = rcserverbase(servers[i]) + path;
- var img = document.createElement("img");
- img.setAttribute("src", uri);
- d.appendChild(img);
- }
-}
-
-function rckeydown(event) {
- if (event.keyCode == 13) {
- var input = document.input.say.value;
- document.input.say.value = "";
-
- // Check nick change
- var message;
- var re = /^\/nick (.*)/;
- var match = re.exec(input);
- if (match) {
- message = "*** " + rcnick() + " is now known as " + match[1];
- rcsetnick(match[1]);
- } else {
- message = "<" + rcnick() + "> " + input;
- }
-
- // Remind people to set their nick
- if (rcnick() == 'anonymous') {
- rcaddmessagetohistory("-!- Set your nick with /nick");
- }
-
- // Say the message
- var d = rcaddmessagetohistory(message);
- rcsend(d, message);
- }
-}