]> git.scottworley.com Git - reliable-chat/blame - webclient/rc.js
More "var" in variable declarations.
[reliable-chat] / webclient / rc.js
CommitLineData
451cb8dc 1var servers = ['chkno.net', 'rc2.chkno.net', 'echto.net', 'the-wes.com', 'vibrantlogic.com'];
991a5820
SW
2
3var session = Math.random();
f0e385c7 4var seen = {};
991a5820 5
1ada50a1
SW
6function rcnick() {
7 var nick = localStorage.getItem("nick");
8 if (nick) {
9 return nick;
10 }
11 return 'anonymous';
12}
13
14function rcsetnick(new_nick) {
15 localStorage.setItem("nick", new_nick);
16}
17
f0e385c7 18function rcserverbase(server) {
991a5820
SW
19 // Add the default port if server doesn't contain a port number already
20 if (server.indexOf(":") == -1) {
f0e385c7 21 return "http://" + server + ":21059";
991a5820 22 } else {
f0e385c7
SW
23 return "http://" + server;
24 }
25}
26
24923aff
SW
27function rcchangeserverstatus(server, new_status) {
28 var statusbar = document.getElementById("status");
29 var spans = statusbar.getElementsByTagName("span");
d77f9ec9 30 for (var i in spans) {
24923aff
SW
31 if (spans[i].firstChild && 'data' in spans[i].firstChild && spans[i].firstChild.data == server) {
32 spans[i].setAttribute("class", new_status);
33 }
34 }
35}
36
f0e385c7
SW
37function rcaddmessagetohistory(message) {
38 var d = document.createElement("div");
39 d.appendChild(document.createTextNode(message));
40 var h = document.getElementById("history");
41 h.appendChild(d);
42 window.scrollTo(0, document.body.scrollHeight);
43 return d;
44}
45
46function make_seen_key(id, text) {
47 return id.replace(/@/g, "@@") + "_@_" + text.replace(/@/g, "@@");
48}
49
50function receiveMessage(server, time, id, text) {
51 var seen_key = make_seen_key(id, text);
52 if (!(seen_key in seen)) {
53 seen[seen_key] = true;
54 rcaddmessagetohistory(text);
d77f9ec9 55 for (var i in servers) {
24923aff
SW
56 rcchangeserverstatus(servers[i], "sad");
57 }
f0e385c7 58 }
24923aff 59 rcchangeserverstatus(server, "happy");
f0e385c7
SW
60}
61
62function receiveMessageEvent(event)
63{
d77f9ec9 64 for (var i in servers) {
f0e385c7
SW
65 if (event.origin === rcserverbase(servers[i])) {
66 messages = JSON.parse(event.data);
d77f9ec9 67 for (var j in messages) {
f0e385c7
SW
68 if ('Time' in messages[j] &&
69 'ID' in messages[j] &&
70 'Text' in messages[j]) {
71 receiveMessage(servers[i], messages[j]['Time'], messages[j]['ID'], messages[j]['Text']);
72 }
73 }
74 }
75 }
76}
77
78function rcconnect() {
79 window.addEventListener("message", receiveMessageEvent, false);
d77f9ec9 80 for (var i in servers) {
f0e385c7
SW
81 // Create a hidden iframe for same-origin workaround
82 var iframe = document.createElement("iframe");
83 iframe.setAttribute("src", rcserverbase(servers[i]) + "/frame");
84 document.body.insertBefore(iframe, document.body.firstChild);
24923aff
SW
85 // Status bar entry
86 var status_indicator = document.createElement("span");
87 status_indicator.appendChild(document.createTextNode(servers[i]));
88 status_indicator.setAttribute("class", "sad");
89 document.getElementById("status").appendChild(status_indicator);
991a5820 90 }
1ada50a1
SW
91 if (rcnick() == 'anonymous') {
92 rcaddmessagetohistory("-!- Set your nick with /nick");
93 }
991a5820
SW
94}
95
96function rcsend(d, message) {
97 var id = new Date().getTime() + "-" + session + "-" + Math.random();
f0e385c7 98 seen[make_seen_key(id, message)] = true;
991a5820
SW
99 var path = "/speak" +
100 "?id=" + encodeURIComponent(id) +
101 "&text=" + encodeURIComponent(message);
d77f9ec9 102 for (var i in servers) {
f0e385c7 103 var uri = rcserverbase(servers[i]) + path;
991a5820
SW
104 var img = document.createElement("img");
105 img.setAttribute("src", uri);
106 d.appendChild(img);
107 }
108}
109
827f21bb
SW
110function rckeydown(event) {
111 if (event.keyCode == 13) {
1ada50a1 112 var input = document.input.say.value;
827f21bb 113 document.input.say.value = "";
1ada50a1
SW
114
115 // Check nick change
116 var message;
117 var re = /^\/nick (.*)/;
118 var match = re.exec(input);
119 if (match) {
120 message = "*** " + rcnick() + " is now known as " + match[1];
121 rcsetnick(match[1]);
122 } else {
123 message = "<" + rcnick() + "> " + input;
124 }
125
126 // Remind people to set their nick
127 if (rcnick() == 'anonymous') {
128 rcaddmessagetohistory("-!- Set your nick with /nick");
129 }
130
131 // Say the message
132 var d = rcaddmessagetohistory(message);
133 rcsend(d, message);
827f21bb
SW
134 }
135}