X-Git-Url: http://git.scottworley.com/reliable-chat/blobdiff_plain/f0e385c76e0529768ad9339a4ddf1467bbb38453..d77f9ec931d3e3eb76066765ac247158791b70ba:/webclient/rc.js diff --git a/webclient/rc.js b/webclient/rc.js index 6dc527e..29b762e 100644 --- a/webclient/rc.js +++ b/webclient/rc.js @@ -1,8 +1,20 @@ -var servers = ['chkno.net', 'localhost']; +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) { @@ -12,6 +24,16 @@ function rcserverbase(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)); @@ -30,15 +52,19 @@ function receiveMessage(server, time, 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 (i in servers) { + for (var i in servers) { if (event.origin === rcserverbase(servers[i])) { messages = JSON.parse(event.data); - for (j in messages) { + for (var j in messages) { if ('Time' in messages[j] && 'ID' in messages[j] && 'Text' in messages[j]) { @@ -51,11 +77,19 @@ function receiveMessageEvent(event) function rcconnect() { window.addEventListener("message", receiveMessageEvent, false); - for (i in servers) { + 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"); } } @@ -65,7 +99,7 @@ function rcsend(d, message) { var path = "/speak" + "?id=" + encodeURIComponent(id) + "&text=" + encodeURIComponent(message); - for (i in servers) { + for (var i in servers) { var uri = rcserverbase(servers[i]) + path; var img = document.createElement("img"); img.setAttribute("src", uri); @@ -75,9 +109,27 @@ function rcsend(d, message) { function rckeydown(event) { if (event.keyCode == 13) { - var d = rcaddmessagetohistory(document.input.say.value); - rcsend(d, document.input.say.value); + var input = document.input.say.value; document.input.say.value = ""; - return false; + + // 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); } }