nodebb-plugin-mentions 4.8.16 → 4.8.17

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
@@ -587,6 +587,10 @@ async function stripDisallowedFullnames(users) {
587
587
  */
588
588
 
589
589
  SocketPlugins.mentions.getTopicUsers = async (socket, data) => {
590
+ const canRead = await privileges.topics.can('read', data.tid, socket.uid);
591
+ if (!canRead) {
592
+ throw new Error('[[error:no-privileges]]');
593
+ }
590
594
  const uids = await Topics.getUids(data.tid);
591
595
  let users = await User.getUsers(uids);
592
596
  users = users.filter(u => u && u.userslug);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-mentions",
3
- "version": "4.8.16",
3
+ "version": "4.8.17",
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": {
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "html-entities": "^2.3.2",
29
- "lodash": "4.17.21",
29
+ "lodash": "4.17.23",
30
30
  "validator": "^13.0.0"
31
31
  },
32
32
  "devDependencies": {
@@ -2,10 +2,10 @@
2
2
  'use strict';
3
3
 
4
4
  $(document).ready(function () {
5
- let groupList = [];
5
+ let groupList;
6
+ let localUserList;
6
7
  let categoryList;
7
8
  const categorySlugMap = new Map();
8
- let localUserList = [];
9
9
  let helpers;
10
10
 
11
11
  function showAlert(type, message) {
@@ -15,15 +15,14 @@ $(document).ready(function () {
15
15
  }
16
16
 
17
17
  $(window).on('composer:autocomplete:init chat:autocomplete:init', function (ev, data) {
18
- loadTopicUsers(data.element);
19
-
20
- if (!groupList.length) {
21
- loadGroupList();
22
- }
23
-
24
- if (!categoryList) {
25
- loadCategoryList();
26
- }
18
+ // load the data for lists on focus of textarea element
19
+ data.element.one('focus', async function () {
20
+ await Promise.all([
21
+ loadTopicUsers(data.element),
22
+ groupList ? Promise.resolve() : loadGroupList(),
23
+ categoryList ? Promise.resolve() : loadCategoryList(),
24
+ ]);
25
+ });
27
26
 
28
27
  let slugify;
29
28
  const strategy = {
@@ -135,37 +134,31 @@ $(document).ready(function () {
135
134
  }
136
135
  }
137
136
 
138
- function loadTopicUsers(element) {
139
- require(['composer'], function (composer) {
140
- function findTid() {
141
- const composerEl = element.parents('.composer').get(0);
142
- if (composerEl) {
143
- const uuid = composerEl.getAttribute('data-uuid');
144
- const composerObj = composer.posts[uuid];
145
- if (composerObj && composerObj.tid) {
146
- return composerObj.tid;
147
- }
148
- }
149
- if (ajaxify.data.template.topic) {
150
- return ajaxify.data.tid;
137
+ async function loadTopicUsers(element) {
138
+ const composer = await app.require('composer');
139
+ function findTid() {
140
+ const composerEl = element.parents('.composer').get(0);
141
+ if (composerEl) {
142
+ const uuid = composerEl.getAttribute('data-uuid');
143
+ const composerObj = composer.posts[uuid];
144
+ if (composerObj && composerObj.tid) {
145
+ return composerObj.tid;
151
146
  }
152
- return null;
153
147
  }
154
-
155
- const tid = findTid();
156
- if (!tid) {
157
- localUserList = [];
158
- return;
148
+ if (ajaxify.data.template.topic) {
149
+ return ajaxify.data.tid;
159
150
  }
160
- socket.emit('plugins.mentions.getTopicUsers', {
161
- tid: tid,
162
- }, function (err, users) {
163
- if (err) {
164
- return showAlert('error', err);
165
- }
166
- localUserList = users;
167
- });
168
- });
151
+ return null;
152
+ }
153
+
154
+ const tid = findTid();
155
+ if (!tid) {
156
+ localUserList = [];
157
+ return;
158
+ }
159
+ localUserList = await socket.emit('plugins.mentions.getTopicUsers', {
160
+ tid: tid,
161
+ }).catch(err => showAlert('error', err));
169
162
  }
170
163
 
171
164
  async function loadGroupList() {
@@ -177,13 +170,12 @@ $(document).ready(function () {
177
170
  }));
178
171
  }
179
172
 
180
- function loadCategoryList() {
181
- require(['api'], async (api) => {
182
- const { categories } = await api.get('/categories');
183
- categoryList = categories;
184
- categories.forEach((category) => {
185
- categorySlugMap.set(category.name.toLowerCase(), category.handle);
186
- });
173
+ async function loadCategoryList() {
174
+ const api = await app.require('api');
175
+ const { categories } = await api.get('/categories');
176
+ categoryList = categories;
177
+ categories.forEach((category) => {
178
+ categorySlugMap.set(category.name.toLowerCase(), category.handle);
187
179
  });
188
180
  }
189
181
  });