Moved non-helper code out of helpers

- the helper dir also contained some code used with helpers - utils and helper-helpers?
- the goal here was for helpers to be the only thing in their folder so we can look at moving them out
- all other code has been moved to services/themes for now, which is not the right place either
- services/themes is a catch-all for theme storage, loading, validation, rendering and more, needs to be broken down
This commit is contained in:
Hannah Wolfe 2020-04-08 19:02:31 +01:00
parent f3ed965987
commit 59b9f161dd
14 changed files with 77 additions and 72 deletions

View File

@ -1,10 +1,4 @@
const register = require('./register');
const coreHelpers = {}; const coreHelpers = {};
const registerThemeHelper = register.registerThemeHelper;
const registerAsyncThemeHelper = register.registerAsyncThemeHelper;
let registerAllCoreHelpers;
coreHelpers.asset = require('./asset'); coreHelpers.asset = require('./asset');
coreHelpers.author = require('./author'); coreHelpers.author = require('./author');
@ -45,49 +39,4 @@ coreHelpers.title = require('./title');
coreHelpers.twitter_url = require('./twitter_url'); coreHelpers.twitter_url = require('./twitter_url');
coreHelpers.url = require('./url'); coreHelpers.url = require('./url');
registerAllCoreHelpers = function registerAllCoreHelpers() {
// Register theme helpers
registerThemeHelper('asset', coreHelpers.asset);
registerThemeHelper('author', coreHelpers.author);
registerThemeHelper('authors', coreHelpers.authors);
registerThemeHelper('body_class', coreHelpers.body_class);
registerThemeHelper('cancel_link', coreHelpers.cancel_link);
registerThemeHelper('concat', coreHelpers.concat);
registerThemeHelper('content', coreHelpers.content);
registerThemeHelper('date', coreHelpers.date);
registerThemeHelper('encode', coreHelpers.encode);
registerThemeHelper('excerpt', coreHelpers.excerpt);
registerThemeHelper('foreach', coreHelpers.foreach);
registerThemeHelper('ghost_foot', coreHelpers.ghost_foot);
registerThemeHelper('has', coreHelpers.has);
registerThemeHelper('is', coreHelpers.is);
registerThemeHelper('img_url', coreHelpers.img_url);
registerThemeHelper('lang', coreHelpers.lang);
registerThemeHelper('link', coreHelpers.link);
registerThemeHelper('link_class', coreHelpers.link_class);
registerThemeHelper('meta_description', coreHelpers.meta_description);
registerThemeHelper('meta_title', coreHelpers.meta_title);
registerThemeHelper('navigation', coreHelpers.navigation);
registerThemeHelper('page_url', coreHelpers.page_url);
registerThemeHelper('pagination', coreHelpers.pagination);
registerThemeHelper('plural', coreHelpers.plural);
registerThemeHelper('post_class', coreHelpers.post_class);
registerThemeHelper('price', coreHelpers.price);
registerThemeHelper('raw', coreHelpers.raw);
registerThemeHelper('reading_time', coreHelpers.reading_time);
registerThemeHelper('t', coreHelpers.t);
registerThemeHelper('tags', coreHelpers.tags);
registerThemeHelper('title', coreHelpers.title);
registerThemeHelper('twitter_url', coreHelpers.twitter_url);
registerThemeHelper('facebook_url', coreHelpers.facebook_url);
registerThemeHelper('url', coreHelpers.url);
// Async theme helpers
registerAsyncThemeHelper('ghost_head', coreHelpers.ghost_head);
registerAsyncThemeHelper('next_post', coreHelpers.next_post);
registerAsyncThemeHelper('prev_post', coreHelpers.prev_post);
registerAsyncThemeHelper('get', coreHelpers.get);
};
module.exports = coreHelpers; module.exports = coreHelpers;
module.exports.loadCoreHelpers = registerAllCoreHelpers;

View File

@ -1,7 +1,7 @@
// # link helper // # link helper
const _ = require('lodash'); const _ = require('lodash');
const {config, SafeString, errors, i18n} = require('../services/proxy'); const {config, SafeString, errors, i18n, localUtils} = require('../services/proxy');
const {buildLinkClasses} = require('./utils'); const {buildLinkClasses} = localUtils;
const managedAttributes = ['href', 'class', 'activeClass', 'parentActiveClass']; const managedAttributes = ['href', 'class', 'activeClass', 'parentActiveClass'];

View File

@ -1,7 +1,7 @@
// # link_class helper // # link_class helper
const _ = require('lodash'); const _ = require('lodash');
const {config, SafeString, errors, i18n} = require('../services/proxy'); const {config, SafeString, errors, i18n, localUtils} = require('../services/proxy');
const {buildLinkClasses} = require('./utils'); const {buildLinkClasses} = localUtils;
module.exports = function link_class(options) { // eslint-disable-line camelcase module.exports = function link_class(options) { // eslint-disable-line camelcase
options = options || {}; options = options || {};

View File

@ -1,4 +1,4 @@
const helpers = require('../../helpers/register'); const helpers = require('../../services/themes/handlebars/register');
const routingService = require('../../services/routing'); const routingService = require('../../services/routing');
module.exports.getInstance = function getInstance() { module.exports.getInstance = function getInstance() {

View File

@ -57,12 +57,12 @@ module.exports = {
}, },
// The local template thing, should this be merged with the channels one? // The local template thing, should this be merged with the channels one?
templates: require('../helpers/template'), templates: require('./themes/handlebars/template'),
// Various utils, needs cleaning up / simplifying // Various utils, needs cleaning up / simplifying
socialUrls: require('@tryghost/social-urls'), socialUrls: require('@tryghost/social-urls'),
blogIcon: require('../../server/lib/image/blog-icon'), blogIcon: require('../../server/lib/image/blog-icon'),
urlService: require('./url'), urlService: require('./url'),
urlUtils: require('../../server/lib/url-utils'), urlUtils: require('../../server/lib/url-utils'),
localUtils: require('../helpers/utils') localUtils: require('./themes/handlebars/utils')
}; };

View File

@ -0,0 +1,53 @@
const register = require('./register');
const coreHelpers = require('../../../helpers');
const registerThemeHelper = register.registerThemeHelper;
const registerAsyncThemeHelper = register.registerAsyncThemeHelper;
let registerAllCoreHelpers;
registerAllCoreHelpers = function registerAllCoreHelpers() {
// Register theme helpers
registerThemeHelper('asset', coreHelpers.asset);
registerThemeHelper('author', coreHelpers.author);
registerThemeHelper('authors', coreHelpers.authors);
registerThemeHelper('body_class', coreHelpers.body_class);
registerThemeHelper('cancel_link', coreHelpers.cancel_link);
registerThemeHelper('concat', coreHelpers.concat);
registerThemeHelper('content', coreHelpers.content);
registerThemeHelper('date', coreHelpers.date);
registerThemeHelper('encode', coreHelpers.encode);
registerThemeHelper('excerpt', coreHelpers.excerpt);
registerThemeHelper('foreach', coreHelpers.foreach);
registerThemeHelper('ghost_foot', coreHelpers.ghost_foot);
registerThemeHelper('has', coreHelpers.has);
registerThemeHelper('is', coreHelpers.is);
registerThemeHelper('img_url', coreHelpers.img_url);
registerThemeHelper('lang', coreHelpers.lang);
registerThemeHelper('link', coreHelpers.link);
registerThemeHelper('link_class', coreHelpers.link_class);
registerThemeHelper('meta_description', coreHelpers.meta_description);
registerThemeHelper('meta_title', coreHelpers.meta_title);
registerThemeHelper('navigation', coreHelpers.navigation);
registerThemeHelper('page_url', coreHelpers.page_url);
registerThemeHelper('pagination', coreHelpers.pagination);
registerThemeHelper('plural', coreHelpers.plural);
registerThemeHelper('post_class', coreHelpers.post_class);
registerThemeHelper('price', coreHelpers.price);
registerThemeHelper('raw', coreHelpers.raw);
registerThemeHelper('reading_time', coreHelpers.reading_time);
registerThemeHelper('t', coreHelpers.t);
registerThemeHelper('tags', coreHelpers.tags);
registerThemeHelper('title', coreHelpers.title);
registerThemeHelper('twitter_url', coreHelpers.twitter_url);
registerThemeHelper('facebook_url', coreHelpers.facebook_url);
registerThemeHelper('url', coreHelpers.url);
// Async theme helpers
registerAsyncThemeHelper('ghost_head', coreHelpers.ghost_head);
registerAsyncThemeHelper('next_post', coreHelpers.prev_post);
registerAsyncThemeHelper('prev_post', coreHelpers.prev_post);
registerAsyncThemeHelper('get', coreHelpers.get);
};
module.exports = coreHelpers;
module.exports.loadCoreHelpers = registerAllCoreHelpers;

View File

@ -1,5 +1,7 @@
const Promise = require('bluebird'); const Promise = require('bluebird');
const {config, hbs, errors, logging} = require('../services/proxy'); const hbs = require('../engine');
const config = require('../../../../server/config');
const {errors, logging} = require('../../../../server/lib/common');
// Register an async handlebars helper for a given handlebars instance // Register an async handlebars helper for a given handlebars instance
function asyncHelperWrapper(hbs, name, fn) { function asyncHelperWrapper(hbs, name, fn) {

View File

@ -2,8 +2,8 @@
const templates = {}; const templates = {};
const _ = require('lodash'); const _ = require('lodash');
const errors = require('@tryghost/errors'); const errors = require('@tryghost/errors');
const hbs = require('../services/themes/engine'); const hbs = require('../engine');
const i18n = require('../../server/lib/common/i18n'); const {i18n} = require('../../../../server/lib/common');
// Execute a template helper // Execute a template helper
// All template helpers are register as partial view. // All template helpers are register as partial view.

View File

@ -105,5 +105,6 @@ module.exports = {
}); });
}, },
storage: require('./storage'), storage: require('./storage'),
middleware: require('./middleware') middleware: require('./middleware'),
loadCoreHelpers: require('./handlebars/helpers').loadCoreHelpers
}; };

View File

@ -130,7 +130,7 @@ module.exports = function setupSiteApp(options = {}) {
// We do this here, at the top level, because helpers require so much stuff. // We do this here, at the top level, because helpers require so much stuff.
// Moving this to being inside themes, where it probably should be requires the proxy to be refactored // Moving this to being inside themes, where it probably should be requires the proxy to be refactored
// Else we end up with circular dependencies // Else we end up with circular dependencies
require('../../../frontend/helpers').loadCoreHelpers(); themeService.loadCoreHelpers();
debug('Helpers done'); debug('Helpers done');
// Members middleware // Members middleware

View File

@ -1,6 +1,6 @@
const should = require('should'), const should = require('should'),
sinon = require('sinon'), sinon = require('sinon'),
helpers = require('../../../../core/frontend/helpers/register'), helpers = require('../../../../core/frontend/services/themes/handlebars/register'),
AppProxy = require('../../../../core/frontend/services/apps/proxy'), AppProxy = require('../../../../core/frontend/services/apps/proxy'),
routing = require('../../../../core/frontend/services/routing'); routing = require('../../../../core/frontend/services/routing');

View File

@ -1,9 +1,9 @@
var should = require('should'), const should = require('should');
_ = require('lodash'), const _ = require('lodash');
hbs = require('../../../core/frontend/services/themes/engine'), const hbs = require('../../../../../core/frontend/services/themes/engine');
// Stuff we are testing // Stuff we are testing
helpers = require('../../../core/frontend/helpers'); const helpers = require('../../../../../core/frontend/helpers');
describe('Helpers', function () { describe('Helpers', function () {
var hbsHelpers = ['each', 'if', 'unless', 'with', 'helperMissing', 'blockHelperMissing', 'log', 'lookup', 'block', 'contentFor'], var hbsHelpers = ['each', 'if', 'unless', 'with', 'helperMissing', 'blockHelperMissing', 'log', 'lookup', 'block', 'contentFor'],

View File

@ -1,6 +1,6 @@
var should = require('should'), const should = require('should');
hbs = require('../../../core/frontend/services/themes/engine'), const hbs = require('../../../../../core/frontend/services/themes/engine');
template = require('../../../core/frontend/helpers/template'); const template = require('../../../../../core/frontend/services/themes/handlebars/template');
describe('Helpers Template', function () { describe('Helpers Template', function () {
it('can execute a template', function () { it('can execute a template', function () {