Ghost/core/frontend/helpers/authors.js
Hannah Wolfe 658a6dd284 Cleaned all usages of proxy in helpers
- the proxy should always be used to access other parts of Ghost, including the urlService etc
- use consistent ES6 style for requires
- minimise use of lodash where possible
- remove circular dependency between proxy and template util
- End goal here is to enforce that the only link between helpers + the rest of Ghost is the proxy
2020-03-31 12:42:15 +01:00

57 lines
1.7 KiB
JavaScript

'use strict';
// # Authors Helper
// Usage: `{{authors}}`, `{{authors separator=' - '}}`
//
// Returns a string of the authors on the post.
// By default, authors are separated by commas.
//
// Note that the standard {{#each authors}} implementation is unaffected by this helper.
const _ = require('lodash');
const {SafeString, templates, urlService} = require('./proxy');
const ghostHelperUtils = require('@tryghost/helpers').utils;
module.exports = function authors(options = {}) {
options.hash = options.hash || {};
let {
autolink,
separator = ', ',
prefix = '',
suffix = '',
limit,
visibility,
from = 1,
to
} = options.hash;
let output = '';
autolink = !(_.isString(autolink) && autolink === 'false');
limit = limit ? parseInt(limit, 10) : limit;
from = from ? parseInt(from, 10) : from;
to = to ? parseInt(to, 10) : to;
function createAuthorsList(authors) {
function processAuthor(author) {
return autolink ? templates.link({
url: urlService.getUrlByResourceId(author.id, {withSubdirectory: true}),
text: _.escape(author.name)
}) : _.escape(author.name);
}
return ghostHelperUtils.visibility.filter(authors, visibility, processAuthor);
}
if (this.authors && this.authors.length) {
output = createAuthorsList(this.authors);
from -= 1; // From uses 1-indexed, but array uses 0-indexed.
to = to || limit + from || output.length;
output = output.slice(from, to).join(separator);
}
if (output) {
output = prefix + output + suffix;
}
return new SafeString(output);
};