aboutsummaryrefslogtreecommitdiffstats
path: root/webclient/lib
diff options
context:
space:
mode:
authorZaran <zaran.krleza@gmail.com>2011-01-15 16:01:08 +0100
committerZaran <zaran.krleza@gmail.com>2011-01-15 16:01:08 +0100
commit0aac4c0d473664635684a6c6da28fffdad78a474 (patch)
tree1002099d9b71f57994e843a5aa593057aeef0495 /webclient/lib
parent2527ad301546ef2104db8f0e76f6f1cb462a3d73 (diff)
downloadalias-0aac4c0d473664635684a6c6da28fffdad78a474.tar.gz
* Add basic stylesheet
* Make xmpp console hide/show system * Better roster fetching
Diffstat (limited to 'webclient/lib')
-rw-r--r--webclient/lib/basic.js160
1 files changed, 114 insertions, 46 deletions
diff --git a/webclient/lib/basic.js b/webclient/lib/basic.js
index 8ea5b5b..93ef884 100644
--- a/webclient/lib/basic.js
+++ b/webclient/lib/basic.js
@@ -1,76 +1,144 @@
-var BOSH_SERVICE = 'http://alias.fr.nf/http-bind/';
+var BOSH_SERVICE = 'http://alias.fr.nf/http-bind';
var connection = null;
-function log(msg)
+function log(msg, color)
{
- $('#log').append('<div></div>').append(document.createTextNode(msg));
+ $('#log').append($('<div></div>').css('background-color', color).text(msg));
}
function rawInput(data)
{
- log('RECV: ' + data);
+ log('RECV: ' + data, '#FBB6B4');
}
function rawOutput(data)
{
- log('SENT: ' + data);
+ log('SENT: ' + data, '#B5BBFB');
+}
+
+function getRoster()
+{
+ var roster = $iq({type : 'get'}).c('query', {xmlns : Strophe.NS.ROSTER});
+ connection.sendIQ(roster, onRoster);
+}
+
+function getPresence(contact)
+{
+ if ( contact.hasClass("online") )
+ return 2;
+ else if ( contact.hasClass("away") )
+ return 1;
+ else
+ return 0;
+}
+
+function jid_to_id(jid) {
+ return Strophe.getBareJidFromJid(jid).replace("@", "-").replace(".", "-");
+}
+
+function getJID(contact)
+{
+ return contact.find('.roster-jid').text();
+}
+
+function insertContact(contact)
+{
+ var presence = getPresence(contact);
+ var jid = getJID(contact);
+ var contacts = $('#roster li');
+ if (contacts.length > 0) {
+ var inserted = false;
+ contacts.each(function () {
+ var locpres = getPresence($(this));
+ var locjid = getJID($(this));
+
+ if (presence > locpres)
+ {
+ $(this).before(contact);
+ inserted = true;
+ return false;
+ }
+ else
+ {
+ if (jid < locjid)
+ {
+ $(this).before(contact);
+ inserted = true;
+ return false;
+ }
+ }
+ });
+
+ if (!inserted)
+ $('#roster ul').append(contact);
+ }
+ else
+ $('#roster ul').append(contact);
+}
+
+function onRoster(iq)
+{
+ 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 = 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>");
+ insertContact(contact);
+ });
+ return true;
}
function onConnect(status)
{
var jid = $('#jid').get(0).value;
- if (status == Strophe.Status.CONNECTING) {
+ if ( status == Strophe.Status.CONNECTING )
+ {
log('Strophe is connecting.');
- }
- else if (status == Strophe.Status.CONNFAIL) {
+ } else if ( status == Strophe.Status.CONNFAIL )
+ {
log('Strophe failed to connect.');
$('#connect').get(0).value = 'connect';
- }
- else if (status == Strophe.Status.DISCONNECTING) {
+ } else if ( status == Strophe.Status.DISCONNECTING )
+ {
log('Strophe is disconnecting.');
- }
- else if (status == Strophe.Status.DISCONNECTED) {
+ } else if ( status == Strophe.Status.DISCONNECTED )
+ {
log('Strophe is disconnected.');
$('#connect').get(0).value = 'connect';
- }
- else if (status == Strophe.Status.CONNECTED) {
+ } else if ( status == Strophe.Status.CONNECTED )
+ {
log('Strophe is connected.');
- connection.addHandler(onRoster,Strophe.NS.ROSTER,'iq','result',null, null);
+ getRoster();
connection.send($pres().tree());
- var roster = $iq({type:'get'}).c('query',{xmlns: Strophe.NS.ROSTER });
- connection.send(roster.tree());
}
}
-function onRoster(iq)
-{
- var elems = iq.getElementsByTagName('query');
- var query = elems[0];
- Strophe.forEachChild(query,'item',function (item){
- var name = item.getAttribute('jid');
- $('#contacts > ul').append('<li>'+name+'</li>');
- });
- return true;
-}
-
-
+$(document).ready(function(){
+ connection = new Strophe.Connection(BOSH_SERVICE);
+ connection.rawInput = rawInput;
+ connection.rawOutput = rawOutput;
-$(document).ready(function () {
- connection = new Strophe.Connection(BOSH_SERVICE);
- connection.rawInput = rawInput;
- connection.rawOutput = rawOutput;
+ $('#connect').bind('click', function(){
+ var button = $('#connect').get(0);
+ if ( button.value == 'connect' )
+ {
+ button.value = 'disconnect';
+ connection.connect($('#jid').get(0).value,
+ $('#pass').get(0).value,
+ onConnect);
+ } else
+ {
+ button.value = 'connect';
+ connection.disconnect();
+ }
+ });
- $('#connect').bind('click', function () {
- var button = $('#connect').get(0);
- if (button.value == 'connect') {
- button.value = 'disconnect';
-
- connection.connect($('#jid').get(0).value,
- $('#pass').get(0).value,
- onConnect);
- } else {
- button.value = 'connect';
- connection.disconnect();
- }
- });
+ $('#bottomup').click(function(){
+ $(this).next().slideToggle();
+ });
}); \ No newline at end of file