nodebb-plugin-ezoic-infinite 0.9.13 → 0.9.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
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const meta = require.main.require('./src/meta');
4
+ const groups = require.main.require('./src/groups');
4
5
 
5
6
  const Plugin = {};
6
7
 
@@ -14,9 +15,31 @@ Plugin.init = async function (params) {
14
15
  async function renderAdmin(req, res) {
15
16
  const settings = await meta.settings.get('ezoic-infinite');
16
17
 
18
+ let groupNames = [];
19
+ // NodeBB versions differ on which sorted set exists; 0.9.6 style used these successfully
20
+ const candidates = ['groups:createtime', 'groups:visible:createtime', 'groups:system:createtime'];
21
+ for (const set of candidates) {
22
+ try {
23
+ groupNames = await groups.getGroupsFromSet(set, 0, -1);
24
+ if (Array.isArray(groupNames) && groupNames.length) break;
25
+ } catch (e) {}
26
+ }
27
+
28
+ let groupList = [];
29
+ try {
30
+ groupList = await groups.getGroupsData(groupNames);
31
+ } catch (e) {
32
+ groupList = (groupNames || []).map((name) => ({ name }));
33
+ }
34
+
35
+ groupList = (groupList || [])
36
+ .filter(g => g && g.name && typeof g.name === 'string')
37
+ .sort((a, b) => (a.name || '').localeCompare(b.name || '', 'fr', { sensitivity: 'base' }));
38
+
17
39
  res.render('admin/plugins/ezoic-infinite', {
18
40
  title: 'Ezoic - Publicités Infinite Scroll',
19
41
  settings,
42
+ groups: groupList,
20
43
  });
21
44
  }
22
45
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-ezoic-infinite",
3
- "version": "0.9.13",
3
+ "version": "0.9.15",
4
4
  "description": "Injection de publicités Ezoic entre les topics et entre les messages avec infinite scroll (NodeBB 4.x).",
5
5
  "main": "library.js",
6
6
  "license": "MIT",
package/public/admin.js CHANGED
@@ -17,67 +17,7 @@ $(document).ready(function () {
17
17
 
18
18
  form.find('[name="enableMessageAds"]').prop('checked', data.enableMessageAds === true || data.enableMessageAds === 'on');
19
19
  form.find('[name="messageIntervalPosts"]').val(parseInt(data.messageIntervalPosts, 10) || 3);
20
- form.find('[name="messagePlaceholderIds"]').val(data.messagePlaceholderIds || '');
21
-
22
- // Charger les groupes dynamiquement (NodeBB 4.x) - plusieurs fallbacks selon version
23
- (function loadGroups() {
24
- const $select = form.find('[name="excludedGroups"]');
25
- $select.empty();
26
-
27
- const selected = (data.excludedGroups || '').split(',').map(s => s.trim()).filter(Boolean);
28
-
29
- function renderGroups(list) {
30
- const names = (list || [])
31
- .map(g => (typeof g === 'string' ? g : (g && g.name)))
32
- .filter(Boolean)
33
- .sort((a, b) => a.localeCompare(b, 'fr', { sensitivity: 'base' }));
34
-
35
- names.forEach((name) => $select.append($('<option>').val(name).text(name)));
36
-
37
- $select.find('option').each(function () {
38
- $(this).prop('selected', selected.includes($(this).val()));
39
- });
40
- }
41
-
42
- function normalize(res) {
43
- if (!res) return null;
44
- if (Array.isArray(res)) return res;
45
- if (Array.isArray(res.groups)) return res.groups;
46
- if (Array.isArray(res.results)) return res.results;
47
- return null;
48
- }
49
-
50
- const events = [
51
- 'groups.getGroups',
52
- 'admin.groups.get',
53
- 'admin.groups.list',
54
- 'groups.list',
55
- ];
56
-
57
- (function tryNext(i) {
58
- if (i >= events.length) {
59
- // REST fallback
60
- try {
61
- const base = (window.config && window.config.relative_path) ? window.config.relative_path : '';
62
- $.get(base + '/api/groups', function (resp) {
63
- const list = normalize(resp) || normalize(resp && resp.response) || (resp && resp.groups) || [];
64
- if (Array.isArray(list) && list.length) return renderGroups(list);
65
- // If still empty, leave blank silently
66
- });
67
- } catch (e) {}
68
- return;
69
- }
70
-
71
- socket.emit(events[i], {}, function (err2, res) {
72
- const list = (!err2) ? normalize(res) : null;
73
- if (Array.isArray(list) && list.length) {
74
- return renderGroups(list);
75
- }
76
- tryNext(i + 1);
77
- });
78
- })(0);
79
- })();
80
- }
20
+ form.find('[name="messagePlaceholderIds"]').val(data.messagePlaceholderIds || ''); }
81
21
 
82
22
  const selected = (data.excludedGroups || '').split(',').map(s => s.trim()).filter(Boolean);
83
23
  $select.find('option').each(function () {
@@ -8,7 +8,10 @@
8
8
  <form role="form" class="ezoic-infinite-settings">
9
9
  <div class="mb-3">
10
10
  <label class="form-label">Groupes exclus (pas de pubs pour ces groupes)</label>
11
- <select multiple class="form-select" name="excludedGroups"></select>
11
+ <select multiple class="form-select" name="excludedGroups">
12
+ <!-- BEGIN groups -->
13
+ <option value="{groups.name}">{groups.name}</option>
14
+ <!-- END groups --></select>
12
15
  <div class="form-text">Maintenez Ctrl/Cmd pour sélectionner plusieurs groupes. Liste triée par ordre alphabétique.</div>
13
16
  </div>
14
17