Commit 6193a9dc authored by JC Brand's avatar JC Brand

Replace lodash methods with native ones and remove lodash.fp

parent b1ef3f5b
......@@ -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();
......
......@@ -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();
}));
......
......@@ -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);
......
......@@ -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";
......
......@@ -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) {
......
This diff is collapsed.
......@@ -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;
}
......
......@@ -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"],
......
......@@ -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', '');
......
......@@ -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;
......
This diff is collapsed.
......@@ -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";
......
......@@ -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,
......
......@@ -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);
}
},
/**
......
......@@ -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;
}
......
......@@ -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");
......
define(['lodash', './3rdparty/lodash.fp'], function (_, lodashConverter) {
var fp = lodashConverter(_.runInContext());
return fp;
});
......@@ -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];
......
......@@ -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
}));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment