Ghost/core/server/helpers/meta_title.js
Markus Siemens c5fe9aa99f Rewrite meta_description and meta_title to depend upon the current context
closes #4850

- fixed `meta_description` and `meta_title` when used within a `{{#foreach}}`
- `meta_description` and `meta_title` now depend upon the current context
  to get the right string (author bio, tag description, ...).
  Note: `ghost_head.js` and `ghost_head_spec.js` have been touched to add
  the required context information when calling the helpers.
2015-03-24 22:42:45 +01:00

47 lines
1.4 KiB
JavaScript

// # Meta Title Helper
// Usage: `{{meta_title}}`
//
// Page title used for sharing and SEO
//
// We use the name meta_title to match the helper for consistency:
// jscs:disable requireCamelCaseOrUpperCaseIdentifiers
var _ = require('lodash'),
config = require('../config'),
filters = require('../filters'),
meta_title;
meta_title = function (options) {
/*jshint unused:false*/
var title = '',
context = options.data.root.context,
blog = config.theme,
pagination = options.data.root.pagination,
pageString = '';
if (pagination && pagination.total > 1) {
pageString = ' - Page ' + pagination.page;
}
if (this.meta_title) {
title = this.meta_title; // E.g. in {{#foreach}}
} else if (_.contains(context, 'home')) {
title = blog.title;
} else if (_.contains(context, 'author') && this.author) {
title = this.author.name + pageString + ' - ' + blog.title;
} else if (_.contains(context, 'tag') && this.tag) {
title = this.tag.meta_title || this.tag.name + pageString + ' - ' + blog.title;
} else if (_.contains(context, 'post') && this.post) {
title = this.post.meta_title || this.post.title;
} else {
title = blog.title + pageString;
}
return filters.doFilter('meta_title', title).then(function (title) {
title = title || '';
return title.trim();
});
};
module.exports = meta_title;