From 57bd929d2c681f4b3d43644e5aeb03b420ff75e7 Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Mon, 21 Oct 2013 16:59:37 +0000 Subject: [PATCH] Allow themes to provide custom error template. fixes #1212, #1213 --- core/server.js | 3 +++ core/server/errorHandling.js | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/core/server.js b/core/server.js index d74f56a0b0..874f61112a 100644 --- a/core/server.js +++ b/core/server.js @@ -198,6 +198,9 @@ function activateTheme() { if (stackLocation) { server.stack[stackLocation].handle = whenEnabled(server.get('activeTheme'), middleware.staticTheme(ghost)); } + + // Update user error template + errors.updateActiveTheme(ghost.settings('activeTheme')); } // ### ManageAdminAndTheme Middleware diff --git a/core/server/errorHandling.js b/core/server/errorHandling.js index 71e8930bdb..07de72d232 100644 --- a/core/server/errorHandling.js +++ b/core/server/errorHandling.js @@ -6,17 +6,22 @@ var _ = require('underscore'), errors, // Paths for views - appRoot = path.resolve(__dirname, '../'), - themePath = path.resolve(appRoot + '/content/themes'), - adminTemplatePath = path.resolve(appRoot + '/server/views/'), - defaultErrorTemplatePath = path.resolve(adminTemplatePath + '/user-error.hbs'), - userErrorTemplatePath = path.resolve(themePath + '/error.hbs'), + appRoot = path.resolve(__dirname, '..', '..'), + themePath = path.resolve(appRoot, 'content', 'themes'), + adminTemplatePath = path.resolve(appRoot, 'core', 'server', 'views'), + defaultErrorTemplatePath = path.resolve(adminTemplatePath, 'user-error.hbs'), + userErrorTemplatePath = path.resolve(themePath, 'error.hbs'), userErrorTemplateExists; /** * Basic error handling helpers */ errors = { + updateActiveTheme: function (activeTheme) { + userErrorTemplatePath = path.resolve(themePath, activeTheme, 'error.hbs'); + userErrorTemplateExists = undefined; + }, + throwError: function (err) { if (!err) { err = new Error("An error occurred"); @@ -104,7 +109,7 @@ errors = { renderErrorPage: function (code, err, req, res, next) { function parseStack(stack) { - if (typeof stack !== 'string') { + if (_.isString(stack)) { return stack; } @@ -208,4 +213,4 @@ _.bindAll( 'error500' ); -module.exports = errors; \ No newline at end of file +module.exports = errors;