aboutsummaryrefslogtreecommitdiffstats
path: root/webclient/lib/basic.js
diff options
context:
space:
mode:
Diffstat (limited to 'webclient/lib/basic.js')
-rw-r--r--webclient/lib/basic.js352
1 files changed, 0 insertions, 352 deletions
diff --git a/webclient/lib/basic.js b/webclient/lib/basic.js
deleted file mode 100644
index d0795d1..0000000
--- a/webclient/lib/basic.js
+++ /dev/null
@@ -1,352 +0,0 @@
-var BOSH_SERVICE = 'http://alias.fr.nf/http-bind';
-var server_component = 'object.alias.fr.nf';
-
-/**
- * Alias namespace
- */
-var Alias = {
-
- /**
- * Status constants
- */
- Status: {
- ONLINE: 2,
- AWAY: 1,
- OFFLINE: 0
- },
-
- /**
- * Strophe xmpp connection
- */
- connection: null,
-
- /**
- * Send a roster request to server
- */
- getRoster: function() {
- var roster = $iq({type : 'get'}).c('query', {xmlns : Strophe.NS.ROSTER});
- Alias.connection.sendIQ(roster, Alias.onRoster);
- },
-
- /**
- * Return the status of a contact
- * @param contact a jquery object
- * @returns {Number} the status number
- * @see Alias.Status
- */
- getPresence: function(contact) {
- if ( contact.hasClass("online") )
- return Alias.Status["ONLINE"];
- else if ( contact.hasClass("away") )
- return Alias.Status["AWAY"];
- else
- return Alias.Status["OFFLINE"];
- },
-
- /**
- * Convert a jid to an id string suitable for css id
- * @param {String} jid
- * @returns {String} id
- */
- jid_to_id: function(jid) {
- return Strophe.getBareJidFromJid(jid).replace(/[@.]/g,'-');
- },
-
- /**
- * Return the id of a contact
- * @param contact jquery object
- * @returns {String} id
- */
- getID: function(contact) {
- return contact.find('.roster-jid').text();
- },
-
- /**
- * Return the name of a contact
- */
- getName : function(contact) {
- return contact.find('.roster-name').text();
- },
-
- /**
- * Get the home node of a contact
- * @param contact jquery object
- */
- getHome: function(contact) {
- var name = Base64.encode(Alias.getID(contact)) + '@' + server_component;
- var iq = $iq({type : 'get', to : name}).c('query', {xmlns : 'alias:query', type:'content'});
- Alias.connection.sendIQ(iq, Alias.onHome);
- },
-
- /**
- * Called when receiving home node, display in the main div
- * @param iq XML object
- */
- onHome: function(iq) {
- var content = $(iq).find('content').text();
- $('#main').html(content);
- },
-
- /**
- * Insert a contact keeping the sorting of the roster
- * The contacts are sorted based on their status and on their names
- * @param contact jQuery object
- */
- insertContact: function(contact) {
- var presence = Alias.getPresence(contact);
- var jid = Alias.getID(contact);
- var contacts = $('#roster li');
- if (contacts.length > 0) {
- var inserted = false;
- contacts.each(function () {
- var locpres = Alias.getPresence($(this));
- var locjid = Alias.getID($(this));
- if (presence > locpres)
- {
- $(this).before(contact);
- inserted = true;
- return false;
- }
- else if ( (presence == locpres) && (jid < locjid) )
- {
- $(this).before(contact);
- inserted = true;
- return false;
- }
- });
-
- if (!inserted)
- $('#roster ul').append(contact);
- }
- else
- $('#roster ul').append(contact);
- },
-
- onPresence: function(presence) {
- var who = $(presence).attr('from');
- var type = $(presence).attr('type');
- if (type !== 'error')
- {
- var contact = $('#' + Alias.jid_to_id(who));
- contact.removeClass('online away offline');
- if (type === 'unavailable')
- {
- contact.addClass('offline');
- }
- else
- {
- var show = $(presence).find('show').text();
- if (show === '' || show === '')
- {
- contact.addClass('online');
- }
- else
- {
- contact.addClass('away');
- }
- }
- contact.remove();
- Alias.insertContact(contact);
- }
- return true;
- },
-
- onRoster: function(iq) {
- $('#roster li').remove();
- var elems = iq.getElementsByTagName('query');
- var query = elems[0];
- Strophe.forEachChild(query, 'item', function(item)
- {
- var jid = item.getAttribute('jid');
- var name = item.getAttribute('name') || jid;
- var id = Alias.jid_to_id(jid);
- var contact = $("<li id='" + id + "' class='roster-contact offline'>"
- + "<div class='roster-name'>" + name + "</div>"
- + "<div class='roster-jid'>" + jid + "</div></li>");
- Alias.insertContact(contact);
- });
- Alias.connection.addHandler(Alias.onPresence,null,'presence', null, null, null, null);
- Alias.connection.send($pres());
- return true;
- },
-
- onConnect: function(status) {
- var jid = $('#jid').get(0).value;
- if ( status == Strophe.Status.CONNECTING )
- {
- log('Strophe is connecting.');
- } else if ( status == Strophe.Status.CONNFAIL )
- {
- log('Strophe failed to connect.');
- } else if ( status == Strophe.Status.DISCONNECTING )
- {
- log('Strophe is disconnecting.');
- } else if ( status == Strophe.Status.DISCONNECTED )
- {
- log('Strophe is disconnected.');
- } else if ( status == Strophe.Status.CONNECTED )
- {
- log('Strophe is connected.');
- Alias.getRoster();
- $('#password').val('');
- $('#login').dialog('close');
- $('#status').append($('<a href="#" id="connect">Disconnect</a>'));
- $('#connect').click(function(){
- Alias.connection.disconnect();
- $('#roster ul').empty();
- $('#login').dialog('open');
- $(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;
- }
-
-};
-
-function log(msg, color) {
- $('#log').append($('<div></div>').css('background-color', color).text(msg));
-}
-
-function rawInput(data) {
- log('RECV: ' + data, '#FBB6B4');
-}
-
-function rawOutput(data) {
- log('SENT: ' + data, '#B5BBFB');
-}
-
-jQuery.expr[':'].Contains = function(a,i,m){
- return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
-};
-
-$(document).ready(function(){
- var connection = new Strophe.Connection(BOSH_SERVICE);
- connection.rawInput = rawInput;
- connection.rawOutput = rawOutput;
- Alias.connection = connection;
- Alias.connection.addHandler(Alias.onMessage, null, "message", "chat");
-
- $('#login').dialog({
- autoOpen: true,
- modal: true,
- title: 'Connect',
- buttons: {
- 'Connect' : function () {
- Alias.connection.connect($('#jid').get(0).value,
- $('#pass').get(0).value,
- Alias.onConnect);}
- }
- });
-
- $('#bottomup').click(function(){
- $(this).next().slideToggle();
- });
-
- $('#tabs').tabs();
-
- $('#tabs').bind('tabsshow',function(event,ui){
- $(ui.panel).find('input').focus();
- $(ui.tab).parent().removeClass('ui-state-focus');
- });
-
- $('#rosterfilter').keyup(function() {
- var filter = $(this).val();
- $('#roster ul li div.roster-name:not(:Contains("' + filter + '"))').parent().hide();
- $('#roster ul li div.roster-name:Contains("' + filter + '")').parent().show();
- });
-
- $('.roster-contact').live('click', function(){
- log('test');
- var jid = Alias.getID($(this));
- var name = Alias.getName($(this));
- var id = Alias.jid_to_id(jid);
-
- if ($('#chat-' + id).length === 0) {
- $('#tabs').tabs('add', '#chat-' + id, name);
- $('#chat-' + id).append(
- "<div class='chat-messages'></div>" +
- "<input type='text' class='chat-input'/>");
- $('#chat-' + id).data('jid', jid);
- }
- $('#tabs').tabs('select', '#chat-' + id);
-
- $('#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('');
- }
- });
-});
-
-