Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java
===================================================================
diff -u -r7ade5ccf0b9aa56e52b3c7e0bf86596dda369092 -ra79f1040f9d36c6adcb499f38fc38d838cda8a0b
--- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java (.../LearningAction.java) (revision 7ade5ccf0b9aa56e52b3c7e0bf86596dda369092)
+++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningAction.java (.../LearningAction.java) (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -114,11 +114,6 @@
}
request.setAttribute("MODE", mode.toString());
-
- // check runOffline
- if (chat.getRunOffline()) {
- return mapping.findForward("runOffline");
- }
// Create the room if it doesnt exist
if (chatSession.getJabberRoom() == null) {
@@ -151,8 +146,14 @@
chat.setContentInUse(new Boolean(true));
chatService.saveOrUpdateChat(chat);
}
-
+
+ // check runOffline
+ if (chat.getRunOffline()) {
+ return mapping.findForward("runOffline");
+ }
+
return mapping.findForward("chat_client");
+
}
private ChatUser getCurrentUser(Long toolSessionId) {
Index: lams_tool_chat/web/common/header.jsp
===================================================================
diff -u -red3c47b7ae61ab6af7d88769b237943923199ad8 -ra79f1040f9d36c6adcb499f38fc38d838cda8a0b
--- lams_tool_chat/web/common/header.jsp (.../header.jsp) (revision ed3c47b7ae61ab6af7d88769b237943923199ad8)
+++ lams_tool_chat/web/common/header.jsp (.../header.jsp) (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -11,7 +11,7 @@
-
+
Index: lams_tool_chat/web/includes/css/chat.css
===================================================================
diff -u
--- lams_tool_chat/web/includes/css/chat.css (revision 0)
+++ lams_tool_chat/web/includes/css/chat.css (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -0,0 +1,64 @@
+/* LEARNING PAGE STYLES */
+
+#chat_content {
+ width: 560px;
+ padding: 12px;
+ /* compensate for content image border */
+ margin-left: 4px;
+}
+
+#chat_pane {
+ width: 98%;
+}
+
+#iResp {
+ height: 260px;
+ margin-right: 12px;
+ margin-left: 12px;
+ overflow: scroll;
+ border-width: 1px;
+ border-style: solid;
+ padding: 2px;
+}
+
+#roster {
+ float: right;
+ width: 105px;
+ height: 260px;
+ overflow: hidden;
+ border-width: 1px;
+ border-style: solid;
+ font-weight: bold;
+ padding: 2px;
+}
+
+.message {
+ padding-bottom: 4px;
+}
+
+.private_message {
+ font-style: italic;
+ background-color: #e6e6fa;
+}
+
+.messageFrom {
+ font-weight: bold;
+}
+
+.selected {
+ background-color: lime;
+ padding: 2px;
+ cursor: pointer;
+}
+
+.unselected {
+ background-color: white;
+ padding: 2px;
+ cursor: pointer;
+}
+
+#msgArea {
+ width: 410px;
+}
+
+/* END LEARNING PAGE STYLES */
\ No newline at end of file
Fisheye: Tag a79f1040f9d36c6adcb499f38fc38d838cda8a0b refers to a dead (removed) revision in file `lams_tool_chat/web/includes/javascript/jsjac/examples/simpleclient.html'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_tool_chat/web/includes/javascript/learning.js
===================================================================
diff -u
--- lams_tool_chat/web/includes/javascript/learning.js (revision 0)
+++ lams_tool_chat/web/includes/javascript/learning.js (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -0,0 +1,313 @@
+
+/* ******* Constants ******* */
+var GROUPCHAT_MSG = "groupchat_message";
+var PRIVATE_MSG = "private_message";
+var PALETTE = ["#0000FF", "#006699", "#0066FF", "#6633FF", "#00CCFF", "#009900", "#00CC33", "#339900", "#008080", "#66FF66", "#CC6600", "#FF6600", "#FF9900", "#CC6633", "#FF9933", "#990000", "#A50021", "#990033", "#CC3300", "#FF6666", "#330033", "#663399", "#6633CC", "#660099", "#FF00FF", "#999900", "#808000", "#FFFF00", "#666633", "#292929", "#666666"];
+/* ******* Helper Functions ******* */
+function getColour(nick) {
+ var charSum = 0;
+ for (var i = 0; i < nick.length; i++) {
+ charSum += nick.charCodeAt(i);
+ }
+ return PALETTE[charSum % (PALETTE.length)];
+}
+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;
+}
+function createElem(name, attrs, style, text) {
+ var e = document.createElement(name);
+ if (attrs) {
+ for (var key in attrs) {
+ if (key == "attrClass") {
+ e.className = attrs[key];
+ } else {
+ if (key == "attrId") {
+ e.id = attrs[key];
+ } else {
+ e.setAttribute(key, attrs[key]);
+ }
+ }
+ }
+ }
+ if (style) {
+ for (key in style) {
+ e.style[key] = style[key];
+ }
+ }
+ if (text) {
+ e.appendChild(document.createTextNode(text));
+ }
+ return e;
+}
+/* ******* Roster ******* */
+function RosterUser(nick) {
+ this.nick = nick;
+ this.status = "unavailable";
+}
+function getRosterUserByNick(nick) {
+ for (var i = 0; i < this.users.length; i++) {
+ if (this.users[i].nick == nick) {
+ return this.users[i];
+ }
+ }
+ return null;
+}
+function AddRosterUser(user) {
+ this.users[this.users.length] = user;
+}
+function UpdateRosterUser(user) {
+ // TODO do we need this.
+}
+function RemoveRosterUser() {
+}
+function UpdateRosterDisplay() {
+ var rosterDiv = document.getElementById("roster");
+ rosterDiv.innerHTML = "";
+ for (var i = 0; i < this.users.length; i++) {
+ if (this.users[i].status != "unavailable") {
+ var className = "unselected";
+ if (i == this.currentIndex) {
+ className = "selected";
+ }
+ var nick = this.users[i].nick;
+ var userDiv = createElem("div", {attrId:"user-" + i, attrClass:className, onClick:"selectUser(this);"}, {width:"100%", color:getColour(this.users[i].nick)}, this.users[i].nick);
+ rosterDiv.appendChild(userDiv);
+ }
+ }
+
+ // change the name on the 'Send To' label
+ if (MODE == "teacher" && !(this.currentIndex === null)) {
+ var user = this.users[this.currentIndex];
+ var sendToUserElem = document.getElementById("sendToUser");
+ sendToUserElem.innerHTML = "";
+ sendToUserElem.appendChild(createElem("span", null, {color:getColour(user.nick)}, user.nick));
+ document.getElementById("sendToEveryone").style.display = "none";
+ document.getElementById("sendToUser").style.display = "";
+ } else {
+ document.getElementById("sendToUser").style.display = "none";
+ document.getElementById("sendToEveryone").style.display = "";
+ }
+}
+function Roster() {
+ this.users = [];
+ this.currentIndex = null;
+ // objects methods
+ this.getUserByNick = getRosterUserByNick;
+ this.addUser = AddRosterUser;
+ this.updateUser = UpdateRosterUser;
+ this.removeUser = RemoveRosterUser;
+ this.updateDisplay = UpdateRosterDisplay;
+}
+var roster = new Roster();
+function selectUser(userDiv) {
+ if (MODE == "teacher") {
+ var newIndex = userDiv.id.substring(userDiv.id.indexOf("-") + 1, userDiv.id.length);
+ if (roster.currentIndex == newIndex) {
+ roster.currentIndex = null;
+ } else {
+ roster.currentIndex = newIndex;
+ }
+ roster.updateDisplay();
+ }
+}
+/* ******* Chat functions ******* */
+function generateMessageHTML(nick, message, type) {
+ var colour = getColour(nick);
+ var fromElem = createElem("span", {attrClass:"messageFrom"}, {color:colour}, nick);
+ var msgElem = createElem("div", {attrClass:"message " + type}, {color:colour}, null);
+ msgElem.innerHTML = message;
+ msgElem.insertBefore(document.createElement("br"), msgElem.firstChild);
+ msgElem.insertBefore(fromElem, msgElem.firstChild);
+ return msgElem;
+}
+function updateMessageDisplay(htmlMessage) {
+ var iRespDiv = document.getElementById("iResp");
+ iRespDiv.appendChild(htmlMessage);
+ iRespDiv.scrollTop = iRespDiv.scrollHeight;
+}
+function sendMsg(aForm) {
+ if (aForm.msg.value === "") {
+ return false; // do not send empty messages.
+ }
+ var aMsg = new JSJaCMessage();
+ if (MODE == "teacher" && !(roster.currentIndex === null)) {
+ var toNick = roster.users[roster.currentIndex].nick;
+ 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
+ if (!(NICK == toNick)) {
+ 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;
+}
+/* ******* 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.updateDisplay();
+}
+function handleConnected() {
+ if (MODE == "learner") {
+ if (LEARNER_FINISHED == "true") {
+ //document.getElementById("notebookEntry_pane").style.display = "";
+ if (LOCK_ON_FINISHED == "true") {
+ // disable sending messages.
+ document.getElementById("msgArea").disabled = "disabled";
+ document.getElementById("sendButton").disabled = "disabled";
+ }
+ }
+ }
+
+ // clear the response window.
+ document.getElementById("iResp").innerHTML = "";
+
+ // 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("msgArea").disabled = "disabled";
+ document.getElementById("sendButton").disabled = "disabled";
+ document.getElementById("iResp").innerHTML = "Couldn't connect. Please try again...
" + htmlEnc("Code: " + e.getAttribute("code") + "\nType: " + e.getAttribute("type") + "\nCondition: " + e.firstChild.nodeName);
+ document.getElementById("roster").innerHTML = "";
+}
+/* ******* Init ******* */
+function doLogin() {
+ try {
+
+ // setup args for contructor
+ var oArgs = {httpbase:HTTPBASE, 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 = {domain:XMPPDOMAIN, username:USERNAME, resource:RESOURCE, pass:PASSWORD};
+ con.connect(oArgs);
+ }
+ catch (e) {
+ document.getElementById("iResp").innerHTML = e.toString();
+ }
+ finally {
+ return false;
+ }
+}
+function init() {
+ if (typeof (Debugger) == "function") {
+ var oDbg = new Debugger(4, "simpleclient");
+ oDbg.start();
+ }
+ doLogin();
+}
+onload = init;
+onunload = function () {
+ if (typeof (con) != "undefined" && con.disconnect) {
+ con.disconnect();
+ }
+};
+/* ******* Helper functions ******* */
+function checkEnter(e) { //e is event object passed from function invocation
+ var characterCode; //literal character code will be stored in this variable
+ if (e && e.which) { //if which property of event object is supported (NN4)
+ e = e;
+ characterCode = e.which; //character code is contained in NN4's which property
+ } else {
+ e = event;
+ characterCode = e.keyCode; //character code is contained in IE's keyCode property
+ }
+ if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
+ //document.forms[0].submit(); //submit the form
+ sendMsg(document.forms[0]);
+ return false;
+ } else {
+ return true;
+ }
+}
Index: lams_tool_chat/web/includes/javascript/monitoring.js
===================================================================
diff -u
--- lams_tool_chat/web/includes/javascript/monitoring.js (revision 0)
+++ lams_tool_chat/web/includes/javascript/monitoring.js (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -0,0 +1,18 @@
+
+function init() {
+
+ // initialising tabs
+ initTabSize(4);
+
+ // open the first tab
+ selectTab(1);
+}
+
+function doSelectTab(tabId) {
+ selectTab(tabId);
+}
+function doSubmit(method, tabId) {
+ document.monitoringForm.method.value = method;
+ document.monitoringForm.submit();
+}
+
Fisheye: Tag a79f1040f9d36c6adcb499f38fc38d838cda8a0b refers to a dead (removed) revision in file `lams_tool_chat/web/includes/javascript/xmlrequest.js'.
Fisheye: No comparison available. Pass `N' to diff?
Fisheye: Tag a79f1040f9d36c6adcb499f38fc38d838cda8a0b refers to a dead (removed) revision in file `lams_tool_chat/web/pages/learning/chat_app.js'.
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/learning.jsp'.
Fisheye: No comparison available. Pass `N' to diff?
Index: lams_tool_chat/web/pages/learning/part/finishButton.jsp
===================================================================
diff -u
--- lams_tool_chat/web/pages/learning/part/finishButton.jsp (revision 0)
+++ lams_tool_chat/web/pages/learning/part/finishButton.jsp (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -0,0 +1,33 @@
+<%@ include file="/common/taglibs.jsp"%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${buttonLabel}
+
+
+
+
+
+
+
+
+
+ ${chatDTO.reflectInstructions}
+
+
+ ${chatUserDTO.notebookEntry}
+
+
+
+
+
Index: lams_tool_chat/web/pages/learning/runOffline.jsp
===================================================================
diff -u -r4723715bee4472a5a41fc2cafd690b23b7ae4e2a -ra79f1040f9d36c6adcb499f38fc38d838cda8a0b
--- lams_tool_chat/web/pages/learning/runOffline.jsp (.../runOffline.jsp) (revision 4723715bee4472a5a41fc2cafd690b23b7ae4e2a)
+++ lams_tool_chat/web/pages/learning/runOffline.jsp (.../runOffline.jsp) (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -5,6 +5,7 @@
+
-
-
-
-
-
- button.finish
-
-
-
+ <%@ include file="part/finishButton.jsp"%>
Index: lams_tool_chat/web/pages/monitoring/headItems.jsp
===================================================================
diff -u -rcb76f52be2b0d9280291cf11cac9f4efe99a0648 -ra79f1040f9d36c6adcb499f38fc38d838cda8a0b
--- lams_tool_chat/web/pages/monitoring/headItems.jsp (.../headItems.jsp) (revision cb76f52be2b0d9280291cf11cac9f4efe99a0648)
+++ lams_tool_chat/web/pages/monitoring/headItems.jsp (.../headItems.jsp) (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -1,30 +1,9 @@
-<%-- Monitoring Head Content --%>
-
<%@ include file="/common/taglibs.jsp"%>
-
-
+
+
+
-
-
\ No newline at end of file
+
Index: lams_tool_chat/web/pages/monitoring/monitoring.jsp
===================================================================
diff -u -r0ac012d04d1fa2ee4df7139645ba7fecaa8b2a6e -ra79f1040f9d36c6adcb499f38fc38d838cda8a0b
--- lams_tool_chat/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 0ac012d04d1fa2ee4df7139645ba7fecaa8b2a6e)
+++ lams_tool_chat/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision a79f1040f9d36c6adcb499f38fc38d838cda8a0b)
@@ -1,9 +1,6 @@
<%@ include file="/common/taglibs.jsp"%>