Skip to content

Instantly share code, notes, and snippets.

@Lerg
Last active September 3, 2021 08:18
Show Gist options
  • Save Lerg/fc2c412d59347c870aa1 to your computer and use it in GitHub Desktop.
Save Lerg/fc2c412d59347c870aa1 to your computer and use it in GitHub Desktop.
Manual preview cut for {{content}} helper in Ghost platform
// ### Content Helper
//
// *Usage example:*
// `{{content}}`
// `{{content words="20"}}`
// `{{content characters="256"}}`
// `{{content preview="true"}}`
//
// 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.
//
// If preview option is used then only the content before <!--preview--> is returned.
//
// **returns** SafeString content html, complete or truncated.
//
coreHelpers.content = function (options) {
var truncateOptions = (options || {}).hash || {};
truncateOptions = _.pick(truncateOptions, ['words', 'characters', 'preview']);
_.keys(truncateOptions).map(function (key) {
truncateOptions[key] = parseInt(truncateOptions[key], 10);
});
if (truncateOptions.hasOwnProperty('words') || truncateOptions.hasOwnProperty('characters')) {
// Due to weirdness in downsize the 'words' option
// must be passed as a string. refer to #1796
// TODO: when downsize fixes this quirk remove this hack.
if (truncateOptions.hasOwnProperty('words')) {
truncateOptions.words = truncateOptions.words.toString();
}
return new hbs.handlebars.SafeString(
downsize(this.html, truncateOptions)
);
} else if (truncateOptions.hasOwnProperty('preview')) {
var split = this.html.split('<!--preview-->', 2)
var output = split[0]
if (split[1]) {
output += '<div class="continue">● ● ●</div>'
}
return new hbs.handlebars.SafeString(output)
}
return new hbs.handlebars.SafeString(this.html);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment