rittenhop-dev/versions/5.94.2/core/frontend/helpers/comments.js
2024-09-23 19:40:12 -04:00

79 lines
2.4 KiB
JavaScript

const {SafeString} = require('../services/handlebars');
const {labs, urlUtils, getFrontendKey, settingsCache} = require('../services/proxy');
const {getFrontendAppConfig, getDataAttributes} = require('../utils/frontend-apps');
module.exports = async function comments(options) {
// todo: For now check on the comment id to exclude normal pages (we probably have a better way to do this)
const commentId = this.comment_id;
if (!commentId) {
return;
}
/**
* We need to check if comments enabled, because the theme might not be using the other available helpers to check
* if comments is enabled + the member has access
* @type {'all'|'paid'|'off'}
*/
const commentsEnabled = settingsCache.get('comments_enabled');
const hasAccess = !!this.access;
if (commentsEnabled === 'off' || !hasAccess) {
return;
}
let colorScheme = 'auto';
if (options.hash.mode === 'dark' || options.hash.mode === 'light') {
colorScheme = options.hash.mode;
}
let avatarSaturation = parseInt(options.hash.saturation);
if (isNaN(avatarSaturation)) {
avatarSaturation = 60;
}
let count = true;
if (options.hash.count === false) {
count = false;
}
// This is null so that the comments-ui can handle the default title
let title = null;
if (typeof options.hash.title === 'string') {
title = options.hash.title;
}
let accentColor = '';
if (options.data.site.accent_color) {
accentColor = options.data.site.accent_color;
}
const frontendKey = await getFrontendKey();
const {scriptUrl} = getFrontendAppConfig('comments');
const data = {
locale: labs.isSet('i18n') ? (settingsCache.get('locale') || 'en') : undefined,
'ghost-comments': urlUtils.getSiteUrl(),
api: urlUtils.urlFor('api', {type: 'content'}, true),
admin: urlUtils.urlFor('admin', true),
key: frontendKey,
title: title,
count: count,
'post-id': this.id,
'color-scheme': colorScheme,
'avatar-saturation': avatarSaturation,
'accent-color': accentColor,
'comments-enabled': commentsEnabled,
publication: settingsCache.get('title')
};
const dataAttributes = getDataAttributes(data);
return new SafeString(`
<script defer src="${scriptUrl}" ${dataAttributes} crossorigin="anonymous"></script>
`);
};
module.exports.async = true;