mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-20 22:42:53 -05:00
0c097f6532
refs https://github.com/TryGhost/Toolbox/issues/332 - After removing the concept of a boolean "page: true" from the page/post resources frontend resource rendering didn't have enough information to pick the correct template - Resolved this issue through passing of additional "context" to the template picker. Something nicer should be worked on in the future, as context pattern feels dirty here.
45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
// # Body Class Helper
|
|
// Usage: `{{body_class}}`
|
|
//
|
|
// Output classes for the body element
|
|
const {SafeString} = require('../services/handlebars');
|
|
|
|
// We use the name body_class to match the helper for consistency
|
|
module.exports = function body_class(options) { // eslint-disable-line camelcase
|
|
let classes = [];
|
|
const context = options.data.root.context || [];
|
|
const obj = this.post || this.page;
|
|
const tags = obj && obj.tags ? obj.tags : [];
|
|
const isPage = !!(this.page);
|
|
|
|
if (context.includes('home')) {
|
|
classes.push('home-template');
|
|
} else if (context.includes('post') && obj && !isPage) {
|
|
classes.push('post-template');
|
|
} else if (context.includes('page') && obj && isPage) {
|
|
classes.push('page-template');
|
|
classes.push(`page-${obj.slug}`);
|
|
} else if (context.includes('tag') && this.tag) {
|
|
classes.push('tag-template');
|
|
classes.push(`tag-${this.tag.slug}`);
|
|
} else if (context.includes('author') && this.author) {
|
|
classes.push('author-template');
|
|
classes.push(`author-${this.author.slug}`);
|
|
} else if (context.includes('private')) {
|
|
classes.push('private-template');
|
|
}
|
|
|
|
if (tags) {
|
|
classes = classes.concat(
|
|
tags.map(({slug}) => `tag-${slug}`)
|
|
);
|
|
}
|
|
|
|
if (context.includes('paged')) {
|
|
classes.push('paged');
|
|
}
|
|
|
|
classes = classes.join(' ').trim();
|
|
|
|
return new SafeString(classes);
|
|
};
|