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 +19 -0
- package/package.json +1 -1
- package/static/lib/composer.js +11 -20
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
package/static/lib/composer.js
CHANGED
|
@@ -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', {
|
|
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
|
-
|
|
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
|
|
65
|
+
$(window).on('action:composer.loaded', async function (ev, data) {
|
|
70
66
|
try {
|
|
71
|
-
const $composer =
|
|
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
|
-
|
|
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
|
+
|