Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
08ab2e54
Commit
08ab2e54
authored
Mar 27, 2018
by
JC Brand
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Regenerated dist files
parent
d90416ea
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
322 additions
and
159 deletions
+322
-159
dist/converse-muc-embedded.js
dist/converse-muc-embedded.js
+71
-51
dist/converse-no-dependencies.js
dist/converse-no-dependencies.js
+194
-74
dist/converse.js
dist/converse.js
+57
-34
No files found.
dist/converse-muc-embedded.js
View file @
08ab2e54
...
...
@@ -39941,6 +39941,7 @@ return Backbone.BrowserStorage;
locales: ['af', 'ar', 'bg', 'ca', 'de', 'es', 'en', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'nb', 'nl', 'pl', 'pt_BR', 'ru', 'tr', 'uk', 'zh_CN', 'zh_TW'],
message_carbons: true,
message_storage: 'session',
nickname: undefined,
password: undefined,
prebind_url: null,
priority: 0,
...
...
@@ -40411,9 +40412,9 @@ return Backbone.BrowserStorage;
}
var carbons_iq = new Strophe.Builder('iq', {
from
: this.connection.jid,
id
: 'enablecarbons',
type
: 'set'
'from'
: this.connection.jid,
'id'
: 'enablecarbons',
'type'
: 'set'
}).c('enable', {
xmlns: Strophe.NS.CARBONS
});
...
...
@@ -40576,8 +40577,6 @@ return Backbone.BrowserStorage;
'status': ''
},
initialize: function initialize(attributes) {
var _this3 = this;
var jid = attributes.jid,
bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(),
resource = Strophe.getResourceFromJid(jid);
...
...
@@ -40590,9 +40589,6 @@ return Backbone.BrowserStorage;
'resources': {},
'user_id': Strophe.getNodeFromJid(jid)
}, attributes));
this.on('destroy', function () {
_this3.removeFromRoster();
});
this.on('change:chat_status', function (item) {
_converse.emit('contactStatusChanged', item.attributes);
});
...
...
@@ -40604,8 +40600,6 @@ return Backbone.BrowserStorage;
* (String) message - An optional message to explain the
* reason for the subscription request.
*/
this.save('ask', "subscribe"); // ask === 'subscribe' Means we have ask to subscribe to them.
var pres = $pres({
to: this.get('jid'),
type: "subscribe"
...
...
@@ -40615,9 +40609,9 @@ return Backbone.BrowserStorage;
pres.c("status").t(message).up();
}
var nick = _converse.xmppstatus.get('fullname');
var nick = _converse.xmppstatus.get('
nickname') || _converse.xmppstatus.get('
fullname');
if (nick
&& nick !== ""
) {
if (nick) {
pres.c('nick', {
'xmlns': Strophe.NS.NICK
}).t(nick).up();
...
...
@@ -40625,6 +40619,8 @@ return Backbone.BrowserStorage;
_converse.connection.send(pres);
this.save('ask', "subscribe"); // ask === 'subscribe' Means we have asked to subscribe to them.
return this;
},
ackSubscribe: function ackSubscribe() {
...
...
@@ -40652,7 +40648,8 @@ return Backbone.BrowserStorage;
'to': this.get('jid')
}));
this.destroy(); // Will cause removeFromRoster to be called.
this.removeFromRoster();
this.destroy();
},
unauthorize: function unauthorize(message) {
/* Unauthorize this contact's presence subscription
...
...
@@ -40669,8 +40666,8 @@ return Backbone.BrowserStorage;
* (String) message - Optional message to send to the person being authorized
*/
var pres = $pres({
to
: this.get('jid'),
type
: "subscribed"
'to'
: this.get('jid'),
'type'
: "subscribed"
});
if (message && message !== "") {
...
...
@@ -40816,7 +40813,7 @@ return Backbone.BrowserStorage;
}, Strophe.NS.ROSTERX, 'message', null);
},
fetchRosterContacts: function fetchRosterContacts() {
var _this
4
= this;
var _this
3
= this;
/* Fetches the roster contacts, first by trying the
* sessionStorage cache, and if that's empty, then by querying
...
...
@@ -40826,7 +40823,7 @@ return Backbone.BrowserStorage;
* fetched.
*/
return new Promise(function (resolve, reject) {
_this
4
.fetch({
_this
3
.fetch({
'add': true,
'silent': true,
success: function success(collection) {
...
...
@@ -40846,7 +40843,7 @@ return Backbone.BrowserStorage;
subscribeToSuggestedItems: function subscribeToSuggestedItems(msg) {
_.each(msg.querySelectorAll('item'), function (item) {
if (item.getAttribute('action') === 'add') {
_converse.roster.addAndSubscribe(item.getAttribute('jid'),
null,
_converse.xmppstatus.get('fullname'));
_converse.roster.addAndSubscribe(item.getAttribute('jid'),
_converse.xmppstatus.get('nickname') ||
_converse.xmppstatus.get('fullname'));
}
});
...
...
@@ -40872,7 +40869,7 @@ return Backbone.BrowserStorage;
}
};
this.addContact(jid, name, groups, attributes).then(handler, handler);
this.addContact
ToRoster
(jid, name, groups, attributes).then(handler, handler);
},
sendContactAddIQ: function sendContactAddIQ(jid, name, groups, callback, errback) {
/* Send an IQ stanza to the XMPP server to add a new roster contact.
...
...
@@ -40900,8 +40897,8 @@ return Backbone.BrowserStorage;
_converse.connection.sendIQ(iq, callback, errback);
},
addContact
: function addContact
(jid, name, groups, attributes) {
var _this
5
= this;
addContact
ToRoster: function addContactToRoster
(jid, name, groups, attributes) {
var _this
4
= this;
/* Adds a RosterContact instance to _converse.roster and
* registers the contact on the XMPP server.
...
...
@@ -40918,8 +40915,8 @@ return Backbone.BrowserStorage;
groups = groups || [];
name = _.isEmpty(name) ? jid : name;
_this
5
.sendContactAddIQ(jid, name, groups, function () {
var contact = _this
5
.create(_.assignIn({
_this
4
.sendContactAddIQ(jid, name, groups, function () {
var contact = _this
4
.create(_.assignIn({
ask: undefined,
fullname: name,
groups: groups,
...
...
@@ -40940,7 +40937,7 @@ return Backbone.BrowserStorage;
});
});
},
subscribeBack: function subscribeBack(bare_jid) {
subscribeBack: function subscribeBack(bare_jid
, presence
) {
var contact = this.get(bare_jid);
if (contact instanceof _converse.RosterContact) {
...
...
@@ -40953,7 +40950,9 @@ return Backbone.BrowserStorage;
}
};
this.addContact(bare_jid, '', [], {
var nickname = _.get(sizzle("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"), presence).pop(), 'textContent', null);
this.addContactToRoster(bare_jid, nickname, [], {
'subscription': 'from'
}).then(handler, handler);
}
...
...
@@ -41012,7 +41011,7 @@ return Backbone.BrowserStorage;
return true;
},
fetchFromServer: function fetchFromServer() {
var _this
6
= this;
var _this
5
= this;
/* Fetch the roster from the XMPP server */
return new Promise(function (resolve, reject) {
...
...
@@ -41023,7 +41022,7 @@ return Backbone.BrowserStorage;
xmlns: Strophe.NS.ROSTER
});
var callback = _.flow(_this
6.onReceivedFromServer.bind(_this6
), resolve);
var callback = _.flow(_this
5.onReceivedFromServer.bind(_this5
), resolve);
var errback = function errback(iq) {
var errmsg = "Error while trying to fetch roster from the server";
...
...
@@ -41067,17 +41066,17 @@ return Backbone.BrowserStorage;
}
this.create({
ask
: ask,
fullname
: item.getAttribute("name") || jid,
groups
: groups,
jid
: jid,
subscription
: subscription
'ask'
: ask,
'fullname'
: item.getAttribute("name") || jid,
'groups'
: groups,
'jid'
: jid,
'subscription'
: subscription
}, {
sort: false
});
} else {
if (subscription === "remove") {
return contact.destroy();
// will trigger removeFromRoster
return contact.destroy();
} // We only find out about requesting contacts via the
// presence handler, so if we receive a contact
// here, we know they aren't requesting anymore.
...
...
@@ -41085,10 +41084,10 @@ return Backbone.BrowserStorage;
contact.save({
subscription
: subscription,
ask
: ask,
requesting
: null,
groups
: groups
'subscription'
: subscription,
'ask'
: ask,
'requesting'
: null,
'groups'
: groups
});
}
},
...
...
@@ -41098,13 +41097,14 @@ return Backbone.BrowserStorage;
* Note: this method gets completely overridden by converse-vcard.js
*/
var bare_jid = Strophe.getBareJidFromJid(presence.getAttribute('from')),
nick_el = presence.querySelector("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"));
nickname = _.get(sizzle("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"), presence).pop(), 'textContent', null);
var user_data = {
jid
: bare_jid,
subscription
: 'none',
ask
: null,
requesting
: true,
fullname: nick_el && nick_el.textContent || bare_jid
'jid'
: bare_jid,
'subscription'
: 'none',
'ask'
: null,
'requesting'
: true,
'fullname': nickname
};
this.create(user_data);
...
...
@@ -41121,7 +41121,7 @@ return Backbone.BrowserStorage;
if (_converse.auto_subscribe) {
if (!contact || contact.get('subscription') !== 'to') {
this.subscribeBack(bare_jid);
this.subscribeBack(bare_jid
, presence
);
} else {
contact.authorize();
}
...
...
@@ -41167,6 +41167,24 @@ return Backbone.BrowserStorage;
}
}
if (_converse.jid === jid && presence_type === 'unavailable') {
// XXX: We've received an "unavailable" presence from our
// own resource. Apparently this happens due to a
// Prosody bug, whereby we send an IQ stanza to remove
// a roster contact, and Prosody then sends
// "unavailable" globally, instead of directed to the
// particular user that's removed.
//
// Here is the bug report: https://prosody.im/issues/1121
//
// I'm not sure whether this might legitimately happen
// in other cases.
//
// As a workaround for now we simply send our presence again,
// otherwise we're treated as offline.
_converse.xmppstatus.sendPresence();
}
return;
} else if (sizzle("query[xmlns=\"".concat(Strophe.NS.MUC, "\"]"), presence).length) {
return; // Ignore MUC
...
...
@@ -41207,7 +41225,7 @@ return Backbone.BrowserStorage;
this.RosterGroups = Backbone.Collection.extend({
model: _converse.RosterGroup,
fetchRosterGroups: function fetchRosterGroups() {
var _this
7
= this;
var _this
6
= this;
/* Fetches all the roster groups from sessionStorage.
*
...
...
@@ -41215,7 +41233,7 @@ return Backbone.BrowserStorage;
* returned.
*/
return new Promise(function (resolve, reject) {
_this
7
.fetch({
_this
6
.fetch({
silent: true,
// We need to first have all groups before
// we can start positioning them, so we set
...
...
@@ -41242,23 +41260,24 @@ return Backbone.BrowserStorage;
return {
"status": _converse.default_state,
"jid": _converse.bare_jid,
"nickname": _converse.nickname,
"vcard_updated": null
};
},
initialize: function initialize() {
var _this
8
= this;
var _this
7
= this;
this.on('change:status', function (item) {
var status = _this
8
.get('status');
var status = _this
7
.get('status');
_this
8
.sendPresence(status);
_this
7
.sendPresence(status);
_converse.emit('statusChanged', status);
});
this.on('change:status_message', function () {
var status_message = _this
8
.get('status_message');
var status_message = _this
7
.get('status_message');
_this
8.sendPresence(_this8
.get('status'), status_message);
_this
7.sendPresence(_this7
.get('status'), status_message);
_converse.emit('statusMessageChanged', status_message);
});
...
...
@@ -51011,6 +51030,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
'affiliation': null,
'connection_status': converse.ROOMSTATUS.DISCONNECTED,
'name': '',
'nick': _converse.xmppstatus.get('nickname'),
'description': '',
'features_fetched': false,
'roomconfig': {},
dist/converse-no-dependencies.js
View file @
08ab2e54
...
...
@@ -7217,6 +7217,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
locales: ['af', 'bg', 'ca', 'de', 'es', 'en', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'nb', 'nl', 'pl', 'pt_BR', 'ru', 'tr', 'uk', 'zh_CN', 'zh_TW'],
message_carbons: true,
message_storage: 'session',
nickname: undefined,
password: undefined,
prebind_url: null,
priority: 0,
...
...
@@ -7687,9 +7688,9 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
}
var carbons_iq = new Strophe.Builder('iq', {
from
: this.connection.jid,
id
: 'enablecarbons',
type
: 'set'
'from'
: this.connection.jid,
'id'
: 'enablecarbons',
'type'
: 'set'
}).c('enable', {
xmlns: Strophe.NS.CARBONS
});
...
...
@@ -7852,8 +7853,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
'status': ''
},
initialize: function initialize(attributes) {
var _this3 = this;
var jid = attributes.jid,
bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(),
resource = Strophe.getResourceFromJid(jid);
...
...
@@ -7866,9 +7865,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
'resources': {},
'user_id': Strophe.getNodeFromJid(jid)
}, attributes));
this.on('destroy', function () {
_this3.removeFromRoster();
});
this.on('change:chat_status', function (item) {
_converse.emit('contactStatusChanged', item.attributes);
});
...
...
@@ -7880,8 +7876,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
* (String) message - An optional message to explain the
* reason for the subscription request.
*/
this.save('ask', "subscribe"); // ask === 'subscribe' Means we have ask to subscribe to them.
var pres = $pres({
to: this.get('jid'),
type: "subscribe"
...
...
@@ -7891,9 +7885,9 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
pres.c("status").t(message).up();
}
var nick = _converse.xmppstatus.get('fullname');
var nick = _converse.xmppstatus.get('
nickname') || _converse.xmppstatus.get('
fullname');
if (nick
&& nick !== ""
) {
if (nick) {
pres.c('nick', {
'xmlns': Strophe.NS.NICK
}).t(nick).up();
...
...
@@ -7901,6 +7895,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
_converse.connection.send(pres);
this.save('ask', "subscribe"); // ask === 'subscribe' Means we have asked to subscribe to them.
return this;
},
ackSubscribe: function ackSubscribe() {
...
...
@@ -7928,7 +7924,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
'to': this.get('jid')
}));
this.destroy(); // Will cause removeFromRoster to be called.
this.removeFromRoster();
this.destroy();
},
unauthorize: function unauthorize(message) {
/* Unauthorize this contact's presence subscription
...
...
@@ -7945,8 +7942,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
* (String) message - Optional message to send to the person being authorized
*/
var pres = $pres({
to
: this.get('jid'),
type
: "subscribed"
'to'
: this.get('jid'),
'type'
: "subscribed"
});
if (message && message !== "") {
...
...
@@ -8092,7 +8089,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
}, Strophe.NS.ROSTERX, 'message', null);
},
fetchRosterContacts: function fetchRosterContacts() {
var _this
4
= this;
var _this
3
= this;
/* Fetches the roster contacts, first by trying the
* sessionStorage cache, and if that's empty, then by querying
...
...
@@ -8102,7 +8099,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
* fetched.
*/
return new Promise(function (resolve, reject) {
_this
4
.fetch({
_this
3
.fetch({
'add': true,
'silent': true,
success: function success(collection) {
...
...
@@ -8122,7 +8119,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
subscribeToSuggestedItems: function subscribeToSuggestedItems(msg) {
_.each(msg.querySelectorAll('item'), function (item) {
if (item.getAttribute('action') === 'add') {
_converse.roster.addAndSubscribe(item.getAttribute('jid'),
null,
_converse.xmppstatus.get('fullname'));
_converse.roster.addAndSubscribe(item.getAttribute('jid'),
_converse.xmppstatus.get('nickname') ||
_converse.xmppstatus.get('fullname'));
}
});
...
...
@@ -8148,7 +8145,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
}
};
this.addContact(jid, name, groups, attributes).then(handler, handler);
this.addContact
ToRoster
(jid, name, groups, attributes).then(handler, handler);
},
sendContactAddIQ: function sendContactAddIQ(jid, name, groups, callback, errback) {
/* Send an IQ stanza to the XMPP server to add a new roster contact.
...
...
@@ -8176,8 +8173,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
_converse.connection.sendIQ(iq, callback, errback);
},
addContact
: function addContact
(jid, name, groups, attributes) {
var _this
5
= this;
addContact
ToRoster: function addContactToRoster
(jid, name, groups, attributes) {
var _this
4
= this;
/* Adds a RosterContact instance to _converse.roster and
* registers the contact on the XMPP server.
...
...
@@ -8194,8 +8191,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
groups = groups || [];
name = _.isEmpty(name) ? jid : name;
_this
5
.sendContactAddIQ(jid, name, groups, function () {
var contact = _this
5
.create(_.assignIn({
_this
4
.sendContactAddIQ(jid, name, groups, function () {
var contact = _this
4
.create(_.assignIn({
ask: undefined,
fullname: name,
groups: groups,
...
...
@@ -8216,7 +8213,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
});
});
},
subscribeBack: function subscribeBack(bare_jid) {
subscribeBack: function subscribeBack(bare_jid
, presence
) {
var contact = this.get(bare_jid);
if (contact instanceof _converse.RosterContact) {
...
...
@@ -8229,7 +8226,9 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
}
};
this.addContact(bare_jid, '', [], {
var nickname = _.get(sizzle("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"), presence).pop(), 'textContent', null);
this.addContactToRoster(bare_jid, nickname, [], {
'subscription': 'from'
}).then(handler, handler);
}
...
...
@@ -8288,7 +8287,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
return true;
},
fetchFromServer: function fetchFromServer() {
var _this
6
= this;
var _this
5
= this;
/* Fetch the roster from the XMPP server */
return new Promise(function (resolve, reject) {
...
...
@@ -8299,7 +8298,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
xmlns: Strophe.NS.ROSTER
});
var callback = _.flow(_this
6.onReceivedFromServer.bind(_this6
), resolve);
var callback = _.flow(_this
5.onReceivedFromServer.bind(_this5
), resolve);
var errback = function errback(iq) {
var errmsg = "Error while trying to fetch roster from the server";
...
...
@@ -8343,17 +8342,17 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
}
this.create({
ask
: ask,
fullname
: item.getAttribute("name") || jid,
groups
: groups,
jid
: jid,
subscription
: subscription
'ask'
: ask,
'fullname'
: item.getAttribute("name") || jid,
'groups'
: groups,
'jid'
: jid,
'subscription'
: subscription
}, {
sort: false
});
} else {
if (subscription === "remove") {
return contact.destroy();
// will trigger removeFromRoster
return contact.destroy();
} // We only find out about requesting contacts via the
// presence handler, so if we receive a contact
// here, we know they aren't requesting anymore.
...
...
@@ -8361,10 +8360,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
contact.save({
subscription
: subscription,
ask
: ask,
requesting
: null,
groups
: groups
'subscription'
: subscription,
'ask'
: ask,
'requesting'
: null,
'groups'
: groups
});
}
},
...
...
@@ -8374,13 +8373,14 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
* Note: this method gets completely overridden by converse-vcard.js
*/
var bare_jid = Strophe.getBareJidFromJid(presence.getAttribute('from')),
nick_el = presence.querySelector("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"));
nickname = _.get(sizzle("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"), presence).pop(), 'textContent', null);
var user_data = {
jid
: bare_jid,
subscription
: 'none',
ask
: null,
requesting
: true,
fullname: nick_el && nick_el.textContent || bare_jid
'jid'
: bare_jid,
'subscription'
: 'none',
'ask'
: null,
'requesting'
: true,
'fullname': nickname
};
this.create(user_data);
...
...
@@ -8397,7 +8397,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
if (_converse.auto_subscribe) {
if (!contact || contact.get('subscription') !== 'to') {
this.subscribeBack(bare_jid);
this.subscribeBack(bare_jid
, presence
);
} else {
contact.authorize();
}
...
...
@@ -8443,6 +8443,24 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
}
}
if (_converse.jid === jid && presence_type === 'unavailable') {
// XXX: We've received an "unavailable" presence from our
// own resource. Apparently this happens due to a
// Prosody bug, whereby we send an IQ stanza to remove
// a roster contact, and Prosody then sends
// "unavailable" globally, instead of directed to the
// particular user that's removed.
//
// Here is the bug report: https://prosody.im/issues/1121
//
// I'm not sure whether this might legitimately happen
// in other cases.
//
// As a workaround for now we simply send our presence again,
// otherwise we're treated as offline.
_converse.xmppstatus.sendPresence();
}
return;
} else if (sizzle("query[xmlns=\"".concat(Strophe.NS.MUC, "\"]"), presence).length) {
return; // Ignore MUC
...
...
@@ -8483,7 +8501,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
this.RosterGroups = Backbone.Collection.extend({
model: _converse.RosterGroup,
fetchRosterGroups: function fetchRosterGroups() {
var _this
7
= this;
var _this
6
= this;
/* Fetches all the roster groups from sessionStorage.
*
...
...
@@ -8491,7 +8509,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
* returned.
*/
return new Promise(function (resolve, reject) {
_this
7
.fetch({
_this
6
.fetch({
silent: true,
// We need to first have all groups before
// we can start positioning them, so we set
...
...
@@ -8518,23 +8536,24 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
return {
"status": _converse.default_state,
"jid": _converse.bare_jid,
"nickname": _converse.nickname,
"vcard_updated": null
};
},
initialize: function initialize() {
var _this
8
= this;
var _this
7
= this;
this.on('change:status', function (item) {
var status = _this
8
.get('status');
var status = _this
7
.get('status');
_this
8
.sendPresence(status);
_this
7
.sendPresence(status);
_converse.emit('statusChanged', status);
});
this.on('change:status_message', function () {
var status_message = _this
8
.get('status_message');
var status_message = _this
7
.get('status_message');
_this
8.sendPresence(_this8
.get('status'), status_message);
_this
7.sendPresence(_this7
.get('status'), status_message);
_converse.emit('statusMessageChanged', status_message);
});
...
...
@@ -15336,7 +15355,11 @@ var __t, __p = '', __e = _.escape, __j = Array.prototype.join;
function print() { __p += __j.call(arguments, '') }
__p += '<!-- Add contact Modal -->\n<div class="modal fade" id="add-contact-modal" tabindex="-1" role="dialog" aria-labelledby="addContactModalLabel" aria-hidden="true">\n <div class="modal-dialog" role="document">\n <div class="modal-content">\n <div class="modal-header">\n <h5 class="modal-title" id="addContactModalLabel">' +
__e(o.heading_new_contact) +
'</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>\n </div>\n <form class="converse-form add-xmpp-contact">\n <div class="modal-body">\n <div class="form-group">\n <label for="jid">' +
'</h5>\n <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>\n </div>\n <form class="converse-form add-xmpp-contact">\n <div class="modal-body">\n <div class="form-group ';
if (o._converse.xhr_user_search_url) { ;
__p += ' hidden ';
} ;
__p += '">\n <label class="clearfix" for="jid">' +
__e(o.label_xmpp_address) +
':</label>\n <input type="text" name="jid" required="required" value="' +
__e(o.jid) +
...
...
@@ -15346,13 +15369,23 @@ __p += ' is-invalid ';
} ;
__p += '"\n placeholder="' +
__e(o.contact_placeholder) +
'">\n ';
'"
/
>\n ';
if (o.error_message) { ;
__p += '\n <div class="invalid-feedback">' +
__e(o.error_message) +
'</div>\n ';
} ;
__p += '\n </div>\n </div>\n <div class="modal-footer">\n <button type="submit" class="btn btn-primary">' +
__p += '\n </div>\n <div class="form-group">\n <label class="clearfix" for="name">' +
__e(o.label_nickname) +
':</label>\n <input type="text" name="name" value="' +
__e(o.nickname) +
'"\n class="form-control ';
if (o.error_message) { ;
__p += ' is-invalid ';
} ;
__p += '"\n placeholder="' +
__e(o.nickname_placeholder) +
'"/>\n </div>\n </div>\n <div class="modal-footer">\n <button type="submit" class="btn btn-primary">' +
__e(o.label_add) +
'</button>\n </div>\n </form>\n </div>\n </div>\n</div>\n';
return __p
...
...
@@ -16629,8 +16662,8 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
/*global define */
(function (root, factory) {
define('converse-rosterview',["converse-core", "tpl!add_contact_modal", "tpl!group_header", "tpl!pending_contact", "tpl!requesting_contact", "tpl!roster", "tpl!roster_filter", "tpl!roster_item", "tpl!search_contact", "converse-chatboxes", "converse-modal"], factory);
})(this, function (converse, tpl_add_contact_modal, tpl_group_header, tpl_pending_contact, tpl_requesting_contact, tpl_roster, tpl_roster_filter, tpl_roster_item, tpl_search_contact) {
define('converse-rosterview',["converse-core", "tpl!add_contact_modal", "tpl!group_header", "tpl!pending_contact", "tpl!requesting_contact", "tpl!roster", "tpl!roster_filter", "tpl!roster_item", "tpl!search_contact", "
awesomplete", "
converse-chatboxes", "converse-modal"], factory);
})(this, function (converse, tpl_add_contact_modal, tpl_group_header, tpl_pending_contact, tpl_requesting_contact, tpl_roster, tpl_roster_filter, tpl_roster_item, tpl_search_contact
, Awesomplete
) {
"use strict";
var _converse$env = converse.env,
...
...
@@ -16679,9 +16712,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
__ = _converse.__;
_converse.api.settings.update({
allow_chat_pending_contacts: true,
allow_contact_removal: true,
show_toolbar: true
'allow_chat_pending_contacts': true,
'allow_contact_removal': true,
'show_toolbar': true,
'xhr_user_search_url': null
});
_converse.api.promises.add('rosterViewInitialized');
...
...
@@ -16740,8 +16774,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
_converse.AddContactModal = _converse.BootstrapModal.extend({
events: {
'submit form': 'addContactFromForm',
'submit form.search-xmpp-contact': 'searchContacts'
'submit form': 'addContactFromForm'
},
initialize: function initialize() {
_converse.BootstrapModal.prototype.initialize.apply(this, arguments);
...
...
@@ -16749,18 +16782,81 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
this.model.on('change', this.render, this);
},
toHTML: function toHTML() {
var label_nickname = _converse.xhr_user_search_url ? __('Contact name') : __('Optional nickname');
return tpl_add_contact_modal(_.extend(this.model.toJSON(), {
'_converse': _converse,
'heading_new_contact': __('Add a Contact'),
'label_xmpp_address': __('XMPP Address'),
'label_nickname':
__('Optional nickname')
,
'label_nickname':
label_nickname
,
'contact_placeholder': __('name@example.org'),
'label_add': __('Add')
}));
},
afterRender: function afterRender() {
if (_converse.xhr_user_search_url && _.isString(_converse.xhr_user_search_url)) {
this.initXHRAutoComplete();
} else {
this.initJIDAutoComplete();
}
},
initJIDAutoComplete: function initJIDAutoComplete() {
var jid_input = this.el.querySelector('input[name="jid"]');
var list = _.uniq(_converse.roster.map(function (item) {
return Strophe.getDomainFromJid(item.get('jid'));
}));
new Awesomplete(jid_input, {
'list': list,
'data': function data(text, input) {
return input.slice(0, input.indexOf("@")) + "@" + text;
},
'filter': Awesomplete.FILTER_STARTSWITH
});
this.el.addEventListener('shown.bs.modal', function () {
jid_input.focus();
}, false);
},
initXHRAutoComplete: function initXHRAutoComplete() {
var name_input = this.el.querySelector('input[name="name"]');
var jid_input = this.el.querySelector('input[name="jid"]');
var awesomplete = new Awesomplete(name_input, {
'minChars': 1,
'list': []
});
var xhr = new window.XMLHttpRequest(); // `open` must be called after `onload` for mock/testing purposes.
xhr.onload = function () {
if (xhr.responseText) {
awesomplete.list = JSON.parse(xhr.responseText).map(function (i) {
//eslint-disable-line arrow-body-style
return {
'label': i.fullname,
'value': i.jid
};
});
awesomplete.evaluate();
}
};
name_input.addEventListener('input', _.debounce(function () {
xhr.open("GET", "".concat(_converse.xhr_user_search_url, "?q=").concat(name_input.value), true);
xhr.send();
}, 300));
this.el.addEventListener('awesomplete-selectcomplete', function (ev) {
jid_input.value = ev.text.value;
name_input.value = ev.text.label;
});
this.el.addEventListener('shown.bs.modal', function () {
name_input.focus();
}, false);
},
addContactFromForm: function addContactFromForm(ev) {
ev.preventDefault();
var data = new FormData(ev.target),
jid = data.get('jid');
jid = data.get('jid'),
name = data.get('name');
ev.target.reset();
if (!jid || _.compact(jid.split('@')).length < 2) {
this.model.set({
...
...
@@ -16768,7 +16864,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
'jid': jid
});
} else {
_converse.roster.addAndSubscribe(jid);
_converse.roster.addAndSubscribe(jid
, name
);
this.model.clear();
this.modal.hide();
...
...
@@ -17284,8 +17380,10 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
this.onRemove(contact);
},
onRemove: function onRemove(contact) {
this.remove(contact.get('jid'));
if (this.model.contacts.length === 0) {
this.
el.parentElement.removeChild(this.el
);
this.
remove(
);
}
}
});
...
...
@@ -17487,6 +17585,7 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
},
addContactToGroup: function addContactToGroup(contact, name, options) {
this.getGroup(name).contacts.add(contact, options);
this.sortAndPositionAllItems();
},
addExistingContact: function addExistingContact(contact, options) {
var groups;
...
...
@@ -17862,6 +17961,13 @@ return __p
}
converse.plugins.add('converse-vcard', {
enabled: function enabled(_converse) {
_converse.api.settings.update({
'use_vcards': true
});
return _converse.use_vcards;
},
overrides: {
// Overrides mentioned here will be picked up by converse.js's
// plugin architecture they will replace existing methods on the
...
...
@@ -17887,10 +17993,6 @@ return __p
*/
var _converse = this._converse;
_converse.api.settings.update({
'use_vcards': true
});
_converse.createRequestingContactFromVCard = function (presence, vcard) {
var bare_jid = Strophe.getBareJidFromJid(presence.getAttribute('from'));
var fullname = vcard.fullname;
...
...
@@ -17920,9 +18022,7 @@ return __p
_converse.on('addClientFeatures', function () {
if (_converse.use_vcards) {
_converse.connection.disco.addFeature(Strophe.NS.VCARD);
}
_converse.connection.disco.addFeature(Strophe.NS.VCARD);
});
_converse.on('chatBoxInitialized', function (chatbox) {
...
...
@@ -18028,6 +18128,13 @@ return __p
'placeholder_status_message': __('Personal status message')
}));
},
afterRender: function afterRender() {
var _this = this;
this.el.addEventListener('shown.bs.modal', function () {
_this.el.querySelector('input[name="status_message"]').focus();
}, false);
},
clearStatusMessage: function clearStatusMessage(ev) {
if (ev && ev.preventDefault) {
ev.preventDefault();
...
...
@@ -19712,6 +19819,7 @@ return __p
'affiliation': null,
'connection_status': converse.ROOMSTATUS.DISCONNECTED,
'name': '',
'nick': _converse.xmppstatus.get('nickname'),
'description': '',
'features_fetched': false,
'roomconfig': {},
...
...
@@ -21854,7 +21962,7 @@ var __t, __p = '', __e = _.escape, __j = Array.prototype.join;
function print() { __p += __j.call(arguments, '') }
__p += '<form class="room-invite">\n ';
if (o.error_message) { ;
__p += '\n <span class="
pure-form-message
error">' +
__p += '\n <span class="error">' +
__e(o.error_message) +
'</span>\n ';
} ;
...
...
@@ -22245,7 +22353,7 @@ return __p
if (!this.roomspanel.model.get('nick')) {
this.roomspanel.model.save({
nick: Strophe.getNodeFromJid(_converse.bare_jid)
nick:
_converse.xmppstatus.get('nickname') ||
Strophe.getNodeFromJid(_converse.bare_jid)
});
}
_converse.emit('roomsPanelRendered');
...
...
@@ -22370,6 +22478,12 @@ return __p
}));
},
afterRender () {
this.el.addEventListener('shown.bs.modal', () => {
this.el.querySelector('input[name="server"]').focus();
}, false);
},
openRoom (ev) {
ev.preventDefault();
const jid = ev.target.getAttribute('data-room-jid');
...
...
@@ -22491,6 +22605,12 @@ return __p
}));
},
afterRender () {
this.el.addEventListener('shown.bs.modal', () => {
this.el.querySelector('input[name="chatroom"]').focus();
}, false);
},
parseRoomDataFromEvent (form) {
const data = new FormData(form);
const jid = data.get('chatroom');
dist/converse.js
View file @
08ab2e54
...
...
@@ -39941,6 +39941,7 @@ return Backbone.BrowserStorage;
locales: ['af', 'ar', 'bg', 'ca', 'de', 'es', 'en', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'nb', 'nl', 'pl', 'pt_BR', 'ru', 'tr', 'uk', 'zh_CN', 'zh_TW'],
message_carbons: true,
message_storage: 'session',
nickname: undefined,
password: undefined,
prebind_url: null,
priority: 0,
...
...
@@ -40576,8 +40577,6 @@ return Backbone.BrowserStorage;
'status': ''
},
initialize: function initialize(attributes) {
var _this3 = this;
var jid = attributes.jid,
bare_jid = Strophe.getBareJidFromJid(jid).toLowerCase(),
resource = Strophe.getResourceFromJid(jid);
...
...
@@ -40590,9 +40589,6 @@ return Backbone.BrowserStorage;
'resources': {},
'user_id': Strophe.getNodeFromJid(jid)
}, attributes));
this.on('destroy', function () {
_this3.removeFromRoster();
});
this.on('change:chat_status', function (item) {
_converse.emit('contactStatusChanged', item.attributes);
});
...
...
@@ -40613,9 +40609,9 @@ return Backbone.BrowserStorage;
pres.c("status").t(message).up();
}
var nick = _converse.xmppstatus.get('fullname');
var nick = _converse.xmppstatus.get('
nickname') || _converse.xmppstatus.get('
fullname');
if (nick
&& nick !== ""
) {
if (nick) {
pres.c('nick', {
'xmlns': Strophe.NS.NICK
}).t(nick).up();
...
...
@@ -40652,7 +40648,8 @@ return Backbone.BrowserStorage;
'to': this.get('jid')
}));
this.destroy(); // Will cause removeFromRoster to be called.
this.removeFromRoster();
this.destroy();
},
unauthorize: function unauthorize(message) {
/* Unauthorize this contact's presence subscription
...
...
@@ -40816,7 +40813,7 @@ return Backbone.BrowserStorage;
}, Strophe.NS.ROSTERX, 'message', null);
},
fetchRosterContacts: function fetchRosterContacts() {
var _this
4
= this;
var _this
3
= this;
/* Fetches the roster contacts, first by trying the
* sessionStorage cache, and if that's empty, then by querying
...
...
@@ -40826,7 +40823,7 @@ return Backbone.BrowserStorage;
* fetched.
*/
return new Promise(function (resolve, reject) {
_this
4
.fetch({
_this
3
.fetch({
'add': true,
'silent': true,
success: function success(collection) {
...
...
@@ -40846,7 +40843,7 @@ return Backbone.BrowserStorage;
subscribeToSuggestedItems: function subscribeToSuggestedItems(msg) {
_.each(msg.querySelectorAll('item'), function (item) {
if (item.getAttribute('action') === 'add') {
_converse.roster.addAndSubscribe(item.getAttribute('jid'),
null,
_converse.xmppstatus.get('fullname'));
_converse.roster.addAndSubscribe(item.getAttribute('jid'),
_converse.xmppstatus.get('nickname') ||
_converse.xmppstatus.get('fullname'));
}
});
...
...
@@ -40872,7 +40869,7 @@ return Backbone.BrowserStorage;
}
};
this.addContact(jid, name, groups, attributes).then(handler, handler);
this.addContact
ToRoster
(jid, name, groups, attributes).then(handler, handler);
},
sendContactAddIQ: function sendContactAddIQ(jid, name, groups, callback, errback) {
/* Send an IQ stanza to the XMPP server to add a new roster contact.
...
...
@@ -40900,8 +40897,8 @@ return Backbone.BrowserStorage;
_converse.connection.sendIQ(iq, callback, errback);
},
addContact
: function addContact
(jid, name, groups, attributes) {
var _this
5
= this;
addContact
ToRoster: function addContactToRoster
(jid, name, groups, attributes) {
var _this
4
= this;
/* Adds a RosterContact instance to _converse.roster and
* registers the contact on the XMPP server.
...
...
@@ -40918,8 +40915,8 @@ return Backbone.BrowserStorage;
groups = groups || [];
name = _.isEmpty(name) ? jid : name;
_this
5
.sendContactAddIQ(jid, name, groups, function () {
var contact = _this
5
.create(_.assignIn({
_this
4
.sendContactAddIQ(jid, name, groups, function () {
var contact = _this
4
.create(_.assignIn({
ask: undefined,
fullname: name,
groups: groups,
...
...
@@ -40940,7 +40937,7 @@ return Backbone.BrowserStorage;
});
});
},
subscribeBack: function subscribeBack(bare_jid) {
subscribeBack: function subscribeBack(bare_jid
, presence
) {
var contact = this.get(bare_jid);
if (contact instanceof _converse.RosterContact) {
...
...
@@ -40953,7 +40950,9 @@ return Backbone.BrowserStorage;
}
};
this.addContact(bare_jid, '', [], {
var nickname = _.get(sizzle("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"), presence).pop(), 'textContent', null);
this.addContactToRoster(bare_jid, nickname, [], {
'subscription': 'from'
}).then(handler, handler);
}
...
...
@@ -41012,7 +41011,7 @@ return Backbone.BrowserStorage;
return true;
},
fetchFromServer: function fetchFromServer() {
var _this
6
= this;
var _this
5
= this;
/* Fetch the roster from the XMPP server */
return new Promise(function (resolve, reject) {
...
...
@@ -41023,7 +41022,7 @@ return Backbone.BrowserStorage;
xmlns: Strophe.NS.ROSTER
});
var callback = _.flow(_this
6.onReceivedFromServer.bind(_this6
), resolve);
var callback = _.flow(_this
5.onReceivedFromServer.bind(_this5
), resolve);
var errback = function errback(iq) {
var errmsg = "Error while trying to fetch roster from the server";
...
...
@@ -41077,7 +41076,7 @@ return Backbone.BrowserStorage;
});
} else {
if (subscription === "remove") {
return contact.destroy();
// will trigger removeFromRoster
return contact.destroy();
} // We only find out about requesting contacts via the
// presence handler, so if we receive a contact
// here, we know they aren't requesting anymore.
...
...
@@ -41098,13 +41097,14 @@ return Backbone.BrowserStorage;
* Note: this method gets completely overridden by converse-vcard.js
*/
var bare_jid = Strophe.getBareJidFromJid(presence.getAttribute('from')),
nick_el = presence.querySelector("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"));
nickname = _.get(sizzle("nick[xmlns=\"".concat(Strophe.NS.NICK, "\"]"), presence).pop(), 'textContent', null);
var user_data = {
'jid': bare_jid,
'subscription': 'none',
'ask': null,
'requesting': true,
'fullname': nick
_el && nick_el.textContent || bare_jid
'fullname': nick
name
};
this.create(user_data);
...
...
@@ -41121,7 +41121,7 @@ return Backbone.BrowserStorage;
if (_converse.auto_subscribe) {
if (!contact || contact.get('subscription') !== 'to') {
this.subscribeBack(bare_jid);
this.subscribeBack(bare_jid
, presence
);
} else {
contact.authorize();
}
...
...
@@ -41167,6 +41167,24 @@ return Backbone.BrowserStorage;
}
}
if (_converse.jid === jid && presence_type === 'unavailable') {
// XXX: We've received an "unavailable" presence from our
// own resource. Apparently this happens due to a
// Prosody bug, whereby we send an IQ stanza to remove
// a roster contact, and Prosody then sends
// "unavailable" globally, instead of directed to the
// particular user that's removed.
//
// Here is the bug report: https://prosody.im/issues/1121
//
// I'm not sure whether this might legitimately happen
// in other cases.
//
// As a workaround for now we simply send our presence again,
// otherwise we're treated as offline.
_converse.xmppstatus.sendPresence();
}
return;
} else if (sizzle("query[xmlns=\"".concat(Strophe.NS.MUC, "\"]"), presence).length) {
return; // Ignore MUC
...
...
@@ -41207,7 +41225,7 @@ return Backbone.BrowserStorage;
this.RosterGroups = Backbone.Collection.extend({
model: _converse.RosterGroup,
fetchRosterGroups: function fetchRosterGroups() {
var _this
7
= this;
var _this
6
= this;
/* Fetches all the roster groups from sessionStorage.
*
...
...
@@ -41215,7 +41233,7 @@ return Backbone.BrowserStorage;
* returned.
*/
return new Promise(function (resolve, reject) {
_this
7
.fetch({
_this
6
.fetch({
silent: true,
// We need to first have all groups before
// we can start positioning them, so we set
...
...
@@ -41242,23 +41260,24 @@ return Backbone.BrowserStorage;
return {
"status": _converse.default_state,
"jid": _converse.bare_jid,
"nickname": _converse.nickname,
"vcard_updated": null
};
},
initialize: function initialize() {
var _this
8
= this;
var _this
7
= this;
this.on('change:status', function (item) {
var status = _this
8
.get('status');
var status = _this
7
.get('status');
_this
8
.sendPresence(status);
_this
7
.sendPresence(status);
_converse.emit('statusChanged', status);
});
this.on('change:status_message', function () {
var status_message = _this
8
.get('status_message');
var status_message = _this
7
.get('status_message');
_this
8.sendPresence(_this8
.get('status'), status_message);
_this
7.sendPresence(_this7
.get('status'), status_message);
_converse.emit('statusMessageChanged', status_message);
});
...
...
@@ -50761,12 +50780,13 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat
this.model.contacts.remove(contact, {
'silent': true
});
this.get(contact.get('jid')).remove();
this.onRemove(contact);
},
onRemove: function onRemove(contact) {
this.remove(contact.get('jid'));
if (this.model.contacts.length === 0) {
this.
el.parentElement.removeChild(this.el
);
this.
remove(
);
}
}
});
...
...
@@ -51447,6 +51467,8 @@ return __p
/* The initialize function gets called as soon as the plugin is
* loaded by converse.js's plugin machinery.
*/
var _converse = this._converse;
_converse.createRequestingContactFromVCard = function (presence, vcard) {
var bare_jid = Strophe.getBareJidFromJid(presence.getAttribute('from'));
var fullname = vcard.fullname;
...
...
@@ -53547,6 +53569,7 @@ Strophe.addConnectionPlugin('disco',
'affiliation': null,
'connection_status': converse.ROOMSTATUS.DISCONNECTED,
'name': '',
'nick': _converse.xmppstatus.get('nickname'),
'description': '',
'features_fetched': false,
'roomconfig': {},
...
...
@@ -56126,7 +56149,7 @@ return __p
if (!this.roomspanel.model.get('nick')) {
this.roomspanel.model.save({
nick: Strophe.getNodeFromJid(_converse.bare_jid)
nick:
_converse.xmppstatus.get('nickname') ||
Strophe.getNodeFromJid(_converse.bare_jid)
});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment