]> cgit.babelmonkeys.de Git - socialXMPP.git/blob - scripts/basic.js
6620d4940790dc7333f95742d413221e43ed65a3
[socialXMPP.git] / scripts / basic.js
1 var NS_VCARD = 'vcard-temp';
2 var BOSH_SERVICE = 'http://localhost:5280/http-bind/';
3
4 var connection   = null;
5 var show_log     = true;
6
7 function log(msg) {
8     var entry = $('<div></div>').append(document.createTextNode(msg));
9     $('#log').append(entry);
10 }
11
12 function rawInput(data) {
13     log('RECV: ' + data);
14 }
15
16 function rawOutput(data) {
17     log('SENT: ' + data);
18 }
19
20 function jid2id(jid) {
21     return jid.split('@')[0] + "-" + jid.split('@')[1];
22 }
23
24 function _cbVCard(e) {
25     var jid = e.getAttribute('from');
26     var avatar = e.getElementsByTagName('PHOTO')[0];
27     var mime = Strophe.getText(avatar.getElementsByTagName('TYPE')[0]);
28     var binval = Strophe.getText(avatar.getElementsByTagName('BINVAL')[0]);
29
30     $("#"+jid2id(jid)+" img").attr('src', 'data:'+mime+';base64,'+binval);
31
32     return false;
33 }
34
35 function getAvatar(jid) {
36     var id = 'getvCard'+jid;
37     var vCardiq = $iq({'from':connection.jid+"/"+connection.resource,
38                         'to':jid,
39                         'id':id,
40                         'type':'get'}
41         ).c('vCard', {'xmlns':NS_VCARD});
42     connection.addHandler(_cbVCard, null, 'iq', 'result', id);
43     connection.send(vCardiq.tree());
44
45 }
46
47 function addFriend(jid, nick) {
48     $('#friends').append('<div id="'+jid2id(jid)+'"><img src="imgs/none.png" /><br /><span class="nick">'+nick+'</span></div>');
49     $('#'+jid2id(jid)).click(function() {
50         getAvatar(jid);
51     });
52 }
53
54 function _cbRoster(e) {
55     var query = e.getElementsByTagName('query')[0];
56     var entries = query.getElementsByTagName('item');
57     for (var item=0; item<entries.length; item++) {
58         addFriend(entries[item].getAttribute('jid'), entries[item].getAttribute('name'));
59     }
60     return false;
61 }
62
63 function getRoster() {
64     var id = 'getRoster';
65
66     var rosteriq = $iq({'from':connection.jid+"/"+connection.resource,
67                         'id':id,
68                         'type':'get'}
69         ).c('query', {'xmlns':Strophe.NS.ROSTER});
70
71     connection.addHandler(_cbRoster, null, 'iq', 'result', id);
72     connection.send(rosteriq.tree());
73 }
74
75 function onConnect(status) {
76     if (status == Strophe.Status.CONNECTING) {
77         log('Strophe is connecting.');
78
79     } else if (status == Strophe.Status.CONNFAIL) {
80         log('Strophe failed to connect.');
81         showConnect();
82     } else if (status == Strophe.Status.DISCONNECTING) {
83         log('Strophe is disconnecting.');
84     } else if (status == Strophe.Status.DISCONNECTED) {
85         log('Strophe is disconnected.');
86         showConnect();
87
88     } else if (status == Strophe.Status.CONNECTED) {
89         log('Strophe is connected.');
90         getRoster();
91     }
92 }
93
94 function showConnect() {
95     var jid = $('#jid');
96     var pass = $('#pass');
97     var button = $('#connect').get(0);  
98
99     $('#log').empty();
100     $('#friends').empty();
101     $('label').show();
102     jid.show();
103     pass.show();
104     button.value = 'connect';
105     return false;
106 }
107
108 function showDisconnect() {
109     var jid = $('#jid');
110     var pass = $('#pass');
111     var button = $('#connect').get(0);  
112
113     button.value = 'disconnect';
114     pass.hide();
115     jid.hide();
116     $('label').hide();
117     return false;
118 }
119
120 $(document).ready(function () {
121     connection = new Strophe.Connection(BOSH_SERVICE);
122     connection.rawInput = rawInput;
123     connection.rawOutput = rawOutput;
124
125     $("#log_toggle").bind('click', function () {
126         $("#log").toggle();     
127       } 
128       );
129
130     $('#cred').bind('submit', function () {
131         var button = $('#connect').get(0);
132         var jid = $('#jid');
133         var pass = $('#pass');  
134         
135         if (button.value == 'connect') {
136             showDisconnect();
137             connection.connect(jid.get(0).value,
138                                pass.get(0).value,
139                                onConnect);
140         } else {
141             connection.disconnect();
142             showConnect();
143         }
144         return false;
145     });
146 });