Index: lams_learning/web/includes/presence.js =================================================================== RCS file: /usr/local/cvsroot/lams_learning/web/includes/Attic/presence.js,v diff -u -r1.7.2.1 -r1.7.2.2 --- lams_learning/web/includes/presence.js 17 Apr 2009 08:22:31 -0000 1.7.2.1 +++ lams_learning/web/includes/presence.js 24 Apr 2009 03:06:15 -0000 1.7.2.2 @@ -29,10 +29,9 @@ '
' + '
' + '' + - '' + - '' + - '' + - '' + + '' + + '' + + '' + '
' + '
' + '
'; @@ -115,7 +114,8 @@ // add the content $("#" + tag).html(createPrivateTabContent(nick, tag)); - $.get(lamsUrl + "PresenceChatLogger.do", {method: "getConversationHistory", roomName:CONFERENCEROOM, from:NICK, to:nick}, handleGetConversation); + var anticache = new Date().getTime(); + $.get(lamsUrl + "PresenceChatLogger.do", {method: "getConversationHistory", roomName:CONFERENCEROOM, from:NICK, to:nick, anticache:anticache}, handleGetConversation); } function htmlEnc(str) { @@ -174,6 +174,16 @@ return tag + '_contextMenu'; } +function parseXml(xml) { + if (jQuery.browser.msie) { + var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.loadXML(xml); + xml = xmlDoc; + } + + return xml; +} + function getRosterUserByNick(nick) { for (var i = 0; i < this.users.length; i++) { if (this.users[i].nick == nick) { @@ -217,6 +227,10 @@ var minutes = currentTime.getMinutes(); var seconds = currentTime.getSeconds(); + if (hours < 10){ + hours = "0" + hours; + } + if (minutes < 10){ minutes = "0" + minutes; } @@ -232,40 +246,6 @@ return "(" + time.substring(11, 19) + ")"; } -function createElem(name, attrs, style, innerHTML) { - 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 { - if(key == "onClick"){ - // for IE (attrId must have been set to e.id) - e.onclick = function() {handlePresenceLeftClick(e.id);}; - // for FF - e.setAttribute(key, attrs[key]); - } else { - e.setAttribute(key, attrs[key]); - } - } - } - } - } - if (style) { - for (key in style) { - e.style[key] = style[key]; - } - } - if (innerHTML) { - //e.appendChild(document.createTextNode(text)); - e.innerHTML = innerHTML; - } - return e; -} - function refreshContextMenu(tag, blocked){ var contextMenu = $('#' + tag + '_contextMenu'); @@ -318,8 +298,8 @@ } function handlePresenceLeftClick(divName){ - var div = document.getElementById(divName); - var rosterIndex = div.getAttribute("rosterIndex"); + var div = $("#" + divName); + var rosterIndex = div.attr("rosterIndex"); var user = roster.users[rosterIndex]; var tag = user.tag; var nick = user.nick; @@ -426,7 +406,7 @@ if(listing.length == 0){ // create listing div // note: attrId must be added to array before onClick - var listingDiv = createElem("div", {attrId:listingName, rosterIndex:i, onClick:"handlePresenceLeftClick('" + listingName + "');", attrClass:"presenceName"}, {}, createPresenceListing(nick, tag)); + var listingDiv = $('
' + createPresenceListing(nick, tag) + '
'); // add the listing div rosterDiv.append(listingDiv); @@ -445,7 +425,7 @@ rosterDiv.append(listing.remove()); // refresh roster index - listing.attr("rosterindex", i); + listing.attr("rosterIndex", i); } // get context menu div name @@ -497,26 +477,40 @@ } function generateMessageHTML(nick, message, date) { + var completeElem; var fromElem; + var msgElem; + completeElem = $('
'); + if(!date){ - fromElem = createElem("div", {attrClass:"presenceMessageFrom"}, null, getTime() + " " + nick); + fromElem = $('
' + getTime() + ' ' + nick + '
'); }else{ - fromElem = createElem("div", {attrClass:"presenceMessageFrom"}, null, trimTime(date) + " " + nick); + fromElem = $('
' + trimTime(date) + ' ' + nick + '
'); } - var msgElem = createElem("div", {attrClass:"presenceMessage"}, null, message); - msgElem.insertBefore(fromElem, msgElem.firstChild); - return msgElem; + msgElem = $('
' + message + '
'); + + completeElem.append(fromElem); + completeElem.append(msgElem); + + return completeElem; } -function generateEmoteHTML(nick, emote){ - return createElem("div", {attrClass:"presenceMessageEmote"}, null, getTime() + " " + nick + " " + emote); +function generateEmoteHTML(emote){ + return $('
' + getTime() + ' ' + emote + '
'); } -function updateMessageDisplay(div, htmlMessage) { - var messageArea = document.getElementById(div); - messageArea.appendChild(htmlMessage); - messageArea.scrollTop = messageArea.scrollHeight; + +function updateMessageDisplay(div, htmlMessage, prepend) { + var messageArea = $("#" + div); + + if(prepend){ + messageArea.prepend(htmlMessage); + }else{ + messageArea.append(htmlMessage); + } + + messageArea.attr("scrollTop", messageArea.attr("scrollHeight")); } function sendMsg(aForm) { @@ -571,7 +565,7 @@ // otherwise if not groupchat and user is unavailable else if(user != null && user.status == "unavailable"){ // generate the emote message and display it to user - var emoteMessage = generateEmoteHTML("Your", "previous message has not been sent because " + toNick + " is unavailable"); + var emoteMessage = generateEmoteHTML("Your previous message has not been sent because " + toNick + " is unavailable"); updateMessageDisplay(nickToMessageArea(toNick), emoteMessage); } @@ -612,20 +606,27 @@ if(document.getElementById(nickToMessageArea(nick)) == null){ // add a tab addTab(nick, tag); - } - - // get the selected tab - var selected = $("#presenceChatTabs").tabs().data('selected.tabs'); - - // if the selected tab is any other than sender's tab - if(getUserFromTabIndex(selected).tag != tag){ + // make the sender's tab label bold $('#' + tag + '_tabLabel').html('' + nick + ''); - $("#presenceChatTabs").tabs('_tabify', false); + + // don't add the message, let the log take care of that } - - // generate html - htmlMessage = generateMessageHTML(nick, message, null); + // if there is a tab for the send open + else{ + // get the selected tab + var selected = $("#presenceChatTabs").tabs().data('selected.tabs'); + + // if the selected tab is any other than sender's tab + if(getUserFromTabIndex(selected).tag != tag){ + // make the sender's tab label bold + $('#' + tag + '_tabLabel').html('' + nick + ''); + $("#presenceChatTabs").tabs('_tabify', false); + } + + // generate html + htmlMessage = generateMessageHTML(nick, message, null); + } // add the div to the sender's tab updateMessageDisplay(nickToMessageArea(nick), htmlMessage); @@ -721,10 +722,10 @@ // generate the emote message and display it to group chat var emoteMessage; if(user.status == "unavailable"){ - emoteMessage = generateEmoteHTML(nick, "has gone offline"); + emoteMessage = generateEmoteHTML(nick + "has gone offline"); } else if(user.status == "available"){ - emoteMessage = generateEmoteHTML(nick, "has come online"); + emoteMessage = generateEmoteHTML(nick + "has come online"); } updateMessageDisplay('groupchat_messageArea', emoteMessage); } @@ -741,10 +742,10 @@ // generate the emote message and display it to private chat var emoteMessage; if(user.status == "unavailable"){ - emoteMessage = generateEmoteHTML(nick, "has gone offline"); + emoteMessage = generateEmoteHTML(nick + "has gone offline"); } else if(user.status == "available"){ - emoteMessage = generateEmoteHTML(nick, "has come online"); + emoteMessage = generateEmoteHTML(nick + "has come online"); } updateMessageDisplay(nickToMessageArea(nick), emoteMessage); } @@ -759,7 +760,7 @@ // if presence im is enabled (there is a chatbox) if(presenceImEnabled == "true" && showStatus){ // generate the emote message and display it to group chat - var emoteMessage = generateEmoteHTML("You", "have been connected to LAMS instant messaging"); + var emoteMessage = generateEmoteHTML("You have been connected to LAMS instant messaging"); updateMessageDisplay('groupchat_messageArea', emoteMessage); } @@ -777,14 +778,15 @@ roster = new Roster(); // get group chat history - $.get(lamsUrl + "PresenceChatLogger.do", {method: "getGroupHistory", roomName:CONFERENCEROOM}, handleGetGroupHistory); + var anticache = new Date().getTime(); + $.get(lamsUrl + "PresenceChatLogger.do", {method: "getGroupHistory", roomName:CONFERENCEROOM, anticache:anticache}, handleGetGroupHistory); } function handleDisconnected() { // if presence im is enabled (there is a chatbox) if(presenceImEnabled == "true" && showStatus){ // generate the emote message and display it to group chat - var emoteMessage = generateEmoteHTML("You", "have been disconnected from LAMS instant messaging"); + var emoteMessage = generateEmoteHTML("You have been disconnected from LAMS instant messaging"); updateMessageDisplay('groupchat_messageArea', emoteMessage); } } @@ -807,31 +809,34 @@ } function handleGetGroupHistory(groupHistory){ - if(groupHistory){ - $(groupHistory).find("clause").each(function() { + var xml = parseXml(groupHistory); + if(xml){ + var groupHistory = $('
'); + $(xml).find("clause").each(function() { var from = $(this).find('from').text(); var dateSent = $(this).find('dateSent').text(); var message = $(this).find('message').text(); - var htmlMessage = generateMessageHTML(from, message, dateSent); - updateMessageDisplay('groupchat_messageArea', htmlMessage); + groupHistory.append(generateMessageHTML(from, message, dateSent)); }); + + updateMessageDisplay("groupchat_messageArea", groupHistory, true); } } function handleGetConversation(conversation){ - if(conversation) { - var nick = $(conversation).find('nick').text(); - $(conversation).find("clause").each(function() { + var xml = parseXml(conversation); + if(xml){ + var nick = $(xml).find('nick').text(); + var conversation = $('
'); + $(xml).find("clause").each(function() { var from = $(this).find('from').text(); var to = $(this).find('to').text(); var dateSent = $(this).find('dateSent').text(); var message = $(this).find('message').text(); - - var htmlMessage = generateMessageHTML(from, message, dateSent); - - // add the div to the sender's tab - updateMessageDisplay(nickToMessageArea(nick), htmlMessage); + conversation.append(generateMessageHTML(from, message, dateSent)); }); + + updateMessageDisplay(nickToMessageArea(nick), conversation, true); } }