You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2010/08/08 14:09:01 UTC
svn commit: r983396 -
/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/examples/client/client.js
Author: ngn
Date: Sun Aug 8 12:09:00 2010
New Revision: 983396
URL: http://svn.apache.org/viewvc?rev=983396&view=rev
Log:
Web client support for bidirectional chat (VYSPER-230, by Bogdan Pistol)
Modified:
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/examples/client/client.js
Modified: mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/examples/client/client.js
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/examples/client/client.js?rev=983396&r1=983395&r2=983396&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/examples/client/client.js (original)
+++ mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/examples/client/client.js Sun Aug 8 12:09:00 2010
@@ -75,6 +75,7 @@ function log(msg, xml) {
}
m += "<br/>";
$("#logger").append(m);
+ $("#logger").get(0).scrollTop = $("#logger").get(0).scrollHeight;
}
Strophe.log = function (level, msg) {
@@ -129,13 +130,25 @@ function rosterReceived(iq) {
if ($(this).attr('ask')) {
return true;
}
- var jid = $(this).attr('jid');
- $("#roster").append("<div jid='" + jid2id(jid) + "'>" + jid + " (offline)</div>");
+ addToRoster($(this).attr('jid'));
});
log("Sending my presence", $pres().toString());
connection.send($pres());
}
+function addToRoster(jid) {
+ var id = jid2id(jid);
+ $("#roster").append("<div style='cursor: pointer;' jid='" + id + "'>" + jid + " (offline)</div>");
+ $("#roster > div[jid=" + id + "]").click(function() {
+ chatWith(jid);
+ });
+ $("#roster > div[jid=" + id + "]").hover(function() {
+ $(this).css("color", "red");
+ }, function() {
+ $(this).css("color", "#333333");
+ });
+}
+
function jid2id(jid) {
return Strophe.getBareJidFromJid(jid).replace("@", "AT").replace(/\./g, "_");
}
@@ -143,29 +156,48 @@ function jid2id(jid) {
function messageReceived(msg) {
log("Received chat message", Strophe.serialize(msg));
var jid = $(msg).attr("from");
- var bareJid = Strophe.getBareJidFromJid(jid);
- var id = jid2id(jid);
-
- $("#tabs").show()
+ verifyChatTab(jid);
+
+ var body = $(msg).find("> body");
+ if (body.length === 1) {
+ showMessage(jid2id(jid), jid, body.text());
+ }
+ return true;
+}
+
+function showMessage(tabId, authorJid, text) {
+ var bareJid = Strophe.getBareJidFromJid(authorJid);
+ var chat = $("#chat" + tabId + " > div");
+ if (chat.length === 0) {
+ return;
+ }
+ chat.append("<div><b>" + bareJid + "</b>: " + text + "</div>");
+ chat.get(0).scrollTop = chat.get(0).scrollHeight;
+ $("#tabs").tabs("select", "#chat" + tabId);
+ $("#chat" + tabId + " > input").focus();
+}
+
+function verifyChatTab(jid) {
+ var id = jid2id(jid);
+ var bareJid = Strophe.getBareJidFromJid(jid);
+ $("#tabs").show();
if ($("#chat" + id).length === 0) {
$("#tabs").tabs("add", "#chat" + id, bareJid);
$("#chat" + id).append("<div style='height: 290px; margin-bottom: 10px; overflow: auto;'></div><input type='text' style='width: 100%;'/>");
+ $("#chat" + id).data("jid", jid);
+ $("#chat" + id + " > input").keydown(function(event) {
+ if (event.which === 13) {
+ event.preventDefault();
+ sendMessage($(this).parent().data("jid"), $(this).val());
+ $(this).val("");
+ }
+ });
}
-
- if($(msg).find("> body")) {
- $("#chat" + id + " > div").append("<p>" + $(msg).find("> body").text() + "</p>");
- $("#chat" + id + " > div").get(0).scrollTop = $("#chat" + id + " > div").get(0).scrollHeight;
- }
-
- $("#chat" + id).data("jid", jid);
$("#tabs").tabs("select", "#chat" + id);
$("#chat" + id + " > input").focus();
-
- return true;
}
-
function disconnect() {
isDisconnecting = true;
$("#roster").dialog("close");
@@ -178,8 +210,16 @@ function disconnect() {
connection.disconnect();
}
-function chat() {
-
+function chatWith(toJid) {
+ log("Chatting with " + toJid + "...");
+ verifyChatTab(toJid);
+}
+
+function sendMessage(toJid, text) {
+ showMessage(jid2id(toJid), jid, text);
+ var msg = $msg({to: toJid, "type": "chat"}).c('body').t(text);
+ log("Sending message", Strophe.serialize(msg));
+ connection.send(msg);
}
function presenceReceived(presence) {
@@ -196,7 +236,7 @@ function presenceReceived(presence) {
log("Allowing subscribe", pres.toString());
connection.send(pres);
if ($("#roster > div[jid=" + id + "]").length === 0) {
- $("#roster").append("<div jid='" + id + "'>" + bareFromJid + " (offline)</div>");
+ addToRoster(fromJid);
pres = $pres({to: fromJid, type: "subscribe"});
log("Requesting subscribe from " + fromJid, pres.toString());
connection.send(pres);
@@ -236,7 +276,7 @@ function addContact() {
alert("JID already present in the roster!");
return;
}
- $("#roster").append("<div jid='" + jid2id(toJid) + "'>" + toJid + " (offline)</div>");
+ addToRoster(toJid);
var pres = $pres({to: toJid, type: "subscribe"});
log("Requesting subscribe to " + toJid, pres.toString());
connection.send(pres);