mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-20 22:42:53 -05:00
9d7049cd3f
- The helper registration code is "framework" code and very specific - At the moment the "theme engine" is full of lots of disparate theme related stuff - I'm trying to make the frontend framework code clearer and also expand it to make it more useful - The helper system now also exposes 3 methods allowing you to register a directory, a helper or an alias - I've updated the codebase to use these both for our core helpers and for "apps"
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
const Promise = require('bluebird');
|
|
const errors = require('@tryghost/errors');
|
|
const logging = require('@tryghost/logging');
|
|
|
|
const {hbs} = require('../rendering');
|
|
|
|
// Register an async handlebars helper for a given handlebars instance
|
|
function asyncHelperWrapper(hbsInstance, name, fn) {
|
|
hbsInstance.registerAsyncHelper(name, function returnAsync(context, options, cb) {
|
|
// Handle the case where we only get context and cb
|
|
if (!cb) {
|
|
cb = options;
|
|
options = undefined;
|
|
}
|
|
|
|
// Wrap the function passed in with a Promise.resolve so it can return either a promise or a value
|
|
Promise.resolve(fn.call(this, context, options)).then(function asyncHelperSuccess(result) {
|
|
cb(result);
|
|
}).catch(function asyncHelperError(err) {
|
|
const wrappedErr = err instanceof errors.GhostError ? err : new errors.IncorrectUsageError({
|
|
err: err,
|
|
context: 'registerAsyncThemeHelper: ' + name,
|
|
errorDetails: {
|
|
originalError: err
|
|
}
|
|
});
|
|
|
|
const result = process.env.NODE_ENV === 'development' ? wrappedErr : '';
|
|
|
|
logging.error(wrappedErr);
|
|
|
|
cb(new hbsInstance.SafeString(result));
|
|
});
|
|
});
|
|
}
|
|
|
|
// Register a handlebars helper for themes
|
|
module.exports.registerThemeHelper = function registerThemeHelper(name, fn) {
|
|
hbs.registerHelper(name, fn);
|
|
};
|
|
|
|
// Register an async handlebars helper for themes
|
|
module.exports.registerAsyncThemeHelper = function registerAsyncThemeHelper(name, fn) {
|
|
asyncHelperWrapper(hbs, name, fn);
|
|
};
|