nodebb-plugin-mentions 4.8.13 → 4.8.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/library.js CHANGED
@@ -607,8 +607,10 @@ SocketPlugins.mentions.listGroups = async function () {
607
607
  const noMentionGroups = await getNoMentionGroups();
608
608
  const filteredGroups = groups.filter(g => g && !noMentionGroups.includes(g))
609
609
  .map(g => validator.escape(String(g)));
610
-
611
- return filteredGroups;
610
+ const fields = ['name', 'slug', 'icon', 'memberCount', 'labelColor', 'textColor'];
611
+ return (await Groups.getGroupsFields(filteredGroups, fields))
612
+ .filter(g => g && g.name && g.slug)
613
+ .map(g => ({ ..._.pick(g, fields), isGroup: true }));
612
614
  };
613
615
 
614
616
  SocketPlugins.mentions.userSearch = async (socket, data) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-mentions",
3
- "version": "4.8.13",
3
+ "version": "4.8.15",
4
4
  "description": "NodeBB Plugin that allows users to mention other users by prepending an '@' sign to their username",
5
5
  "main": "library.js",
6
6
  "repository": {
@@ -24,6 +24,7 @@ $(document).ready(function () {
24
24
  if (!categoryList) {
25
25
  loadCategoryList();
26
26
  }
27
+
27
28
  let slugify;
28
29
  const strategy = {
29
30
  match: /\B@([^\s\n]*)?$/,
@@ -62,8 +63,7 @@ $(document).ready(function () {
62
63
  const groupMentions = groupList.filter(
63
64
  group => group.name.toLocaleLowerCase().startsWith(termLowerCase) ||
64
65
  group.slug.startsWith(termLowerCase)
65
- ).sort((a, b) =>a.name.toLocaleLowerCase() > b.name.toLocaleLowerCase() ? 1 : -1)
66
- .map(group => group.name);
66
+ ).sort((a, b) => a.name.toLocaleLowerCase() > b.name.toLocaleLowerCase() ? 1 : -1);
67
67
 
68
68
  // Add group mentions at the bottom of dropdown
69
69
  callback([...users, ...groupMentions]);
@@ -77,6 +77,8 @@ $(document).ready(function () {
77
77
  return `@${mention.userslug} `;
78
78
  } else if (mention.cid) {
79
79
  return `@${utils.isNumber(mention.cid) ? mention.handle : mention.slug} `;
80
+ } else if (mention.isGroup) {
81
+ return `@${slugify(mention.name, true)} `;
80
82
  } else if (mention) {
81
83
  return `@${slugify(mention, true)} `;
82
84
  }
@@ -119,6 +121,14 @@ $(document).ready(function () {
119
121
  const avatar = helpers.buildCategoryIcon(entry, '24px', 'rounded-circle');
120
122
  return `${avatar} ${entry.name}${!utils.isNumber(entry.cid) ? ` (${entry.slug})` : ''}`;
121
123
  }
124
+ case entry.isGroup: {
125
+ const icon = helpers.buildCategoryIcon({
126
+ icon: entry.icon || 'fa-users',
127
+ bgColor: entry.labelColor,
128
+ color: entry.textColor,
129
+ }, '24px', 'rounded-circle');
130
+ return `${icon} ${entry.name} <span class="text-sm text-secondary">(${entry.memberCountText})</span>`;
131
+ }
122
132
 
123
133
  default:
124
134
  return entry.hasOwnProperty('name') ? entry.name : entry;
@@ -158,14 +168,14 @@ $(document).ready(function () {
158
168
  });
159
169
  }
160
170
 
161
- function loadGroupList() {
162
- socket.emit('plugins.mentions.listGroups', async function (err, groupNames) {
163
- if (err) {
164
- return showAlert('error', err.message);
165
- }
166
- const s = await app.require('slugify');
167
- groupList = groupNames.map(name => ({ name, slug: s(name) }));
168
- });
171
+ async function loadGroupList() {
172
+ groupList = await socket.emit('plugins.mentions.listGroups');
173
+ const [translator, helpers] = await app.require(['translator', 'helpers']);
174
+ await Promise.all(groupList.map(async (group) => {
175
+ group.memberCount = 12312313;
176
+ const key = translator.compile('groups:x-members', helpers.formattedNumber(group.memberCount));
177
+ group.memberCountText = await translator.translate(key);
178
+ }));
169
179
  }
170
180
 
171
181
  function loadCategoryList() {