nodebb-plugin-facebook-post 1.0.12 → 1.0.14

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
@@ -135,6 +135,24 @@ function sanitizeExcerpt(text, maxLen) {
135
135
  return s.slice(0, Math.max(0, maxLen - 1)).trimEnd() + '…';
136
136
  }
137
137
 
138
+ function normalizeAllowedGroupsValue(value) {
139
+ if (!value) return '';
140
+ if (Array.isArray(value)) {
141
+ return value.map(String).map(v => v.trim()).filter(Boolean).join(',');
142
+ }
143
+ const s = String(value).trim();
144
+ if (!s) return '';
145
+ if (s.startsWith('[')) {
146
+ try {
147
+ const parsed = JSON.parse(s);
148
+ if (Array.isArray(parsed)) {
149
+ return parsed.map(String).map(v => v.trim()).filter(Boolean).join(',');
150
+ }
151
+ } catch (_) {}
152
+ }
153
+ return s;
154
+ }
155
+
138
156
  function parseAllowedGroupsList() {
139
157
  const s = trimStr(settings.allowedGroups);
140
158
  if (!s) return [];
@@ -333,6 +351,7 @@ Plugin.init = async function (params) {
333
351
  router.get('/api/admin/plugins/facebook-post', render);
334
352
 
335
353
  router.get('/api/facebook-post/can-post', middleware.ensureLoggedIn, async (req, res) => {
354
+ res.set('Cache-Control', 'no-store');
336
355
  try {
337
356
  await loadSettings();
338
357
  if (!settings.enabled) return res.json({ allowed: false, reason: 'disabled' });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-facebook-post",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "Auto-post new NodeBB topics to a fixed Facebook Page (text + NodeBB uploads + place id).",
5
5
  "main": "library.js",
6
6
  "dependencies": {
@@ -4,7 +4,10 @@
4
4
  (function () {
5
5
  async function canPost() {
6
6
  try {
7
- const res = await fetch('/api/facebook-post/can-post', { credentials: 'same-origin' });
7
+ const res = await fetch('/api/facebook-post/can-post?_=' + Date.now(), {
8
+ credentials: 'same-origin',
9
+ cache: 'no-store',
10
+ });
8
11
  if (!res.ok) return { allowed: false };
9
12
  return await res.json();
10
13
  } catch {
@@ -13,7 +16,6 @@
13
16
  }
14
17
 
15
18
  function injectUI($composer) {
16
- if (!$composer || !$composer.length) return;
17
19
  if ($composer.find('[data-fbpost-wrap]').length) return;
18
20
 
19
21
  const html = `
@@ -35,12 +37,7 @@
35
37
  </div>
36
38
  `;
37
39
 
38
- // More robust placement across themes
39
- const $targets = $composer.find(
40
- '.composer-body, .composer-content, .write, .composer .write, .composer .composer-body, .composer .composer-content'
41
- );
42
- const $target = $targets.first();
43
-
40
+ const $target = $composer.find('.write, .composer-body, .composer-content').first();
44
41
  if ($target.length) $target.prepend(html);
45
42
  else $composer.prepend(html);
46
43
 
@@ -51,7 +48,6 @@
51
48
  $placeWrap.toggle($enabled.is(':checked'));
52
49
  });
53
50
 
54
- // Attach once per composer instance
55
51
  $(window).off('filter:composer.submit.fbpost')
56
52
  .on('filter:composer.submit.fbpost', function (ev2, submitData) {
57
53
  const enabled = $enabled.is(':checked');
@@ -66,23 +62,18 @@
66
62
  });
67
63
  }
68
64
 
69
- async function onComposerLoaded(ev, data) {
65
+ $(window).on('action:composer.loaded', async function (ev, data) {
70
66
  try {
71
- const $composer = $(data && data.composer ? data.composer : $('.composer')).first();
72
- if (!$composer.length) return;
67
+ const $composer = data && data.composer ? $(data.composer) : $('.composer');
68
+ if (!$composer || !$composer.length) return;
73
69
 
74
70
  const perm = await canPost();
75
71
  if (!perm.allowed) return;
76
72
 
77
- // Defer injection slightly (composer DOM may still be mounting)
78
- setTimeout(() => injectUI($composer), 0);
73
+ injectUI($composer);
79
74
  } catch {
80
75
  // ignore
81
76
  }
82
- }
83
-
84
- $(window).on('action:composer.loaded', onComposerLoaded);
85
-
86
- // Some themes trigger different events; listen to opened as well.
87
- $(window).on('action:composer.opened', onComposerLoaded);
77
+ });
88
78
  })();
79
+