123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /*global $:false, document:false, window:false, portal_url:false,
- $msg:false, Strophe:false, setTimeout:false, navigator:false, jarn:false, google:false, jarnxmpp:false, jQuery:false, sessionStorage:false, $iq:false, $pres:false, Image:false, */
- (function (jarnxmpp, $, portal_url) {
- portal_url = portal_url || '';
- jarnxmpp.Storage = {
- storage: null,
- init: function () {
- try {
- if ('sessionStorage' in window && window.sessionStorage !== null && JSON in window && window.JSON !== null) {
- jarnxmpp.Storage.storage = sessionStorage;
- if (!('_user_info' in jarnxmpp.Storage.storage)) {
- jarnxmpp.Storage.set('_user_info', {});
- }
- if (!('_vCards' in jarnxmpp.Storage.storage)) {
- jarnxmpp.Storage.set('_vCards', {});
- }
- if (!('_subscriptions' in jarnxmpp.Storage.storage)) {
- jarnxmpp.Storage.set('_subscriptions', null);
- }
- }
- } catch (e) {}
- },
- get: function (key) {
- if (key in sessionStorage) {
- return JSON.parse(sessionStorage[key]);
- }
- return null;
- },
- set: function (key, value) {
- sessionStorage[key] = JSON.stringify(value);
- },
- xmppGet: function (key, callback) {
- var stanza = $iq({type: 'get'})
- .c('query', {xmlns: 'jabber:iq:private'})
- .c('jarnxmpp', {xmlns: 'http://jarn.com/ns/jarnxmpp:prefs:' + key})
- .tree();
- jarnxmpp.connection.sendIQ(stanza, function success(result) {
- callback($('jarnxmpp ' + 'value', result).first().text());
- });
- },
- xmppSet: function (key, value) {
- var stanza = $iq({type: 'set'})
- .c('query', {xmlns: 'jabber:iq:private'})
- .c('jarnxmpp', {xmlns: 'http://jarn.com/ns/jarnxmpp:prefs:' + key})
- .c('value', value)
- .tree();
- jarnxmpp.connection.sendIQ(stanza);
- }
- };
- jarnxmpp.Storage.init();
- jarnxmpp.Presence = {
- online: {},
- _user_info: {},
- onlineCount: function () {
- var me = Strophe.getNodeFromJid(jarnxmpp.connection.jid),
- counter = 0,
- user;
- for (user in jarnxmpp.Presence.online) {
- if ((jarnxmpp.Presence.online.hasOwnProperty(user)) && user !== me) {
- counter += 1;
- }
- }
- return counter;
- },
- getUserInfo: function (user_id, callback) {
- // User info on browsers without storage
- if (jarnxmpp.Storage.storage === null) {
- if (user_id in jarnxmpp.Presence._user_info) {
- callback(jarnxmpp.Presence._user_info[user_id]);
- } else {
- $.getJSON(portal_url + "/xmpp-userinfo?user_id=" + user_id, function (data) {
- jarnxmpp.Presence._user_info[user_id] = data;
- callback(data);
- });
- }
- } else {
- var _user_info = jarnxmpp.Storage.get('_user_info');
- if (user_id in _user_info) {
- callback(_user_info[user_id]);
- } else {
- $.getJSON(portal_url + "/xmpp-userinfo?user_id=" + user_id, function (data) {
- _user_info[user_id] = data;
- jarnxmpp.Storage.set('_user_info', _user_info);
- callback(data);
- });
- }
- }
- }
- };
- jarnxmpp.vCard = {
- _vCards: {},
- _getVCard: function (jid, callback) {
- var stanza =
- $iq({type: 'get', to: jid})
- .c('vCard', {xmlns: 'vcard-temp'}).tree();
- jarnxmpp.connection.sendIQ(stanza, function (data) {
- var result = {};
- $('vCard[xmlns="vcard-temp"]', data).children().each(function (idx, element) {
- result[element.nodeName] = element.textContent;
- });
- if (typeof (callback) !== 'undefined') {
- callback(result);
- }
- });
- },
- getVCard: function (jid, callback) {
- jid = Strophe.getBareJidFromJid(jid);
- if (jarnxmpp.Storage.storage === null) {
- if (jid in jarnxmpp.vCard._vCards) {
- callback(jarnxmpp.vCard._vCards[jid]);
- } else {
- jarnxmpp.vCard._getVCard(jid, function (result) {
- jarnxmpp.vCard._vCards[jid] = result;
- callback(result);
- });
- }
- } else {
- var _vCards = jarnxmpp.Storage.get('_vCards');
- if (jid in _vCards) {
- callback(_vCards[jid]);
- } else {
- jarnxmpp.vCard._getVCard(jid, function (result) {
- _vCards[jid] = result;
- jarnxmpp.Storage.set('_vCards', _vCards);
- callback(result);
- });
- }
- }
- },
- setVCard: function (params, photoUrl) {
- var key,
- vCard = Strophe.xmlElement('vCard', [['xmlns', 'vcard-temp'], ['version', '2.0']]);
- for (key in params) {
- if (params.hasOwnProperty(key)) {
- vCard.appendChild(Strophe.xmlElement(key, [], params[key]));
- }
- }
- var send = function () {
- var stanza = $iq({type: 'set'}).cnode(vCard).tree();
- jarnxmpp.connection.sendIQ(stanza);
- };
- if (typeof (photoUrl) === 'undefined') {
- send();
- } else {
- jarnxmpp.vCard.getBase64Image(photoUrl, function (base64img) {
- base64img = base64img.replace(/^data:image\/png;base64,/, "");
- var photo = Strophe.xmlElement('PHOTO');
- photo.appendChild(Strophe.xmlElement('TYPE', [], 'image/png'));
- photo.appendChild(Strophe.xmlElement('BINVAL', [], base64img));
- vCard.appendChild(photo);
- send();
- });
- }
- },
- getBase64Image: function (url, callback) {
- // Create the element, then draw it on a canvas to get the base64 data.
- var img = new Image();
- $(img).load(function () {
- var canvas = document.createElement('canvas');
- canvas.width = img.width;
- canvas.height = img.height;
- var ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0);
- callback(canvas.toDataURL('image/png'));
- }).attr('src', url);
- }
- };
- jarnxmpp.onConnect = function (status) {
- if ((status === Strophe.Status.ATTACHED) || (status === Strophe.Status.CONNECTED)) {
- $(window).bind('beforeunload', function () {
- $(document).trigger('jarnxmpp.disconnecting');
- var presence = $pres({type: 'unavailable'});
- jarnxmpp.connection.send(presence);
- jarnxmpp.connection.disconnect();
- jarnxmpp.connection.flush();
- });
- $(document).trigger('jarnxmpp.connected');
- } else if (status === Strophe.Status.DISCONNECTED) {
- $(document).trigger('jarnxmpp.disconnected');
- }
- };
- jarnxmpp.rawInput = function (data) {
- var event = jQuery.Event('jarnxmpp.dataReceived');
- event.text = data;
- $(document).trigger(event);
- };
- jarnxmpp.rawOutput = function (data) {
- var event = jQuery.Event('jarnxmpp.dataSent');
- event.text = data;
- $(document).trigger(event);
- };
- $(document).bind('jarnxmpp.connected', function () {
- // Logging
- jarnxmpp.connection.rawInput = jarnxmpp.rawInput;
- jarnxmpp.connection.rawOutput = jarnxmpp.rawOutput;
- });
- $(document).bind('jarnxmpp.disconnecting', function () {
- if (jarnxmpp.Storage.storage !== null) {
- jarnxmpp.Storage.set('online-count', jarnxmpp.Presence.onlineCount());
- }
- });
- $(document).ready(function () {
- var resource = jarnxmpp.Storage.get('xmppresource');
- if (resource) {
- data = {'resource': resource};
- } else {
- data = {};
- }
- $.ajax({
- 'url':portal_url + '/@@xmpp-loader',
- 'dataType': 'json',
- 'data': data,
- 'success': function (data) {
- if (!(('rid' in data) && ('sid' in data) && ('BOSH_SERVICE' in data))) {
- return;
- }
- if (!resource) {
- jarnxmpp.Storage.set('xmppresource', Strophe.getResourceFromJid(data.jid));
- }
- jarnxmpp.BOSH_SERVICE = data.BOSH_SERVICE;
- jarnxmpp.jid = data.jid;
- jarnxmpp.connection = new Strophe.Connection(jarnxmpp.BOSH_SERVICE);
- jarnxmpp.connection.attach(jarnxmpp.jid, data.sid, data.rid, jarnxmpp.onConnect);
- }
- });
- });
- })(window.jarnxmpp = window.jarnxmpp || {}, jQuery, portal_url);
|