Index: lams_tool_chat/web/chat_client/chat_app.js
===================================================================
diff -u
--- lams_tool_chat/web/chat_client/chat_app.js (revision 0)
+++ lams_tool_chat/web/chat_client/chat_app.js (revision 6b63bb5d8724c2bd120e62b48b99894dc030a1c1)
@@ -0,0 +1,238 @@
+// Constants
+var GROUPCHAT_MSG = "groupchat_message";
+var PRIVATE_MSG = "private_message";
+
+// Variables
+var roster = new Roster();
+
+// Helper functions
+function htmlEnc(str) {
+ if (!str) {
+ return null;
+ }
+ str = str.replace(/&/g, "&");
+ str = str.replace(//g, ">");
+ str = str.replace(/\"/g, """);
+ str = str.replace(/\n/g, "
");
+ return str;
+}
+
+// Roster
+function RosterUser(nick) {
+ this.nick = nick;
+ this.status = "unavailable";
+}
+function getRosterUserByNick(nick) {
+ for (var i = 0; i < roster.users.length; i++) {
+ if (roster.users[i].nick == nick) {
+ return roster.users[i];
+ }
+ }
+}
+function AddRosterUser(user) {
+ roster.users[roster.users.length] = user;
+}
+function UpdateRosterUser(user) {
+}
+function RemoveRosterUser() {
+}
+function updateRosterDisplay() {
+ var oSelect = document.getElementById("roster_user_selector");
+ oSelect.innerHTML = "";
+ var oOption;
+ var nick;
+ for (var i = 0; i < roster.users.length; i++) {
+ if (roster.users[i].status != "unavailable") {
+ nick = roster.users[i].nick;
+ if ((NICK == nick)) {
+ continue;
+ }
+ oOption = new Option(nick, nick);
+ oSelect.options[oSelect.options.length] = oOption;
+ }
+ }
+}
+function Roster() {
+ this.users = new Array();
+ // objects methods
+ this.getUserByNick = getRosterUserByNick;
+ this.addUser = AddRosterUser;
+ this.updateUser = UpdateRosterUser;
+ this.removeUser = RemoveRosterUser;
+ this.updateDisplay = updateRosterDisplay;
+}
+function resetInputs() {
+ document.getElementById("roster_user_selector").selectedIndex = -1;
+ updateSendDisplay();
+}
+function updateSendDisplay() {
+ var rosterList = document.getElementById("roster_user_selector");
+ var selectedIndex = rosterList.selectedIndex;
+ var userName;
+ if (MODE == "teacher" && !(selectedIndex == -1)) {
+ var userName = rosterList.options[rosterList.selectedIndex].value;
+ } else {
+ userName = "*..*Everyone*..*";
+ }
+ document.getElementById("sendTo").innerHTML = userName;
+}
+function generateMessageHTML(nick, message, type) {
+ return "
" + nick + ":" + message + "
";
+}
+function updateMessageDisplay(htmlMessage) {
+ var iRespDiv = document.getElementById("iResp");
+ iRespDiv.innerHTML += htmlMessage;
+ iRespDiv.scrollTop = iRespDiv.scrollHeight;
+}
+// Event handlers
+function handleEvent(aJSJaCPacket) {
+ document.getElementById("iResp").innerHTML += "IN (raw):
" + htmlEnc(aJSJaCPacket.xml()) + "
";
+}
+function handleMessage(aJSJaCPacket) {
+ var nick = aJSJaCPacket.getFrom().substring(aJSJaCPacket.getFrom().indexOf("/") + 1);
+ var message = htmlEnc(aJSJaCPacket.getBody());
+ var type = aJSJaCPacket.getType();
+ var htmlMessage;
+ if (type == "chat") {
+ htmlMessage = generateMessageHTML(nick, message, PRIVATE_MSG);
+ } else {
+ if (type = "groupchat") {
+ htmlMessage = generateMessageHTML(nick, message, GROUPCHAT_MSG);
+ } else {
+ /* somethings wrong, dont add anything.*/
+ htmlMessage = "";
+ }
+ }
+ updateMessageDisplay(htmlMessage);
+}
+function handlePresence(presence) {
+ var from = presence.getFrom();
+ var status = presence.getStatus();
+ var show = presence.getShow();
+ var type = presence.getType();
+ // get x element for MUC
+ var x;
+ for (var i = 0; i < presence.getNode().getElementsByTagName("x").length; i++) {
+ if (presence.getNode().getElementsByTagName("x").item(i).getAttribute("xmlns") == "http://jabber.org/protocol/muc#user") {
+ x = presence.getNode().getElementsByTagName("x").item(i);
+ break;
+ }
+ }
+
+ // extract nick.
+ var nick;
+ if (from.indexOf("/") != -1) {
+ nick = from.substring(from.indexOf("/") + 1);
+ }
+ var user = roster.getUserByNick(nick);
+ if (!user) {
+ user = new RosterUser(nick);
+ roster.addUser(user);
+ }
+ if (show) {
+ user.status = show;
+ } else {
+ if (type) {
+ if (type == "unavailable") {
+ user.status = "unavailable";
+ }
+ } else {
+ // default: means presence is available.
+ user.status = "available";
+ }
+ }
+ roster.updateUser(user);
+ roster.updateDisplay();
+ updateSendDisplay();
+}
+function handleConnected() {
+ document.getElementById("login_pane").style.display = "none";
+ document.getElementById("chat_pane").style.display = "";
+
+ // send presence
+ var aPresence = new JSJaCPresence();
+ aPresence.setTo(CONFERENCEROOM + "/" + NICK);
+ aPresence.setFrom(USERNAME + "@" + XMPPDOMAIN);
+ var x = aPresence.getDoc().createElement("x");
+ x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
+ x.appendChild(aPresence.getDoc().createElement("password")).appendChild(aPresence.getDoc().createTextNode(PASSWORD));
+ aPresence.getNode().appendChild(x);
+ con.send(aPresence);
+
+ // set up roster
+ roster = new Roster();
+}
+function handleError(e) {
+ document.getElementById("login_err").innerHTML = "Couldn't connect. Please try again...
" + htmlEnc("Code: " + e.getAttribute("code") + "\nType: " + e.getAttribute("type") + "\nCondition: " + e.firstChild.nodeName);
+}
+function doLogin() {
+ try {
+
+ // setup args for contructor
+ oArgs = new Object();
+ oArgs.httpbase = HTTPBASE;
+ oArgs.timerval = 2000;
+ if (typeof (oDbg) != "undefined") {
+ oArgs.oDbg = oDbg;
+ }
+ con = new JSJaCHttpBindingConnection(oArgs);
+ con.registerHandler("message", handleMessage);
+ con.registerHandler("presence", handlePresence);
+ con.registerHandler("iq", handleEvent);
+ con.registerHandler("onconnect", handleConnected);
+ con.registerHandler("onerror", handleError);
+
+ // setup args for connect method
+ oArgs = new Object();
+ oArgs.domain = XMPPDOMAIN;
+ oArgs.username = USERNAME;
+ oArgs.resource = RESOURCE;
+ oArgs.pass = PASSWORD;
+ con.connect(oArgs);
+ }
+ catch (e) {
+ document.getElementById("login_err").innerHTML = e.toString();
+ }
+ finally {
+ return false;
+ }
+}
+function sendMsg(aForm) {
+ var aMsg = new JSJaCMessage();
+ var rosterList = document.getElementById("roster_user_selector");
+ var selectedIndex = rosterList.selectedIndex;
+ if (MODE == "teacher" && !(selectedIndex == -1)) {
+ var toNick = rosterList.options[selectedIndex].value;
+ aMsg.setTo(CONFERENCEROOM + "/" + toNick);
+ aMsg.setType("chat");
+ // apending the private message to the incoming window,
+ // since the jabber server will not echo sent private messages.
+ // TODO: need to check if this is correct behaviour
+ updateMessageDisplay(generateMessageHTML(NICK, aForm.msg.value, PRIVATE_MSG));
+ } else {
+ aMsg.setTo(CONFERENCEROOM);
+ aMsg.setType("groupchat");
+ }
+
+ // }
+ aMsg.setFrom(USERNAME + "@" + XMPPDOMAIN + "/" + RESOURCE);
+ aMsg.setBody(aForm.msg.value);
+ con.send(aMsg);
+ aForm.msg.value = "";
+ return false;
+}
+function init() {
+ if (typeof (Debugger) == "function") {
+ oDbg = new Debugger(4, "simpleclient");
+ oDbg.start();
+ }
+ doLogin();
+}
+onload = init;
+onunload = function () {
+ if (typeof (con) != "undefined" && con.disconnect) {
+ con.disconnect();
+ }
+};
+
Index: lams_tool_chat/web/chat_client/chat_style.css
===================================================================
diff -u
--- lams_tool_chat/web/chat_client/chat_style.css (revision 0)
+++ lams_tool_chat/web/chat_client/chat_style.css (revision 6b63bb5d8724c2bd120e62b48b99894dc030a1c1)
@@ -0,0 +1,51 @@
+#chat_pane {
+ height: 600px;
+}
+
+#iResp {
+ height: 400px;
+ margin-right: 8px;
+ overflow: scroll;
+ padding: 4px;
+ background-color: white;
+}
+
+.groupchat_message {
+
+}
+
+.private_message {
+ font-style: italic;
+ background-color: #E6E6FA;
+}
+
+.messageFrom {
+ font-weight: bold;
+}
+
+#presence {
+ float: right;
+ width: 160px;
+ height: 400px;
+ overflow: hidden;
+}
+
+#roster_user_selector {
+ width: 100%;
+ height: 100%;
+}
+
+#send_button {
+ float: right;
+ width: 160px;
+}
+
+#msgArea {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+}
+
+#msgAreaDiv {
+ height: 45px;
+}
Index: lams_tool_chat/web/chat_client/chat_ui.jsp
===================================================================
diff -u
--- lams_tool_chat/web/chat_client/chat_ui.jsp (revision 0)
+++ lams_tool_chat/web/chat_client/chat_ui.jsp (revision 6b63bb5d8724c2bd120e62b48b99894dc030a1c1)
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Please wait, loading chat activity.
+
+
+
+
Index: lams_tool_chat/web/pages/learning/headItems.jsp
===================================================================
diff -u
--- lams_tool_chat/web/pages/learning/headItems.jsp (revision 0)
+++ lams_tool_chat/web/pages/learning/headItems.jsp (revision 6b63bb5d8724c2bd120e62b48b99894dc030a1c1)
@@ -0,0 +1 @@
\ No newline at end of file
Fisheye: Tag 6b63bb5d8724c2bd120e62b48b99894dc030a1c1 refers to a dead (removed) revision in file `lams_tool_chat/web/pages/learning/learning.jsp'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag 6b63bb5d8724c2bd120e62b48b99894dc030a1c1 refers to a dead (removed) revision in file `lams_tool_chat/web/pages/learning/script.jsp'.
Fisheye: No comparison available. Pass `N' to diff?