Merge branch 'master' into converse-omemo

This commit is contained in:
JC Brand 2018-08-22 23:41:36 +02:00
commit 62cecbec5f
15 changed files with 1479 additions and 517 deletions

File diff suppressed because it is too large Load Diff

262
dist/converse.js vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -267,7 +267,7 @@
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); }).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('reconnected', initializeDisco);
_converse.api.listen.on('connected', initializeDisco); _converse.api.listen.on('connected', initializeDisco);

View File

@ -423,12 +423,12 @@
}, },
initToggle () { initToggle () {
const storage = _converse.session.get('storage'),
id = b64_sha1(`converse.minchatstoggle${_converse.bare_jid}`);
this.toggleview = new _converse.MinimizedChatsToggleView({ 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.browserStorage = new Backbone.BrowserStorage[storage](id);
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.fetch(); this.toggleview.model.fetch();
}, },

View File

@ -102,7 +102,7 @@
this.roomspanel = new _converse.RoomsPanel({ this.roomspanel = new _converse.RoomsPanel({
'model': new (_converse.RoomsPanelModel.extend({ 'model': new (_converse.RoomsPanelModel.extend({
'id': b64_sha1(`converse.roomspanel${_converse.bare_jid}`), // Required by sessionStorage '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}`)) b64_sha1(`converse.roomspanel${_converse.bare_jid}`))
}))() }))()
}); });

View File

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

View File

@ -49,20 +49,21 @@
_converse.initRoster = function () { _converse.initRoster = function () {
/* Initialize the Bakcbone collections that represent the contats /* 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 = 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}`)); b64_sha1(`converse.contacts-${_converse.bare_jid}`));
_converse.roster.data = new Backbone.Model(); _converse.roster.data = new Backbone.Model();
const id = b64_sha1(`converse-roster-model-${_converse.bare_jid}`); const id = b64_sha1(`converse-roster-model-${_converse.bare_jid}`);
_converse.roster.data.id = id; _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.roster.data.fetch();
_converse.rostergroups = new _converse.RosterGroups(); _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}`)); b64_sha1(`converse.roster.groups${_converse.bare_jid}`));
_converse.emit('rosterInitialized'); _converse.emit('rosterInitialized');
}; };

View File

@ -131,10 +131,11 @@
/* Event handlers */ /* Event handlers */
_converse.initVCardCollection = function () { _converse.initVCardCollection = function () {
_converse.vcards = new _converse.VCards(); _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.vcards.fetch();
} }
_converse.api.listen.on('sessionInitialized', _converse.initVCardCollection); _converse.api.listen.on('setUserJID', _converse.initVCardCollection);
_converse.on('addClientFeatures', () => { _converse.on('addClientFeatures', () => {

View File

@ -19,7 +19,7 @@
</div> </div>
{[ } ]} {[ } ]}
<div class="form-group form-check"> <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> <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" <i class="fa fa-info-circle" data-toggle="popover"
data-title="Trusted device?" data-title="Trusted device?"