]> git.babelmonkeys.de Git - socialXMPP.git/commitdiff
Message sending
authorFlorian Zeitz <florob@babelmonkeys.de>
Sat, 20 Jun 2009 19:39:50 +0000 (21:39 +0200)
committerFlorian Zeitz <florob@babelmonkeys.de>
Sat, 20 Jun 2009 19:42:35 +0000 (21:42 +0200)
* Added message sending support
* Added moveable bubbles

css/standard.css
scripts/basic.js
scripts/classes.js
scripts/strophejs

index 25e4aed4655e08610134e3628777510e9f50c8fd..62dbe00765609e49c99b577de8f0ed7c52c739bb 100644 (file)
   color: blue;
 }
 
+.receiver {
+  color: darkred;
+}
+
 .chat {
+  position: fixed;
+  background-color: white;
   width: 30%;
-  height: 30%;
   padding: 1em;
   border: 2px solid;
 }
+
+.chatForm {
+  width: 100%;
+}
index 1ef91154cde0c8947ce8b8640079757c41b66870..aecaa7eeed3e062a490b4d5d5f2be1ccee3c815a 100644 (file)
@@ -4,6 +4,7 @@ var NS_PEP = 'http://jabber.org/protocol/pubsub#event';
 var NS_TUNE = 'http://jabber.org/protocol/tune';
 var BOSH_SERVICE = 'http://localhost:5280/http-bind/';
 
+var localJID = null;
 var connection   = null;
 var show_log     = true;
 
@@ -59,6 +60,11 @@ function populateVCard(e, jid) {
     $(e).find('EMAIL:has(WORK)').each(function() {
         $('#EMAILWORK').append(Strophe.xmlTextNode($(this).find('USERID').text()));
     });
+
+    $('#vCard').click(function () {
+        $('#vCard_container').slideUp("normal");
+      });
+
     $('#vCard_container').slideDown("normal");
 }
 
@@ -141,10 +147,18 @@ function getOwnInfo() {
 
 function addFriend(jid, nick) {
     roster[jid2id(jid)] = new Buddy(nick, jid);
-    $('#friends').append('<div class="friend" id="'+jid2id(jid)+'"><img src="imgs/none.png" /><br /><span class="nick">'+nick+'</span></div>');
-    $('#'+jid2id(jid)).click(function() {
+    $('#friends').append('<div class="friend" id="'+jid2id(jid)+'"><img src="imgs/none.png" /><br /><a class="nick">'+nick+'</a></div>');
+    $('#' + jid2id(jid) + ' img').click(function() {
        getVCard(jid);
     });
+    $('#' + jid2id(jid) + ' a').click(function() {
+       var id = jid2id(jid) + 'Chat';
+       if ($('#' + id).length <= 0) {
+           createBubble(jid);
+       }
+       $('#' + id).show();
+    });
+
 }
 
 function _cbRoster(e) {
@@ -158,7 +172,7 @@ function _cbRoster(e) {
        addFriend(entries[item].getAttribute('jid'), nick);
     }
     connection.addHandler(_cbPEP, NS_PEP, 'message');
-    var initialPresence = $pres().c('show').t('online').up().c('status').t('Hy, I am an socialXMPP instance').up().c('priority').t('0').up().c('c', {xmlns: NS_CAPS, hash: 'sha-1', node: 'http://jabber.babelmonkeys.de', ver: genCaps()}).up();
+    var initialPresence = $pres().c('show').t('online').up().c('status').t('Hy, I am an socialXMPP instance').up().c('priority').t('1').up().c('c', {xmlns: NS_CAPS, hash: 'sha-1', node: 'http://jabber.babelmonkeys.de', ver: genCaps()}).up();
     connection.send(initialPresence.tree());
 
     return false;
@@ -190,11 +204,34 @@ function _cbDisco(e) {
     return true;
 }
 
+function sendMessage(form, to) {
+    if (form.text.value) {
+       var id = jid2id(to) + 'Chat';
+       var message = $msg({'type': 'chat', 'to': to}).c('body').t(form.text.value);
+       connection.send(message.tree());
+       $('#' + id + ' p').append('<br/>');
+       $('#' + id + ' p').append('<span class="receiver">' + localJID + ': </span>');
+       $('#' + id + ' p').append(form.text.value);
+       form.text.value = '';
+    }
+
+    return false;
+}
+
+function createBubble(jid) {
+    var id = jid2id(jid) + 'Chat';
+    $('body').append('<div class="chat" id="' + id + '" onmousedown="startDrag(this)"><a href="#" onclick="$(' + "'#" + id + "'" + ').hide()">Close</a><p></p></div>');
+    $('#' + id).append('<form id="' + id + 'Form" class="chatForm" onsubmit="return sendMessage(this, \'' + jid + '\');" action="#"><input type="text" name="text" id="' + id + 'Text" class="chatForm" /></form>')
+    $('#' + id).css( 'top', $('#' + jid2id(jid)).position().top + 40);
+    $('#' + id).css( 'left', $('#' + jid2id(jid)).position().left + 40);
+}
+
+
 function _cbMessage(msg) {
     if ($(msg).attr('type') != 'chat')
-       return;
+       return true;
     var jid = $(msg).attr('from');
-    var id = jid2id($(msg).attr('from')) + 'Chat';
+    var id = jid2id(jid) + 'Chat';
     var body = $(msg).find('body:first').text();
     body = escape(body);
     body = body.replace(/%0A/g, '<br/>');
@@ -202,13 +239,13 @@ function _cbMessage(msg) {
     body = body.replace(/%3E/g, '&gt;');
     body = body.replace(/%26/g, '&amp;');
     body = unescape(body);
-    if ($('#' + id).length > 0) {
-       $('#' + id + ' p').append('<br/>');
-       $('#' + id + ' p').append('<span class="sender">' + jid + ': </span>');
-       $('#' + id + ' p').append(body);
-    } else {
-       $('body').append('<div class="chat" id="' + id + '"><p><span class="sender">' + jid + ': </span>' + body + '</p></div>');
+    if ($('#' + id).length <= 0) {
+       createBubble(jid);
     }
+    $('#' + id + ' p').append('<br/>');
+    $('#' + id + ' p').append('<span class="sender">' + jid + ': </span>');
+    $('#' + id + ' p').append(body);
+    $('#' + id).show();
 
     return true;
 }
@@ -268,9 +305,10 @@ function onConnect(status) {
        log('Strophe is disconnected.');
        showConnect();
     } else if (status == Strophe.Status.AUTHFAIL) {
-       log('Authentication failed.');
-       connection.disconnect();
-       showConnect();
+       log('Authentication failed');
+       if (connection) {
+           connection.disconnect();
+       }
     } else if (status == Strophe.Status.CONNECTED) {
        log('Strophe is connected.');
        getOwnInfo();
@@ -317,19 +355,16 @@ $(document).ready(function () {
     $("#log_toggle").click(function () {
        $("#log").toggle();     
       });
-      
-    $('#vCard_container').click(function () {
-        $('#vCard_container').slideUp("normal");
-      });
 
     $('#cred').bind('submit', function () {
        var button = $('#connect').get(0);
        var jid = $('#jid');
        var pass = $('#pass');  
+       localJID = jid.get(0).value;
        
        if (button.value == 'connect') {
            showDisconnect();
-           connection.connect(jid.get(0).value,
+           connection.connect(localJID,
                               pass.get(0).value,
                               onConnect);
        } else {
@@ -339,3 +374,40 @@ $(document).ready(function () {
        return false;
     });
 });
+
+// Element moving
+var dragElement = null;
+var mouseX = 0;
+var mouseY = 0;
+var offX = 0;
+var offY = 0;
+
+function startDrag(element) {
+    dragElement = element;
+    offX = mouseX - dragElement.offsetLeft;
+    offY = mouseY - dragElement.offsetTop;
+}
+
+function doDrag(eve) {
+    mouseX = eve.pageX;
+    mouseY = eve.pageY;
+
+    if (dragElement) {
+       dragElement.style.left = (mouseX - offX) + 'px';
+       dragElement.style.top = (mouseY - offY) + 'px';
+    }
+}
+
+function stopDrag(eve) {
+    dragElement = null;
+}
+
+onunload = function() {
+    if (connection) {
+       connection.disconnect();
+    }
+}
+
+onmousemove = doDrag;
+onmouseup = stopDrag;
+
index c991a8af77d0d89cd16364508e8eea226daa5db3..62d962f760f1ce37ad3c040a760e754cfef6ba11 100644 (file)
@@ -6,6 +6,11 @@ Tune = function() {
     this.title = '';
     this.track = 1;
     this.uri = '';
+    this.isEmpty = function() {
+       return ( (this.artist == '') && (this.length == 0) && (this.rating == 1)
+           && (this.source == '') && (this.title == '') && (this.track == 1)
+           && (this.uri == '') );
+    }
 }
 
 Buddy = function(name, jid) {
index 76af4af579d71ded60a18e84ea99333b98c8e2d2..b3177bf164e2a8d26f18535d117a18f935340379 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 76af4af579d71ded60a18e84ea99333b98c8e2d2
+Subproject commit b3177bf164e2a8d26f18535d117a18f935340379