|
@@ -1,251 +0,0 @@
|
|
|
-/*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);
|