mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
no issue ATM users have to add logic to their themes in order to automatically hide restricted content. The {{content}} helper is updated to return a default CTA box instead of the post content for restricted posts with default static text using site's accent color and opening Portal for relevant action. This is currently behind the dev experiment flag. - Adds new default content helper template in case of restricted content - Updates content helper to trigger new CTA template in case of restricted content
56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
// # Content Helper
|
|
// Usage: `{{content}}`, `{{content words="20"}}`, `{{content characters="256"}}`
|
|
//
|
|
// Turns content html into a safestring so that the user doesn't have to
|
|
// escape it or tell handlebars to leave it alone with a triple-brace.
|
|
//
|
|
// Enables tag-safe truncation of content by characters or words.
|
|
//
|
|
// Dev flag feature: In case of restricted content access for member-only posts, shows CTA box
|
|
|
|
const {templates, hbs, config, SafeString} = require('../services/proxy');
|
|
const downsize = require('downsize');
|
|
const _ = require('lodash');
|
|
const createFrame = hbs.handlebars.createFrame;
|
|
|
|
function restrictedCta(options) {
|
|
options = options || {};
|
|
options.data = options.data || {};
|
|
_.merge(this, {
|
|
accentColor: (options.data.site && options.data.site.accent_color) || '#3db0ef'
|
|
});
|
|
const data = createFrame(options.data);
|
|
return templates.execute('content', this, {data});
|
|
}
|
|
|
|
module.exports = function content(options = {}) {
|
|
let self = this;
|
|
let args = arguments;
|
|
|
|
const hash = options.hash || {};
|
|
const truncateOptions = {};
|
|
let runTruncate = false;
|
|
|
|
for (const key of ['words', 'characters']) {
|
|
if (Object.prototype.hasOwnProperty.call(hash, key)) {
|
|
runTruncate = true;
|
|
truncateOptions[key] = parseInt(hash[key], 10);
|
|
}
|
|
}
|
|
|
|
if (this.html === null) {
|
|
this.html = '';
|
|
}
|
|
|
|
if (!this.access && !!config.get('enableDeveloperExperiments')) {
|
|
return restrictedCta.apply(self, args);
|
|
}
|
|
|
|
if (runTruncate) {
|
|
return new SafeString(
|
|
downsize(this.html, truncateOptions)
|
|
);
|
|
}
|
|
|
|
return new SafeString(this.html);
|
|
};
|