diff options
| author | Zaran <zaran.krleza@gmail.com> | 2011-03-31 01:53:24 +0200 |
|---|---|---|
| committer | Zaran <zaran.krleza@gmail.com> | 2011-03-31 01:53:24 +0200 |
| commit | 0f42ad64d61bd6e4d7eb8d25f4264dcc8d5865bf (patch) | |
| tree | d4702a16833909a16f83c5e481ddb0fe3922f1fa /webclient/lib/basic.js | |
| parent | 35b716a28254788c3a61d41f893bbe92b3bab9d1 (diff) | |
| download | alias-0f42ad64d61bd6e4d7eb8d25f4264dcc8d5865bf.tar.gz | |
Basic chat feature, crudely stripped down from Moffit's book.
Diffstat (limited to 'webclient/lib/basic.js')
| -rw-r--r-- | webclient/lib/basic.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/webclient/lib/basic.js b/webclient/lib/basic.js index 610afd1..d0795d1 100644 --- a/webclient/lib/basic.js +++ b/webclient/lib/basic.js @@ -198,6 +198,59 @@ var Alias = { $(this).remove(); }); } + }, + + onMessage: function (message) { + var full_jid = $(message).attr('from'); + var jid = Strophe.getBareJidFromJid(full_jid); + var jid_id = Alias.jid_to_id(jid); + + if ($('#chat-' + jid_id).length === 0) { + $('#tabs').tabs('add', '#chat-' + jid_id, jid); + $('#chat-' + jid_id).append( + "<div class='chat-messages'></div>" + + "<input type='text' class='chat-input'>"); + } + + $('#chat-' + jid_id).data({jid: full_jid}); + + var body = $(message).find("html > body"); + + if (body.length === 0) { + body = $(message).find('body'); + if (body.length > 0) { + body = body.text(); + } else { + body = null; + } + } else { + body = body.contents(); + var span = $("<span></span>"); + body.each(function () { + if (document.importNode) { + $(document.importNode(this, true)).appendTo(span); + } else { + // IE workaround + span.append(this.xml); + } + }); + + body = span; + } + + if (body) { + // add the new message + $('#chat-' + jid_id + ' .chat-messages').append( + "<p class='chat-message'><span class='chat-name'>" + + Strophe.getNodeFromJid(jid) + + "</span><span class='chat-text'></span></p>"); + + $('#chat-' + jid_id + ' .chat-message:last .chat-text') + .append(body); + + } + + return true; } }; @@ -223,6 +276,7 @@ $(document).ready(function(){ connection.rawInput = rawInput; connection.rawOutput = rawOutput; Alias.connection = connection; + Alias.connection.addHandler(Alias.onMessage, null, "message", "chat"); $('#login').dialog({ autoOpen: true, @@ -270,6 +324,29 @@ $(document).ready(function(){ $('#chat-' + id + ' input').focus(); }); + + $('.chat-input').live('keypress', function (ev) { + var jid = $(this).parent().data('jid'); + + if (ev.which === 13) { + ev.preventDefault(); + + var body = $(this).val(); + + var message = $msg({to: jid, "type": "chat"}) + .c('body').t(body).up() + .c('active', {xmlns: "http://jabber.org/protocol/chatstates"}); + Alias.connection.send(message); + + $(this).parent().find('.chat-messages').append( + "<p class='chat-message'><span class='chat-name me'>" + + Strophe.getNodeFromJid(Alias.connection.jid) + + "</span><span class='chat-text'>" + body + + "</span></p>"); + + $(this).val(''); + } + }); }); |
