Pārlūkot izejas kodu

Merge branch 'master' into converse-omemo

JC Brand 7 gadi atpakaļ
vecāks
revīzija
62cecbec5f

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 626 - 59
dist/converse-no-dependencies.js


+ 149 - 111
dist/converse.js

@@ -36,19 +36,34 @@
 /******/ 	// define getter function for harmony exports
 /******/ 	__webpack_require__.d = function(exports, name, getter) {
 /******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, {
-/******/ 				configurable: false,
-/******/ 				enumerable: true,
-/******/ 				get: getter
-/******/ 			});
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
 /******/ 		}
 /******/ 	};
 /******/
 /******/ 	// define __esModule on exports
 /******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
 /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
 /******/ 	};
 /******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
 /******/ 	// getDefaultExport function for compatibility with non-harmony modules
 /******/ 	__webpack_require__.n = function(module) {
 /******/ 		var getter = module && module.__esModule ?
@@ -2560,13 +2575,7 @@ backbone.nativeview = __webpack_require__(/*! backbone.nativeview */ "./node_mod
             if (_.isFunction(this.beforeRender)) {
                 this.beforeRender();
             }
-            let new_vnode;
-            if (!_.isNil(this.toHTML)) {
-                new_vnode = tovnode.toVNode(parseHTMLToDOM(this.toHTML()));
-            } else {
-                new_vnode = tovnode.toVNode(this.toDOM());
-            }
-
+            const new_vnode = tovnode.toVNode(parseHTMLToDOM(this.toHTML()));
             new_vnode.data.hook = _.extend({
                create: this.updateEventListeners.bind(this),
                update: this.updateEventListeners.bind(this)
@@ -27145,13 +27154,12 @@ var map = {
 
 function webpackContext(req) {
 	var id = webpackContextResolve(req);
-	var module = __webpack_require__(id);
-	return module;
+	return __webpack_require__(id);
 }
 function webpackContextResolve(req) {
 	var id = map[req];
 	if(!(id + 1)) { // check for number or string
-		var e = new Error('Cannot find module "' + req + '".');
+		var e = new Error("Cannot find module '" + req + "'");
 		e.code = 'MODULE_NOT_FOUND';
 		throw e;
 	}
@@ -59647,26 +59655,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-var g;
-
-// This works in non-strict mode
-g = (function() {
-	return this;
-})();
-
-try {
-	// This works if eval is allowed (see CSP)
-	g = g || Function("return this")() || (1, eval)("this");
-} catch (e) {
-	// This works if the window reference is available
-	if (typeof window === "object") g = window;
-}
-
-// g can still be undefined, but nothing to do about it...
-// We return undefined, instead of nothing here, so it's
-// easier to handle this case. if(!global) { ...}
-
-module.exports = g;
+var g;
+
+// This works in non-strict mode
+g = (function() {
+	return this;
+})();
+
+try {
+	// This works if eval is allowed (see CSP)
+	g = g || Function("return this")() || (1, eval)("this");
+} catch (e) {
+	// This works if the window reference is available
+	if (typeof window === "object") g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
 
 
 /***/ }),
@@ -59678,28 +59686,28 @@ module.exports = g;
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-module.exports = function(module) {
-	if (!module.webpackPolyfill) {
-		module.deprecate = function() {};
-		module.paths = [];
-		// module.parent = undefined by default
-		if (!module.children) module.children = [];
-		Object.defineProperty(module, "loaded", {
-			enumerable: true,
-			get: function() {
-				return module.l;
-			}
-		});
-		Object.defineProperty(module, "id", {
-			enumerable: true,
-			get: function() {
-				return module.i;
-			}
-		});
-		module.webpackPolyfill = 1;
-	}
-	return module;
-};
+module.exports = function(module) {
+	if (!module.webpackPolyfill) {
+		module.deprecate = function() {};
+		module.paths = [];
+		// module.parent = undefined by default
+		if (!module.children) module.children = [];
+		Object.defineProperty(module, "loaded", {
+			enumerable: true,
+			get: function() {
+				return module.l;
+			}
+		});
+		Object.defineProperty(module, "id", {
+			enumerable: true,
+			get: function() {
+				return module.i;
+			}
+		});
+		module.webpackPolyfill = 1;
+	}
+	return module;
+};
 
 
 /***/ }),
@@ -62065,9 +62073,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
           this.on('add', _.flow(this.openBookmarkedRoom, this.markRoomAsBookmarked));
           this.on('remove', this.markRoomAsUnbookmarked, this);
           this.on('remove', this.sendBookmarkStanza, this);
-          const cache_key = `converse.room-bookmarks${_converse.bare_jid}`;
+
+          const storage = _converse.session.get('storage'),
+                cache_key = `converse.room-bookmarks${_converse.bare_jid}`;
+
           this.fetched_flag = b64_sha1(cache_key + 'fetched');
-          this.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(cache_key));
+          this.browserStorage = new Backbone.BrowserStorage[storage](b64_sha1(cache_key));
         },
 
         openBookmarkedRoom(bookmark) {
@@ -62275,10 +62286,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
           _converse.chatboxes.on('remove', this.renderBookmarkListElement, this);
 
-          const cachekey = `converse.room-bookmarks${_converse.bare_jid}-list-model`;
-          this.list_model = new _converse.BookmarksList();
-          this.list_model.id = cachekey;
-          this.list_model.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(cachekey));
+          const storage = _converse.session.get('storage'),
+                id = b64_sha1(`converse.room-bookmarks${_converse.bare_jid}-list-model`);
+
+          this.list_model = new _converse.BookmarksList({
+            'id': id
+          });
+          this.list_model.browserStorage = new Backbone.BrowserStorage[storage](id);
           this.list_model.fetch();
           this.render();
           this.sortAndPositionAllItems();
@@ -62811,7 +62825,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
           });
 
           this.messages = new _converse.Messages();
-          this.messages.browserStorage = new Backbone.BrowserStorage[_converse.storage](`converse.messages${this.get('jid')}${_converse.bare_jid}`);
+
+          const storage = _converse.session.get('storage');
+
+          this.messages.browserStorage = new Backbone.BrowserStorage[storage](b64_sha1(`converse.messages${this.get('jid')}${_converse.bare_jid}`));
           this.messages.chatbox = this;
           this.messages.on('change:upload', message => {
             if (message.get('upload') === _converse.SUCCESS) {
@@ -63781,11 +63798,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
           'scroll_position': 0
         },
 
-        initialize() {
-          const id = `converse.emoji-${_converse.bare_jid}`;
-          this.id = id;
-          this.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
-        }
+        initialize() {}
 
       });
       _converse.EmojiPickerView = Backbone.VDOMView.extend({
@@ -64743,7 +64756,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
         createEmojiPicker() {
           if (_.isUndefined(_converse.emojipicker)) {
-            _converse.emojipicker = new _converse.EmojiPicker();
+            const storage = _converse.session.get('storage'),
+                  id = `converse.emoji-${_converse.bare_jid}`;
+
+            _converse.emojipicker = new _converse.EmojiPicker({
+              'id': id
+            });
+            _converse.emojipicker.browserStorage = new Backbone.BrowserStorage[storage](id);
 
             _converse.emojipicker.fetch();
           }
@@ -65511,8 +65530,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
           }
 
           const form_data = new FormData(ev.target);
-          _converse.trusted = form_data.get('trusted');
-          _converse.storage = form_data.get('trusted') ? 'local' : 'session';
+
+          _converse.session.save({
+            'trusted': form_data.get('trusted') && true || false,
+            'storage': form_data.get('trusted') ? 'local' : 'session'
+          });
+
           let jid = form_data.get('jid');
 
           if (_converse.locked_domain) {
@@ -65639,7 +65662,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       });
 
       _converse.on('clearSession', () => {
-        if (_converse.trusted) {
+        if (_converse.session.get('trusted')) {
           const chatboxes = _.get(_converse, 'chatboxes', null);
 
           if (!_.isNil(chatboxes)) {
@@ -65873,7 +65896,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
     rid: undefined,
     root: window.document,
     sid: undefined,
-    storage: 'session',
     strict_plugin_dependencies: false,
     trusted: true,
     view_mode: 'overlayed',
@@ -66353,23 +66375,25 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       if (reconnecting) {
         _converse.onStatusInitialized(reconnecting);
       } else {
-        this.xmppstatus = new this.XMPPStatus();
-        const id = b64_sha1(`converse.xmppstatus-${_converse.bare_jid}`);
-        this.xmppstatus.id = id; // Appears to be necessary for backbone.browserStorage
-
-        this.xmppstatus.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
+        const id = `converse.xmppstatus-${_converse.bare_jid}`;
+        this.xmppstatus = new this.XMPPStatus({
+          'id': id
+        });
+        this.xmppstatus.browserStorage = new Backbone.BrowserStorage.session(id);
         this.xmppstatus.fetch({
-          success: _.partial(_converse.onStatusInitialized, reconnecting),
-          error: _.partial(_converse.onStatusInitialized, reconnecting)
+          'success': _.partial(_converse.onStatusInitialized, reconnecting),
+          'error': _.partial(_converse.onStatusInitialized, reconnecting)
         });
       }
     };
 
     this.initSession = function () {
-      _converse.session = new Backbone.Model();
       const id = b64_sha1('converse.bosh-session');
-      _converse.session.id = id; // Appears to be necessary for backbone.browserStorage
-
+      _converse.session = new Backbone.Model({
+        'id': id,
+        'trusted': _converse.trusted && true || false,
+        'storage': _converse.trusted ? 'local' : 'session'
+      });
       _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
 
       _converse.session.fetch();
@@ -66378,7 +66402,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
     };
 
     this.clearSession = function () {
-      if (!_converse.trusted) {
+      if (!_converse.session.get('trusted')) {
         window.localStorage.clear();
         window.sessionStorage.clear();
       } else if (!_.isUndefined(this.session) && this.session.browserStorage) {
@@ -66517,11 +66541,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       }
     };
 
-    this.setUserJid = function () {
+    this.setUserJID = function () {
       _converse.jid = _converse.connection.jid;
       _converse.bare_jid = Strophe.getBareJidFromJid(_converse.connection.jid);
       _converse.resource = Strophe.getResourceFromJid(_converse.connection.jid);
       _converse.domain = Strophe.getDomainFromJid(_converse.connection.jid);
+
+      _converse.emit('setUserJID');
     };
 
     this.onConnected = function (reconnecting) {
@@ -66531,9 +66557,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       _converse.connection.flush(); // Solves problem of returned PubSub BOSH response not received by browser
 
 
-      _converse.setUserJid();
-
-      _converse.initSession();
+      _converse.setUserJID();
 
       _converse.enableCarbons();
 
@@ -66906,6 +66930,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
     function finishInitialization() {
       _converse.initPlugins();
 
+      _converse.initSession();
+
       _converse.initConnection();
 
       _converse.setUpXMLLogging();
@@ -67424,7 +67450,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
       }
 
-      _converse.api.listen.on('sessionInitialized', initStreamFeatures);
+      _converse.api.listen.on('setUserJID', initStreamFeatures);
 
       _converse.api.listen.on('reconnected', initializeDisco);
 
@@ -69751,13 +69777,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         },
 
         initToggle() {
+          const storage = _converse.session.get('storage'),
+                id = b64_sha1(`converse.minchatstoggle${_converse.bare_jid}`);
+
           this.toggleview = new _converse.MinimizedChatsToggleView({
-            model: new _converse.MinimizedChatsToggle()
+            'model': new _converse.MinimizedChatsToggle({
+              'id': id
+            })
           });
-          const id = b64_sha1(`converse.minchatstoggle${_converse.bare_jid}`);
-          this.toggleview.model.id = id; // Appears to be necessary for backbone.browserStorage
-
-          this.toggleview.model.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
+          this.toggleview.model.browserStorage = new Backbone.BrowserStorage[storage](id);
           this.toggleview.model.fetch();
         },
 
@@ -70111,7 +70139,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
             'model': new (_converse.RoomsPanelModel.extend({
               'id': b64_sha1(`converse.roomspanel${_converse.bare_jid}`),
               // Required by sessionStorage
-              'browserStorage': new Backbone.BrowserStorage[_converse.storage](b64_sha1(`converse.roomspanel${_converse.bare_jid}`))
+              'browserStorage': new Backbone.BrowserStorage[_converse.session.get('storage')](b64_sha1(`converse.roomspanel${_converse.bare_jid}`))
             }))()
           });
           this.roomspanel.model.fetch();
@@ -76403,8 +76431,6 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
         },
 
         initialize() {
-          this.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(`converse.open-rooms-{_converse.bare_jid}`));
-
           _converse.chatboxes.on('add', this.onChatBoxAdded, this);
 
           _converse.chatboxes.on('change:hidden', this.onChatBoxChanged, this);
@@ -76530,10 +76556,14 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
           Backbone.OrderedListView.prototype.initialize.apply(this, arguments);
           this.model.on('add', this.showOrHide, this);
           this.model.on('remove', this.showOrHide, this);
-          const cachekey = `converse.roomslist${_converse.bare_jid}`;
-          this.list_model = new _converse.RoomsList();
-          this.list_model.id = cachekey;
-          this.list_model.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(cachekey));
+
+          const storage = _converse.session.get('storage'),
+                id = b64_sha1(`converse.roomslist${_converse.bare_jid}`);
+
+          this.list_model = new _converse.RoomsList({
+            'id': id
+          });
+          this.list_model.browserStorage = new Backbone.BrowserStorage[storage](id);
           this.list_model.fetch();
           this.render();
           this.sortAndPositionAllItems();
@@ -76638,8 +76668,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
       });
 
       const initRoomsListView = function initRoomsListView() {
+        const storage = _converse.session.get('storage'),
+              id = b64_sha1(`converse.open-rooms-{_converse.bare_jid}`),
+              model = new _converse.OpenRooms();
+
+        model.browserStorage = new Backbone.BrowserStorage[storage](id);
         _converse.rooms_list_view = new _converse.RoomsListView({
-          'model': new _converse.OpenRooms()
+          'model': model
         });
       };
 
@@ -76736,19 +76771,21 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
       _converse.initRoster = function () {
         /* Initialize the Bakcbone collections that represent the contats
-        * roster and the roster groups.
-        */
+         * roster and the roster groups.
+         */
+        const storage = _converse.session.get('storage');
+
         _converse.roster = new _converse.RosterContacts();
-        _converse.roster.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(`converse.contacts-${_converse.bare_jid}`));
+        _converse.roster.browserStorage = new Backbone.BrowserStorage[storage](b64_sha1(`converse.contacts-${_converse.bare_jid}`));
         _converse.roster.data = new Backbone.Model();
         const id = b64_sha1(`converse-roster-model-${_converse.bare_jid}`);
         _converse.roster.data.id = id;
-        _converse.roster.data.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
+        _converse.roster.data.browserStorage = new Backbone.BrowserStorage[storage](id);
 
         _converse.roster.data.fetch();
 
         _converse.rostergroups = new _converse.RosterGroups();
-        _converse.rostergroups.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(`converse.roster.groups${_converse.bare_jid}`));
+        _converse.rostergroups.browserStorage = new Backbone.BrowserStorage[storage](b64_sha1(`converse.roster.groups${_converse.bare_jid}`));
 
         _converse.emit('rosterInitialized');
       };
@@ -79086,12 +79123,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
 
       _converse.initVCardCollection = function () {
         _converse.vcards = new _converse.VCards();
-        _converse.vcards.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(`converse.vcards`));
+        const id = b64_sha1(`converse.vcards`);
+        _converse.vcards.browserStorage = new Backbone.BrowserStorage[_converse.session.get('storage')](id);
 
         _converse.vcards.fetch();
       };
 
-      _converse.api.listen.on('sessionInitialized', _converse.initVCardCollection);
+      _converse.api.listen.on('setUserJID', _converse.initVCardCollection);
 
       _converse.on('addClientFeatures', () => {
         _converse.api.disco.own.features.add(Strophe.NS.VCARD);
@@ -81118,7 +81156,7 @@ __e(o.__('password')) +
 '">\n                </div>\n                ';
  } ;
 __p += '\n                <div class="form-group form-check">\n                    <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" ';
- if (o._converse.trusted) { ;
+ if (o._converse.session.get('trusted')) { ;
 __p += ' checked="checked" ';
  } ;
 __p += '>\n                    <label for="converse-login-trusted" class="form-check-label">' +

+ 7 - 7
spec/login.js

@@ -29,15 +29,15 @@
                 spyOn(cbview.loginpanel, 'connect');
                 cbview.delegateEvents();
 
-                expect(_converse.storage).toBe('session');
+                expect(_converse.session.get('storage')).toBe('local');
                 cbview.el.querySelector('input[type="submit"]').click();
-                expect(_converse.storage).toBe('local');
+                expect(_converse.session.get('storage')).toBe('local');
                 expect(cbview.loginpanel.connect).toHaveBeenCalled();
 
 
                 checkbox.click();
                 cbview.el.querySelector('input[type="submit"]').click();
-                expect(_converse.storage).toBe('session');
+                expect(_converse.session.get('storage')).toBe('session');
                 done();
             });
         }));
@@ -51,7 +51,7 @@
                 function (done, _converse) {
 
             test_utils.waitUntil(() => _converse.chatboxviews.get('controlbox'))
-            .then(function () {
+            .then(() => {
                 var cbview = _converse.chatboxviews.get('controlbox');
                 test_utils.openControlBox();
                 const checkboxes = cbview.el.querySelectorAll('input[type="checkbox"]');
@@ -67,14 +67,14 @@
 
                 spyOn(cbview.loginpanel, 'connect');
 
-                expect(_converse.storage).toBe('session');
+                expect(_converse.session.get('storage')).toBe('session');
                 cbview.el.querySelector('input[type="submit"]').click();
-                expect(_converse.storage).toBe('session');
+                expect(_converse.session.get('storage')).toBe('session');
                 expect(cbview.loginpanel.connect).toHaveBeenCalled();
 
                 checkbox.click();
                 cbview.el.querySelector('input[type="submit"]').click();
-                expect(_converse.storage).toBe('local');
+                expect(_converse.session.get('storage')).toBe('local');
                 done();
             });
         }));

+ 7 - 8
src/converse-bookmarks.js

@@ -250,9 +250,10 @@
                     this.on('remove', this.markRoomAsUnbookmarked, this);
                     this.on('remove', this.sendBookmarkStanza, this);
 
-                    const cache_key = `converse.room-bookmarks${_converse.bare_jid}`;
+                    const storage = _converse.session.get('storage'),
+                          cache_key = `converse.room-bookmarks${_converse.bare_jid}`;
                     this.fetched_flag = b64_sha1(cache_key+'fetched');
-                    this.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(cache_key));
+                    this.browserStorage = new Backbone.BrowserStorage[storage](b64_sha1(cache_key));
                 },
 
                 openBookmarkedRoom (bookmark) {
@@ -443,12 +444,10 @@
                     _converse.chatboxes.on('add', this.renderBookmarkListElement, this);
                     _converse.chatboxes.on('remove', this.renderBookmarkListElement, this);
 
-                    const cachekey = `converse.room-bookmarks${_converse.bare_jid}-list-model`;
-                    this.list_model = new _converse.BookmarksList();
-                    this.list_model.id = cachekey;
-                    this.list_model.browserStorage = new Backbone.BrowserStorage[_converse.storage](
-                        b64_sha1(cachekey)
-                    );
+                    const storage = _converse.session.get('storage'),
+                          id = b64_sha1(`converse.room-bookmarks${_converse.bare_jid}-list-model`);
+                    this.list_model = new _converse.BookmarksList({'id': id});
+                    this.list_model.browserStorage = new Backbone.BrowserStorage[storage](id);
                     this.list_model.fetch();
                     this.render();
                     this.sortAndPositionAllItems();

+ 3 - 2
src/converse-chatboxes.js

@@ -258,8 +258,9 @@
                         this.addRelatedContact(_converse.roster.findWhere({'jid': this.get('jid')}));
                     });
                     this.messages = new _converse.Messages();
-                    this.messages.browserStorage = new Backbone.BrowserStorage[_converse.storage](
-                        `converse.messages${this.get('jid')}${_converse.bare_jid}`);
+                    const storage = _converse.session.get('storage');
+                    this.messages.browserStorage = new Backbone.BrowserStorage[storage](
+                        b64_sha1(`converse.messages${this.get('jid')}${_converse.bare_jid}`));
                     this.messages.chatbox = this;
 
                     this.messages.on('change:upload', (message) => {

+ 4 - 4
src/converse-chatview.js

@@ -125,9 +125,6 @@
                     'scroll_position': 0
                 },
                 initialize () {
-                    const id = `converse.emoji-${_converse.bare_jid}`;
-                    this.id = id;
-                    this.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
                 }
             });
 
@@ -1059,7 +1056,10 @@
 
                 createEmojiPicker () {
                     if (_.isUndefined(_converse.emojipicker)) {
-                        _converse.emojipicker = new _converse.EmojiPicker();
+                        const storage = _converse.session.get('storage'),
+                              id = `converse.emoji-${_converse.bare_jid}`;
+                        _converse.emojipicker = new _converse.EmojiPicker({'id': id});
+                        _converse.emojipicker.browserStorage = new Backbone.BrowserStorage[storage](id);
                         _converse.emojipicker.fetch();
                     }
                     this.emoji_picker_view = new _converse.EmojiPickerView({

+ 5 - 3
src/converse-controlbox.js

@@ -466,8 +466,10 @@
                     if (!this.validate()) { return; }
 
                     const form_data = new FormData(ev.target);
-                    _converse.trusted = form_data.get('trusted');
-                    _converse.storage = form_data.get('trusted') ? 'local' : 'session';
+                    _converse.session.save({
+                        'trusted': form_data.get('trusted') && true || false,
+                        'storage': form_data.get('trusted') ? 'local' : 'session'
+                    });
 
                     let jid = form_data.get('jid');
                     if (_converse.locked_domain) {
@@ -583,7 +585,7 @@
             });
 
             _converse.on('clearSession', () => {
-                if (_converse.trusted) {
+                if (_converse.session.get('trusted')) {
                     const chatboxes = _.get(_converse, 'chatboxes', null);
                     if (!_.isNil(chatboxes)) {
                         const controlbox = chatboxes.get('controlbox');

+ 15 - 13
src/converse-core.js

@@ -222,7 +222,6 @@
         rid: undefined,
         root: window.document,
         sid: undefined,
-        storage: 'session',
         strict_plugin_dependencies: false,
         trusted: true,
         view_mode: 'overlayed', // Choices are 'overlayed', 'fullscreen', 'mobile'
@@ -650,28 +649,30 @@
             if (reconnecting) {
                 _converse.onStatusInitialized(reconnecting);
             } else {
-                this.xmppstatus = new this.XMPPStatus();
-                const id = b64_sha1(`converse.xmppstatus-${_converse.bare_jid}`);
-                this.xmppstatus.id = id; // Appears to be necessary for backbone.browserStorage
-                this.xmppstatus.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
+                const id = `converse.xmppstatus-${_converse.bare_jid}`;
+                this.xmppstatus = new this.XMPPStatus({'id': id});
+                this.xmppstatus.browserStorage = new Backbone.BrowserStorage.session(id);
                 this.xmppstatus.fetch({
-                    success: _.partial(_converse.onStatusInitialized, reconnecting),
-                    error: _.partial(_converse.onStatusInitialized, reconnecting)
+                    'success': _.partial(_converse.onStatusInitialized, reconnecting),
+                    'error': _.partial(_converse.onStatusInitialized, reconnecting)
                 });
             }
         }
 
         this.initSession = function () {
-            _converse.session = new Backbone.Model();
             const id = b64_sha1('converse.bosh-session');
-            _converse.session.id = id; // Appears to be necessary for backbone.browserStorage
+            _converse.session = new Backbone.Model({
+                'id': id,
+                'trusted': _converse.trusted && true || false,
+                'storage': _converse.trusted ? 'local' : 'session'
+            });
             _converse.session.browserStorage = new Backbone.BrowserStorage.session(id);
             _converse.session.fetch();
             _converse.emit('sessionInitialized');
         };
 
         this.clearSession = function () {
-            if (!_converse.trusted) {
+            if (!_converse.session.get('trusted')) {
                 window.localStorage.clear();
                 window.sessionStorage.clear();
             } else if (!_.isUndefined(this.session) && this.session.browserStorage) {
@@ -791,11 +792,12 @@
             }
         };
 
-        this.setUserJid = function () {
+        this.setUserJID = function () {
             _converse.jid = _converse.connection.jid;
             _converse.bare_jid = Strophe.getBareJidFromJid(_converse.connection.jid);
             _converse.resource = Strophe.getResourceFromJid(_converse.connection.jid);
             _converse.domain = Strophe.getDomainFromJid(_converse.connection.jid);
+            _converse.emit('setUserJID');
         };
 
         this.onConnected = function (reconnecting) {
@@ -803,8 +805,7 @@
              * by logging in or by attaching to an existing BOSH session.
              */
             _converse.connection.flush(); // Solves problem of returned PubSub BOSH response not received by browser
-            _converse.setUserJid();
-            _converse.initSession();
+            _converse.setUserJID();
             _converse.enableCarbons();
             _converse.initStatus(reconnecting)
         };
@@ -1169,6 +1170,7 @@
 
         function finishInitialization () {
             _converse.initPlugins();
+            _converse.initSession();
             _converse.initConnection();
             _converse.setUpXMLLogging();
             _converse.logIn();

+ 1 - 1
src/converse-disco.js

@@ -267,7 +267,7 @@
                 }).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
             }
 
-            _converse.api.listen.on('sessionInitialized', initStreamFeatures);
+            _converse.api.listen.on('setUserJID', initStreamFeatures);
             _converse.api.listen.on('reconnected', initializeDisco);
             _converse.api.listen.on('connected', initializeDisco);
 

+ 4 - 4
src/converse-minimize.js

@@ -423,12 +423,12 @@
                 },
 
                 initToggle () {
+                    const storage = _converse.session.get('storage'),
+                          id = b64_sha1(`converse.minchatstoggle${_converse.bare_jid}`);
                     this.toggleview = new _converse.MinimizedChatsToggleView({
-                        model: new _converse.MinimizedChatsToggle()
+                        'model': new _converse.MinimizedChatsToggle({'id': id})
                     });
-                    const id = b64_sha1(`converse.minchatstoggle${_converse.bare_jid}`);
-                    this.toggleview.model.id = id; // Appears to be necessary for backbone.browserStorage
-                    this.toggleview.model.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
+                    this.toggleview.model.browserStorage = new Backbone.BrowserStorage[storage](id);
                     this.toggleview.model.fetch();
                 },
 

+ 1 - 1
src/converse-muc-views.js

@@ -102,7 +102,7 @@
                     this.roomspanel = new _converse.RoomsPanel({
                         'model': new (_converse.RoomsPanelModel.extend({
                             'id': b64_sha1(`converse.roomspanel${_converse.bare_jid}`), // Required by sessionStorage
-                            'browserStorage': new Backbone.BrowserStorage[_converse.storage](
+                            'browserStorage': new Backbone.BrowserStorage[_converse.session.get('storage')](
                                 b64_sha1(`converse.roomspanel${_converse.bare_jid}`))
                         }))()
                     });

+ 11 - 11
src/converse-roomslist.js

@@ -55,8 +55,6 @@
                 },
 
                 initialize () {
-                    this.browserStorage = new Backbone.BrowserStorage[_converse.storage](
-                        b64_sha1(`converse.open-rooms-{_converse.bare_jid}`));
                     _converse.chatboxes.on('add', this.onChatBoxAdded, this);
                     _converse.chatboxes.on('change:hidden', this.onChatBoxChanged, this);
                     _converse.chatboxes.on('change:bookmarked', this.onChatBoxChanged, this);
@@ -170,12 +168,11 @@
                     this.model.on('add', this.showOrHide, this);
                     this.model.on('remove', this.showOrHide, this);
 
-                    const cachekey = `converse.roomslist${_converse.bare_jid}`;
-                    this.list_model = new _converse.RoomsList();
-                    this.list_model.id = cachekey;
-                    this.list_model.browserStorage = new Backbone.BrowserStorage[_converse.storage](
-                        b64_sha1(cachekey)
-                    );
+                    const storage = _converse.session.get('storage'),
+                          id = b64_sha1(`converse.roomslist${_converse.bare_jid}`);
+
+                    this.list_model = new _converse.RoomsList({'id': id});
+                    this.list_model.browserStorage = new Backbone.BrowserStorage[storage](id);
                     this.list_model.fetch();
                     this.render();
                     this.sortAndPositionAllItems();
@@ -265,9 +262,12 @@
             });
 
             const initRoomsListView = function () {
-                _converse.rooms_list_view = new _converse.RoomsListView(
-                    {'model': new _converse.OpenRooms()  }
-                );
+                const storage = _converse.session.get('storage'),
+                      id = b64_sha1(`converse.open-rooms-{_converse.bare_jid}`),
+                      model = new _converse.OpenRooms();
+
+                model.browserStorage = new Backbone.BrowserStorage[storage](id);
+                _converse.rooms_list_view = new _converse.RoomsListView({'model': model});
             };
 
             if (_converse.allow_bookmarks) {

+ 6 - 5
src/converse-roster.js

@@ -49,20 +49,21 @@
 
             _converse.initRoster = function () {
                 /* Initialize the Bakcbone collections that represent the contats
-                * roster and the roster groups.
-                */
+                 * roster and the roster groups.
+                 */
+                const storage = _converse.session.get('storage');
                 _converse.roster = new _converse.RosterContacts();
-                _converse.roster.browserStorage = new Backbone.BrowserStorage[_converse.storage](
+                _converse.roster.browserStorage = new Backbone.BrowserStorage[storage](
                     b64_sha1(`converse.contacts-${_converse.bare_jid}`));
 
                 _converse.roster.data = new Backbone.Model();
                 const id = b64_sha1(`converse-roster-model-${_converse.bare_jid}`);
                 _converse.roster.data.id = id;
-                _converse.roster.data.browserStorage = new Backbone.BrowserStorage[_converse.storage](id);
+                _converse.roster.data.browserStorage = new Backbone.BrowserStorage[storage](id);
                 _converse.roster.data.fetch();
 
                 _converse.rostergroups = new _converse.RosterGroups();
-                _converse.rostergroups.browserStorage = new Backbone.BrowserStorage[_converse.storage](
+                _converse.rostergroups.browserStorage = new Backbone.BrowserStorage[storage](
                     b64_sha1(`converse.roster.groups${_converse.bare_jid}`));
                 _converse.emit('rosterInitialized');
             };

+ 3 - 2
src/converse-vcard.js

@@ -131,10 +131,11 @@
             /* Event handlers */
             _converse.initVCardCollection = function () {
                 _converse.vcards = new _converse.VCards();
-                _converse.vcards.browserStorage = new Backbone.BrowserStorage[_converse.storage](b64_sha1(`converse.vcards`));
+                const id = b64_sha1(`converse.vcards`);
+                _converse.vcards.browserStorage = new Backbone.BrowserStorage[_converse.session.get('storage')](id);
                 _converse.vcards.fetch();
             }
-            _converse.api.listen.on('sessionInitialized', _converse.initVCardCollection);
+            _converse.api.listen.on('setUserJID', _converse.initVCardCollection);
 
 
             _converse.on('addClientFeatures', () => {

+ 1 - 1
src/templates/login_panel.html

@@ -19,7 +19,7 @@
                 </div>
                 {[ } ]}
                 <div class="form-group form-check">
-                    <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" {[ if (o._converse.trusted) { ]} checked="checked" {[ } ]}>
+                    <input id="converse-login-trusted" type="checkbox" class="form-check-input" name="trusted" {[ if (o._converse.session.get('trusted')) { ]} checked="checked" {[ } ]}>
                     <label for="converse-login-trusted" class="form-check-label">{{{o.__('This is a trusted device')}}}</label>
                     <i class="fa fa-info-circle" data-toggle="popover"
                        data-title="Trusted device?"

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels