Replace lodash methods with native ones and remove lodash.fp

This commit is contained in:
JC Brand 2019-05-14 11:38:41 +02:00
parent b1ef3f5b24
commit 6193a9dc80
19 changed files with 102 additions and 1162 deletions

View File

@ -261,7 +261,7 @@
// You can retrieve multiple contacts by passing in an array
const jid2 = mock.cur_names[1].replace(/ /g,'.').toLowerCase() + '@localhost';
let list = await _converse.api.contacts.get([jid, jid2]);
expect(_.isArray(list)).toBeTruthy();
expect(Array.isArray(list)).toBeTruthy();
expect(list[0].get('fullname')).toBe(mock.cur_names[0]);
expect(list[1].get('fullname')).toBe(mock.cur_names[1]);
// Check that all JIDs are returned if you call without any parameters
@ -313,7 +313,7 @@
test_utils.openChatBoxFor(_converse, jid2);
await test_utils.waitUntil(() => _converse.chatboxes.length == 2);
const list = _converse.api.chats.get([jid, jid2]);
expect(_.isArray(list)).toBeTruthy();
expect(Array.isArray(list)).toBeTruthy();
expect(list[0].get('box_id')).toBe(`box-${btoa(jid)}`);
expect(list[1].get('box_id')).toBe(`box-${btoa(jid2)}`);
done();
@ -343,7 +343,7 @@
expect(u.isVisible(chatboxview.el)).toBeTruthy();
// Test for multiple JIDs
const list = await _converse.api.chats.open([jid, jid2]);
expect(_.isArray(list)).toBeTruthy();
expect(Array.isArray(list)).toBeTruthy();
expect(list[0].get('box_id')).toBe(`box-${btoa(jid)}`);
expect(list[1].get('box_id')).toBe(`box-${btoa(jid2)}`);
done();

View File

@ -5,7 +5,6 @@
const $iq = converse.env.$iq;
const Strophe = converse.env.Strophe;
const _ = converse.env._;
const f = converse.env.f;
describe("XEP-0357 Push Notifications", function () {
@ -30,7 +29,7 @@
_converse.bare_jid,
[{'category': 'account', 'type':'registered'}],
['urn:xmpp:push:0'], [], 'info');
const node = await test_utils.waitUntil(() =>
const node = await test_utils.waitUntil(() =>
_.filter(IQ_stanzas, iq => iq.nodeTree.querySelector('iq[type="set"] enable[xmlns="urn:xmpp:push:0"]')).pop()
);
const stanza = node.nodeTree;
@ -84,7 +83,7 @@
'type': 'result',
'id': stanza.nodeTree.getAttribute('id')
})));
await test_utils.waitUntil(() => f.includes('chat.shakespeare.lit', _converse.session.get('push_enabled')));
await test_utils.waitUntil(() => _.includes(_converse.session.get('push_enabled'), 'chat.shakespeare.lit'));
done();
}));

View File

@ -28,7 +28,7 @@ import tpl_user_details_modal from "templates/user_details_modal.html";
import u from "@converse/headless/utils/emoji";
import xss from "xss/dist/xss";
const { $msg, Backbone, Promise, Strophe, _, b64_sha1, f, sizzle, dayjs } = converse.env;
const { $msg, Backbone, Promise, Strophe, _, b64_sha1, sizzle, dayjs } = converse.env;
converse.plugins.add('converse-chatview', {
@ -593,10 +593,7 @@ converse.plugins.add('converse-chatview', {
},
clearSpinner () {
_.each(
this.content.querySelectorAll('span.spinner'),
(el) => el.parentNode.removeChild(el)
);
this.content.querySelectorAll('.spinner').forEach(u.removeElement);
},
/**
@ -696,7 +693,7 @@ converse.plugins.add('converse-chatview', {
},
showHelpMessages (msgs, type, spinner) {
_.each(msgs, (msg) => {
msgs.forEach(msg => {
this.content.insertAdjacentHTML(
'beforeend',
tpl_help_message({
@ -996,7 +993,7 @@ converse.plugins.add('converse-chatview', {
},
getOwnMessages () {
return f(this.model.messages.filter({'sender': 'me'}));
return this.model.messages.filter({'sender': 'me'});
},
onEscapePressed (ev) {
@ -1065,7 +1062,7 @@ converse.plugins.add('converse-chatview', {
}
}
}
message = message || this.getOwnMessages().findLast((msg) => msg.get('message'));
message = message || _.findLast(this.getOwnMessages(), msg => msg.get('message'));
if (message) {
this.insertIntoTextArea(message.get('message'), true, true);
message.save('correcting', true);

View File

@ -12,7 +12,6 @@ import "converse-rosterview";
import _FormData from "formdata-polyfill";
import bootstrap from "bootstrap.native";
import converse from "@converse/headless/converse-core";
import fp from "@converse/headless/lodash.fp";
import tpl_brand_heading from "templates/converse_brand_heading.html";
import tpl_controlbox from "templates/controlbox.html";
import tpl_controlbox_toggle from "templates/controlbox_toggle.html";

View File

@ -26,7 +26,7 @@ converse.plugins.add('converse-embedded', {
'hide_muc_server': true
});
const { _converse } = this;
if (!_.isArray(_converse.auto_join_rooms) && !_.isArray(_converse.auto_join_private_chats)) {
if (!Array.isArray(_converse.auto_join_rooms) && !_.isArray(_converse.auto_join_private_chats)) {
throw new Error("converse-embedded: auto_join_rooms must be an Array");
}
if (_converse.auto_join_rooms.length > 1 && _converse.auto_join_private_chats.length > 1) {

View File

@ -38,7 +38,7 @@ import tpl_spinner from "templates/spinner.html";
import xss from "xss/dist/xss";
const { Backbone, Promise, Strophe, dayjs, f, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
const { Backbone, Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
const u = converse.env.utils;
const AFFILIATION_CHANGE_COMANDS = ['admin', 'ban', 'owner', 'member', 'revoke'];
const OWNER_COMMANDS = ['owner'];
@ -341,9 +341,7 @@ converse.plugins.add('converse-muc-views', {
},
removeSpinner () {
_.each(this.el.querySelectorAll('span.spinner'),
(el) => el.parentNode.removeChild(el)
);
sizzle('.spinner', this.el).forEach(u.removeElement);
},
informNoRoomsFound () {
@ -359,12 +357,14 @@ converse.plugins.add('converse-muc-views', {
* all its public groupchats.
*/
const available_chatrooms = this.el.querySelector('.available-chatrooms');
this.rooms = iq.querySelectorAll('query item');
if (this.rooms.length) {
const rooms = sizzle('query item', iq);
if (rooms.length) {
available_chatrooms.innerHTML = tpl_rooms_results({'feedback_text': __('Groupchats found:')});
const fragment = document.createDocumentFragment();
const children = _.reject(_.map(this.rooms, this.roomStanzaItemToHTMLElement), _.isNil)
_.each(children, (child) => fragment.appendChild(child));
rooms.map(this.roomStanzaItemToHTMLElement)
.filter(r => r)
.forEach(child => fragment.appendChild(child));
available_chatrooms.appendChild(fragment);
this.removeSpinner();
} else {
@ -890,26 +890,28 @@ converse.plugins.add('converse-muc-views', {
if (!occupant) {
occupant = this.model.occupants.findWhere({'jid': _converse.bare_jid});
}
if (!_.includes(roles, occupant.get('role'))) {
if (show_error) {
this.showErrorMessage(__('Forbidden: you do not have the necessary role in order to do that.'))
}
return false;
const role = occupant.get('role');
if (Array.isArray(roles) && roles.includes(role) || roles === role) {
return true;
}
return true;
if (show_error) {
this.showErrorMessage(__('Forbidden: you do not have the necessary role in order to do that.'))
}
return false;
},
verifyAffiliations (affiliations, occupant, show_error=true) {
if (!occupant) {
occupant = this.model.occupants.findWhere({'jid': _converse.bare_jid});
}
if (!_.includes(affiliations, occupant.get('affiliation'))) {
if (show_error) {
this.showErrorMessage(__('Forbidden: you do not have the necessary affiliation in order to do that.'))
}
return false;
const a = occupant.get('affiliation');
if (Array.isArray(affiliations) && affiliations.includes(a) || affiliations === a) {
return true;
}
return true;
if (show_error) {
this.showErrorMessage(__('Forbidden: you do not have the necessary affiliation in order to do that.'))
}
return false;
},
validateRoleChangeCommand (command, args) {
@ -922,9 +924,9 @@ converse.plugins.add('converse-muc-views', {
);
return false;
}
if (!(_.includes(AFFILIATION_CHANGE_COMANDS, command) && u.isValidJID(args[0])) &&
if (!(AFFILIATION_CHANGE_COMANDS.includes(command) && u.isValidJID(args[0])) &&
!this.model.occupants.findWhere({'nick': args[0]}) &&
!this.model.occupants.findWhere({'jid': args[0]})) {
!this.model.occupants.findWhere({'jid': args[0]})) {
this.showErrorMessage(__('Error: couldn\'t find a groupchat participant "%1$s"', args[0]));
return false;
}
@ -937,14 +939,13 @@ converse.plugins.add('converse-muc-views', {
},
parseMessageForCommands (text) {
if (_converse.muc_disable_slash_commands &&
!_.isArray(_converse.muc_disable_slash_commands)) {
if (_converse.muc_disable_slash_commands && !Array.isArray(_converse.muc_disable_slash_commands)) {
return _converse.ChatBoxView.prototype.parseMessageForCommands.apply(this, arguments);
}
const match = text.replace(/^\s*/, "").match(/^\/(.*?)(?: (.*))?$/) || [false, '', ''],
args = match[2] && match[2].splitOnce(' ').filter(s => s) || [],
command = match[1].toLowerCase(),
disabled_commands = _.isArray(_converse.muc_disable_slash_commands) ?
disabled_commands = Array.isArray(_converse.muc_disable_slash_commands) ?
_converse.muc_disable_slash_commands : [];
if (_.includes(disabled_commands, command)) {
return false;
@ -992,7 +993,7 @@ converse.plugins.add('converse-muc-views', {
break;
}
case 'destroy': {
if (!this.verifyAffiliations(['owner'])) {
if (!this.verifyAffiliations('owner')) {
break;
}
this.destroy(this.model.get('jid'), args[0])
@ -1374,7 +1375,8 @@ converse.plugins.add('converse-muc-views', {
showDestroyedMessage (error) {
u.hideElement(this.el.querySelector('.chat-area'));
u.hideElement(this.el.querySelector('.occupants'));
_.each(this.el.querySelectorAll('.spinner'), u.removeElement);
sizzle('.spinner', this.el).forEach(u.removeElement);
const container = this.el.querySelector('.disconnect-container');
const moved_jid = _.get(
sizzle('gone[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]', error).pop(),
@ -1410,7 +1412,7 @@ converse.plugins.add('converse-muc-views', {
}
u.hideElement(this.el.querySelector('.chat-area'));
u.hideElement(this.el.querySelector('.occupants'));
_.each(this.el.querySelectorAll('.spinner'), u.removeElement);
sizzle('.spinner', this.el).forEach(u.removeElement);
const container = this.el.querySelector('.disconnect-container');
container.innerHTML = tpl_chatroom_disconnect({
'_': _,
@ -1524,7 +1526,7 @@ converse.plugins.add('converse-muc-views', {
this.model.save('connection_status', converse.ROOMSTATUS.DISCONNECTED);
return;
}
_.each(notification.messages, (message) => {
notification.messages.forEach(message => {
this.content.insertAdjacentHTML(
'beforeend',
tpl_info({
@ -1709,7 +1711,7 @@ converse.plugins.add('converse-muc-views', {
const is_self = stanza.querySelectorAll("status[code='110']").length;
const iteratee = _.partial(this.parseXUserElement.bind(this), _, stanza, is_self);
const notifications = _.reject(_.map(elements, iteratee), _.isEmpty);
_.each(notifications, this.showNotificationsforUser.bind(this));
notifications.forEach(n => this.showNotificationsforUser(n));
},
showErrorMessageFromPresence (presence) {
@ -1768,7 +1770,7 @@ converse.plugins.add('converse-muc-views', {
},
showSpinner () {
u.removeElement(this.el.querySelector('.spinner'));
sizzle('.spinner', this.el).forEach(u.removeElement);
this.hideChatRoomContents();
const container_el = this.el.querySelector('.chatroom-body');
container_el.insertAdjacentHTML('afterbegin', tpl_spinner());
@ -2075,7 +2077,7 @@ converse.plugins.add('converse-muc-views', {
picks = _.pick(features.attributes, converse.ROOM_FEATURES),
iteratee = (a, v) => a || v;
if (_.reduce(_.values(picks), iteratee)) {
if (_.reduce(Object.values(picks), iteratee)) {
const el = this.el.querySelector('.chatroom-features');
el.innerHTML = tpl_chatroom_features(Object.assign(features.toJSON(), {__}));
this.setOccupantsHeight();
@ -2283,7 +2285,7 @@ converse.plugins.add('converse-muc-views', {
*
*/
get (jids) {
if (_.isArray(jids)) {
if (Array.isArray(jids)) {
const views = _converse.api.chatviews.get(jids);
return views.filter(v => v.model.get('type') === _converse.CHATROOMS_TYPE)
} else {
@ -2306,21 +2308,19 @@ converse.plugins.add('converse-muc-views', {
* @param {(String[]|String)} jids The JID or array of JIDs of the chatroom(s)
*/
'close' (jids) {
let views;
if (_.isUndefined(jids)) {
_converse.chatboxviews.each(function (view) {
if (view.is_chatroom && view.model) {
view.close();
}
});
views = _converse.chatboxviews;
} else if (_.isString(jids)) {
const view = _converse.chatboxviews.get(jids);
if (view) { view.close(); }
} else {
_.each(jids, function (jid) {
const view = _converse.chatboxviews.get(jid);
if (view) { view.close(); }
});
views = [_converse.chatboxviews.get(jids)].filter(v => v);
} else if (Array.isArray(jids)) {
views = jids.map(jid => _converse.chatboxviews.get(jid));
}
views.forEach(view => {
if (view.is_chatroom && view.model) {
view.close();
}
});
}
}
});

View File

@ -66,7 +66,7 @@ converse.plugins.add('converse-notification', {
}
const mentioned = (new RegExp(`\\b${room.get('nick')}\\b`)).test(body.textContent);
notify_all = notify_all === true ||
(_.isArray(notify_all) && _.includes(notify_all, room_jid));
(Array.isArray(notify_all) && _.includes(notify_all, room_jid));
if (sender === room.get('nick') || (!notify_all && !mentioned)) {
return false;
}

View File

@ -9,7 +9,7 @@
import converse from "@converse/headless/converse-core";
import tpl_toolbar_omemo from "templates/toolbar_omemo.html";
const { Backbone, Promise, Strophe, dayjs, sizzle, $build, $iq, $msg, _, f } = converse.env;
const { Backbone, Promise, Strophe, dayjs, sizzle, $build, $iq, $msg, _ } = converse.env;
const u = converse.env.utils;
Strophe.addNamespace('OMEMO_DEVICELIST', Strophe.NS.OMEMO+".devicelist");
@ -67,7 +67,7 @@ function parseBundle (bundle_el) {
converse.plugins.add('converse-omemo', {
enabled (_converse) {
return !_.isNil(window.libsignal) && !f.includes('converse-omemo', _converse.blacklisted_plugins) && _converse.config.get('trusted');
return !_.isNil(window.libsignal) && !_converse.blacklisted_plugins.includes('converse-omemo') && _converse.config.get('trusted');
},
dependencies: ["converse-chatview", "converse-pubsub"],

View File

@ -438,7 +438,7 @@ converse.plugins.add('converse-register', {
},
renderLegacyRegistrationForm (form) {
_.each(Object.keys(this.fields), (key) => {
Object.keys(this.fields).forEach(key => {
if (key === "username") {
form.insertAdjacentHTML(
'beforeend',
@ -466,12 +466,10 @@ converse.plugins.add('converse-register', {
}
});
// Show urls
_.each(this.urls, (url) => {
form.insertAdjacentHTML(
'afterend',
'<a target="blank" rel="noopener" href="'+url+'">'+url+'</a>'
);
});
this.urls.forEach(u => form.insertAdjacentHTML(
'afterend',
'<a target="blank" rel="noopener" href="'+u+'">'+u+'</a>'
));
},
/**
@ -493,7 +491,7 @@ converse.plugins.add('converse-register', {
const buttons = form.querySelector('fieldset.buttons');
if (this.form_type === 'xform') {
_.each(stanza.querySelectorAll('field'), (field) => {
stanza.querySelectorAll('field').forEach(field => {
buttons.insertAdjacentHTML(
'beforebegin',
utils.xForm2webForm(field, stanza, {'domain': this.domain})
@ -540,9 +538,7 @@ converse.plugins.add('converse-register', {
*/
reportErrors (stanza) {
const errors = stanza.querySelectorAll('error');
_.each(errors, (error) => {
this.showValidationError(error.textContent);
});
errors.forEach(e => this.showValidationError(e.textContent));
if (!errors.length) {
const message = __('The provider rejected your registration attempt. '+
'Please check the values you entered for correctness.');
@ -596,13 +592,9 @@ converse.plugins.add('converse-register', {
if (this.form_type === 'xform') {
iq.c("x", {xmlns: Strophe.NS.XFORM, type: 'submit'});
_.each(inputs, (input) => {
iq.cnode(utils.webForm2xForm(input)).up();
});
inputs.forEach(input => iq.cnode(utils.webForm2xForm(input)).up());
} else {
_.each(inputs, (input) => {
iq.c(input.getAttribute('name'), {}, input.value);
});
inputs.forEach(input => iq.c(input.getAttribute('name'), {}, input.value));
}
_converse.connection._addSysHandler(this._onRegisterIQ.bind(this), null, "iq", null, null);
_converse.connection.send(iq);
@ -625,7 +617,7 @@ converse.plugins.add('converse-register', {
},
_setFieldsFromLegacy (query) {
_.each(query.children, (field) => {
[].forEach.call(query.children, field => {
if (field.tagName.toLowerCase() === 'instructions') {
this.instructions = Strophe.getText(field);
return;
@ -643,7 +635,7 @@ converse.plugins.add('converse-register', {
_setFieldsFromXForm (xform) {
this.title = _.get(xform.querySelector('title'), 'textContent');
this.instructions = _.get(xform.querySelector('instructions'), 'textContent');
_.each(xform.querySelectorAll('field'), (field) => {
xform.querySelectorAll('field').forEach(field => {
const _var = field.getAttribute('var');
if (_var) {
this.fields[_var.toLowerCase()] = _.get(field.querySelector('value'), 'textContent', '');

View File

@ -57,7 +57,7 @@ const WHITELISTED_PLUGINS = [
const initialize = converse.initialize;
converse.initialize = function (settings, callback) {
if (converse.env._.isArray(settings.whitelisted_plugins)) {
if (Array.isArray(settings.whitelisted_plugins)) {
settings.whitelisted_plugins = settings.whitelisted_plugins.concat(WHITELISTED_PLUGINS);
} else {
settings.whitelisted_plugins = WHITELISTED_PLUGINS;

File diff suppressed because it is too large Load Diff

View File

@ -1104,7 +1104,7 @@ converse.plugins.add('converse-chatboxes', {
}
return chatbox;
}
if (_.isArray(jids)) {
if (Array.isArray(jids)) {
return Promise.all(jids.forEach(async jid => {
const contact = await _converse.api.contacts.get(jids);
attrs.fullname = _.get(contact, 'attributes.fullname');
@ -1168,7 +1168,7 @@ converse.plugins.add('converse-chatboxes', {
if (_.isString(jids)) {
const chat = await _converse.api.chats.create(jids, attrs);
return chat.maybeShow(force);
} else if (_.isArray(jids)) {
} else if (Array.isArray(jids)) {
return Promise.all(jids.map(j => _converse.api.chats.create(j, attrs).then(c => c.maybeShow(force))));
}
const err_msg = "chats.open: You need to provide at least one JID";

View File

@ -11,7 +11,6 @@ import Promise from "es6-promise/dist/es6-promise.auto";
import _ from "./lodash.noconflict";
import advancedFormat from 'dayjs/plugin/advancedFormat'
import dayjs from "dayjs";
import f from "./lodash.fp";
import i18n from "./i18n";
import pluggable from "pluggable.js/src/pluggable";
import polyfill from "./polyfill";
@ -548,7 +547,7 @@ function cleanup () {
_converse.initialize = async function (settings, callback) {
settings = !_.isUndefined(settings) ? settings : {};
const init_promise = u.getResolveablePromise();
_.each(PROMISES, addPromise);
PROMISES.forEach(addPromise);
if (!_.isUndefined(_converse.connection)) {
cleanup();
}
@ -941,7 +940,7 @@ _converse.initialize = async function (settings, callback) {
_converse.tearDown();
}
// Recreate all the promises
_.each(Object.keys(_converse.promises), addPromise);
Object.keys(_converse.promises).forEach(addPromise);
/**
* Triggered once the user has logged out.
* @event _converse#logout
@ -1674,8 +1673,8 @@ _converse.api = {
* @example _converse.api.promises.add('foo-completed');
*/
'add' (promises) {
promises = _.isArray(promises) ? promises : [promises]
_.each(promises, addPromise);
promises = Array.isArray(promises) ? promises : [promises]
promises.forEach(addPromise);
}
},
@ -1927,7 +1926,6 @@ const converse = {
* @property {function} converse.env.Strophe - The [Strophe](http://strophe.im/strophejs) XMPP library used by Converse.
* @property {object} converse.env._ - The instance of [lodash](http://lodash.com) used by Converse.
* @property {function} converse.env.f - And instance of Lodash with its methods wrapped to produce immutable auto-curried iteratee-first data-last methods.
* @property {function} converse.env.b64_sha1 - Utility method from Strophe for creating base64 encoded sha1 hashes.
* @property {object} converse.env.dayjs - [DayJS](https://github.com/iamkun/dayjs) date manipulation library.
* @property {function} converse.env.sizzle - [Sizzle](https://sizzlejs.com) CSS selector engine.
* @property {object} converse.env.utils - Module containing common utility methods used by Converse.
@ -1941,7 +1939,6 @@ const converse = {
'Promise': Promise,
'Strophe': Strophe,
'_': _,
'f': f,
'b64_sha1': b64_sha1,
'dayjs': dayjs,
'sizzle': sizzle,

View File

@ -9,7 +9,7 @@
import converse from "./converse-core";
import sizzle from "sizzle";
const { Backbone, Promise, Strophe, $iq, utils, _, f } = converse.env;
const { Backbone, Promise, Strophe, $iq, utils, _ } = converse.env;
converse.plugins.add('converse-disco', {
@ -584,8 +584,8 @@ converse.plugins.add('converse-disco', {
entity.hasFeature(feature)
);
const result = await Promise.all(promises);
return f.filter(f.isObject, result);
},
return _.filter(result, _.isObject);
}
},
/**

View File

@ -19,7 +19,7 @@ const MUC_ROLE_WEIGHTS = {
'none': 2,
};
const { Strophe, Backbone, Promise, $iq, $build, $msg, $pres, sizzle, f, dayjs, _ } = converse.env;
const { Strophe, Backbone, Promise, $iq, $build, $msg, $pres, sizzle, dayjs, _ } = converse.env;
// Add Strophe Namespaces
Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC + "#admin");
@ -84,7 +84,7 @@ converse.plugins.add('converse-muc', {
const { _converse } = this.__super__,
groupchats = this.chatboxes.where({'type': _converse.CHATROOMS_TYPE});
_.each(groupchats, gc => u.safeSave(gc, {'connection_status': converse.ROOMSTATUS.DISCONNECTED}));
groupchats.forEach(gc => u.safeSave(gc, {'connection_status': converse.ROOMSTATUS.DISCONNECTED}));
this.__super__.tearDown.call(this, arguments);
},
@ -193,7 +193,7 @@ converse.plugins.add('converse-muc', {
'chat_state': undefined,
'connection_status': converse.ROOMSTATUS.DISCONNECTED,
'description': '',
'hidden': _.includes(['mobile', 'fullscreen'], _converse.view_mode),
'hidden': ['mobile', 'fullscreen'].includes(_converse.view_mode),
'message_type': 'groupchat',
'name': '',
'nick': _converse.xmppstatus.get('nickname') || _converse.nickname,
@ -248,16 +248,16 @@ converse.plugins.add('converse-muc', {
*/
const room_jid = this.get('jid');
this.removeHandlers();
this.presence_handler = _converse.connection.addHandler((stanza) => {
_.each(_.values(this.handlers.presence), (callback) => callback(stanza));
this.presence_handler = _converse.connection.addHandler(stanza => {
Object.values(this.handlers.presence).forEach(callback => callback(stanza));
this.onPresence(stanza);
return true;
},
null, 'presence', null, null, room_jid,
{'ignoreNamespaceFragment': true, 'matchBareFromJid': true}
);
this.message_handler = _converse.connection.addHandler((stanza) => {
_.each(_.values(this.handlers.message), (callback) => callback(stanza));
this.message_handler = _converse.connection.addHandler(stanza => {
Object.values(this.handlers.message).forEach(callback => callback(stanza));
this.onMessage(stanza);
return true;
}, null, 'message', 'groupchat', null, room_jid,
@ -720,11 +720,11 @@ converse.plugins.add('converse-muc', {
* groupchat configuration.
* The second is the response IQ from the server.
*/
sendConfiguration (config, callback, errback) {
sendConfiguration (config=[], callback, errback) {
const iq = $iq({to: this.get('jid'), type: "set"})
.c("query", {xmlns: Strophe.NS.MUC_OWNER})
.c("x", {xmlns: Strophe.NS.XFORM, type: "submit"});
_.each(config || [], function (node) { iq.cnode(node).up(); });
config.forEach(node => iq.cnode(node).up());
callback = _.isUndefined(callback) ? _.noop : _.partial(callback, iq.nodeTree);
errback = _.isUndefined(errback) ? _.noop : _.partial(errback, iq.nodeTree);
return _converse.api.sendIQ(iq).then(callback).catch(errback);
@ -818,7 +818,7 @@ converse.plugins.add('converse-muc', {
* a string if only one affiliation.
* @param { function } deltaFunc - The function to compute the delta
* between old and new member lists.
* @returns { promise }
* @returns { promise }
* A promise which is resolved once the list has been
* updated or once it's been established there's no need
* to update the list.
@ -952,7 +952,8 @@ converse.plugins.add('converse-muc', {
'states': [],
'show': type !== 'unavailable' ? 'online' : 'offline'
};
_.each(pres.childNodes, function (child) {
pres.childNodes.forEach(child => {
switch (child.nodeName) {
case "status":
data.status = child.textContent || null;
@ -962,7 +963,7 @@ converse.plugins.add('converse-muc', {
break;
case "x":
if (child.getAttribute("xmlns") === Strophe.NS.MUC_USER) {
_.each(child.childNodes, function (item) {
child.childNodes.forEach(item => {
switch (item.nodeName) {
case "item":
data.affiliation = item.getAttribute("affiliation");
@ -1309,18 +1310,18 @@ converse.plugins.add('converse-muc', {
const new_jids = new_members.map(m => m.jid).filter(m => !_.isUndefined(m)),
new_nicks = new_members.map(m => !m.jid && m.nick || undefined).filter(m => !_.isUndefined(m)),
removed_members = this.filter(m => {
return f.includes(m.get('affiliation'), ['admin', 'member', 'owner']) &&
!f.includes(m.get('nick'), new_nicks) &&
!f.includes(m.get('jid'), new_jids);
return ['admin', 'member', 'owner'].includes(m.get('affiliation')) &&
!new_nicks.includes(m.get('nick')) &&
!new_jids.includes(m.get('jid'));
});
_.each(removed_members, (occupant) => {
removed_members.forEach(occupant => {
if (occupant.get('jid') === _converse.bare_jid) { return; }
if (occupant.get('show') === 'offline') {
occupant.destroy();
}
});
_.each(new_members, (attrs) => {
new_members.forEach(attrs => {
let occupant;
if (attrs.jid) {
occupant = this.findOccupant({'jid': attrs.jid});
@ -1447,7 +1448,7 @@ converse.plugins.add('converse-muc', {
* of strings (groupchat JIDs) or objects (with groupchat JID and other
* settings).
*/
_.each(_converse.auto_join_rooms, function (groupchat) {
_converse.auto_join_rooms.forEach(groupchat => {
if (_converse.chatboxes.where({'jid': groupchat}).length) {
return;
}

View File

@ -7,7 +7,7 @@
import "./converse-disco";
import converse from "./converse-core";
const { Strophe, Backbone, Promise, $iq, $build, $msg, $pres, f, dayjs, _ } = converse.env;
const { Strophe, Backbone, Promise, $iq, $build, $msg, $pres, dayjs, _ } = converse.env;
Strophe.addNamespace('PUBSUB_ERROR', Strophe.NS.PUBSUB+"#errors");

View File

@ -1,4 +0,0 @@
define(['lodash', './3rdparty/lodash.fp'], function (_, lodashConverter) {
var fp = lodashConverter(_.runInContext());
return fp;
});

View File

@ -144,7 +144,7 @@ u.applyUserSettings = function applyUserSettings (context, settings, user_settin
if (_.isUndefined(user_settings[k])) {
continue;
}
if (_.isObject(settings[k]) && !_.isArray(settings[k])) {
if (_.isObject(settings[k]) && !Array.isArray(settings[k])) {
applyUserSettings(context[k], settings[k], user_settings[k]);
} else {
context[k] = user_settings[k];

View File

@ -203,7 +203,7 @@ u.getEmojisByCategory = function (_converse) {
* lists of emojis in that category as values.
*/
if (_.isUndefined(_converse.emojis_by_category)) {
const emojis = _.values(_.mapValues(emoji_list, function (value, key, o) {
const emojis = Object.values(_.mapValues(emoji_list, function (value, key, o) {
value._shortname = key;
return value
}));