]).pipe(through.obj(function ( file, enc, callback ) { var self = this, render = exprs_hbs.create(); registerThemeHelper('foreach', foreach); return render.express3({ "viewsDir": path.build(), "partialsDir": path.build('/partials'), "layoutDir": path.build('/layouts'), "defaultLayout": path.build('/layouts/default.hbs'), "extName": '.html' })(file.path, locals, function ( err, html ) { if (!!err) { throw new Error(err); } file.contents = new Buffer(html); self.push(file); return callback(); }); })).pipe(rename(function ( path ) {
}).then(function () { var adminHbs = hbs.create(); // Initialize Internationalization i18n.init(); // Output necessary notifications on init initNotifications(); // ##Configuration // return the correct mime type for woff files express['static'].mime.define({'application/font-woff': ['woff']}); // enabled gzip compression by default if (config.server.compress !== false) { blogApp.use(compress()); } // ## View engine // set the view engine blogApp.set('view engine', 'hbs'); // Create a hbs instance for admin and init view engine adminApp.set('view engine', 'hbs'); adminApp.engine('hbs', adminHbs.express3({})); // Load helpers helpers.loadCoreHelpers(adminHbs); // ## Middleware and Routing middleware(blogApp, adminApp); // Log all theme errors and warnings _.each(config.paths.availableThemes._messages.errors, function (error) { errors.logError(error.message, error.context, error.help); }); _.each(config.paths.availableThemes._messages.warns, function (warn) { errors.logWarn(warn.message, warn.context, warn.help); }); return new GhostServer(blogApp); });
}).then(function () { var adminHbs = hbs.create(); // ##Configuration // return the correct mime type for woff files express.static.mime.define({'application/font-woff': ['woff']}); // enabled gzip compression by default if (config.server.compress !== false) { blogApp.use(compress()); } // ## View engine // set the view engine blogApp.set('view engine', 'hbs'); // Create a hbs instance for admin and init view engine adminApp.set('view engine', 'hbs'); adminApp.engine('hbs', adminHbs.express3({})); // Load helpers helpers.loadCoreHelpers(adminHbs); // ## Middleware and Routing middleware(blogApp, adminApp); // Log all theme errors and warnings validateThemes(config.paths.themePath) .catch(function (result) { // TODO: change `result` to something better result.errors.forEach(function (err) { errors.logError(err.message, err.context, err.help); }); result.warnings.forEach(function (warn) { errors.logWarn(warn.message, warn.context, warn.help); }); }); return new GhostServer(blogApp); });
beforeEach(function (done) { var adminHbs = hbs.create(); helpers = rewire('../../server/helpers'); sandbox = sinon.sandbox.create(); apiStub = sandbox.stub(api.settings, 'read', function (arg) { return when({value: 'casper'}); }); config = helpers.__get__('config'); configStub = sandbox.stub().returns({ 'paths': { 'subdir': '', 'availableThemes': { 'casper': { 'assets': null, 'default.hbs': '/content/themes/casper/default.hbs', 'index.hbs': '/content/themes/casper/index.hbs', 'page.hbs': '/content/themes/casper/page.hbs', 'page-about.hbs': '/content/themes/casper/page-about.hbs', 'post.hbs': '/content/themes/casper/post.hbs' } } } }); _.extend(configStub, config); configStub.theme = sandbox.stub().returns({ title: 'Ghost', description: 'Just a blogging platform.', url: 'http://testurl.com' }); helpers.__set__('config', configStub); helpers.loadCoreHelpers(adminHbs); // Load template helpers in handlebars hbs.express3({ partialsDir: [config().paths.helperTemplates] }); hbs.cachePartials(function () { done(); }); });
beforeEach(function (done) { var adminHbs = hbs.create(); sandbox = sinon.sandbox.create(); apiStub = sandbox.stub(api.settings, 'read', function () { return when({value: 'casper'}); }); config.theme = sandbox.stub(config, 'theme', function () { return { title: 'Ghost', description: 'Just a blogging platform.', url: 'http://testurl.com' }; }); helpers.loadCoreHelpers(adminHbs); // Load template helpers in handlebars hbs.express3({ partialsDir: [config.paths().helperTemplates] }); hbs.cachePartials(function () { done(); }); });
var hbs = require('express-hbs'), config = require('../config'), instance = hbs.create(); // @TODO think about a config option for this e.g. theme.devmode? if (config.get('env') !== 'production') { instance.handlebars.logger.level = 0; } instance.escapeExpression = instance.handlebars.Utils.escapeExpression; instance.configure = function configure(partialsPath) { var hbsOptions = { partialsDir: [config.get('paths').helperTemplates], onCompile: function onCompile(exhbs, source) { return exhbs.handlebars.compile(source, {preventIndent: true}); } }; if (partialsPath) { hbsOptions.partialsDir.push(partialsPath); } return instance.express4(hbsOptions); }; module.exports = instance;
}).then(function () { var adminHbs = hbs.create(), deferred = when.defer(); // Output necessary notifications on init initNotifications(); // ##Configuration // return the correct mime type for woff filess express['static'].mime.define({'application/font-woff': ['woff']}); // enabled gzip compression by default if (config().server.compress !== false) { server.use(compress()); } // add Ghost x-powered-by header server.use(function (req, res, next) { res.header('X-Powered-By', 'Ghost'); next(); }); // ## View engine // set the view engine server.set('view engine', 'hbs'); // Create a hbs instance for admin and init view engine server.set('admin view engine', adminHbs.express3({partialsDir: config().paths.adminViews + 'partials'})); // Load helpers helpers.loadCoreHelpers(adminHbs, assetHash); // ## Middleware and Routing middleware(server, dbHash); // Log all theme errors and warnings _.each(config().paths.availableThemes._messages.errors, function (error) { errors.logError(error.message, error.context, error.help); }); _.each(config().paths.availableThemes._messages.warns, function (warn) { errors.logWarn(warn.message, warn.context, warn.help); }); // ## Start Ghost App if (config.getSocket()) { // Make sure the socket is gone before trying to create another try { fs.unlinkSync(config.getSocket()); } catch (e) { // We can ignore this. } httpServer = server.listen( config.getSocket() ); fs.chmod(config.getSocket(), '0660'); } else { httpServer = server.listen( config().server.port, config().server.host ); } httpServer.on('listening', function () { ghostStartMessages(); deferred.resolve(httpServer); }); return deferred.promise; });
const express = require('express'); const debug = require('ghost-ignition').debug('app'); const hbs = require('express-hbs'); const multer = require('multer'); const server = require('ghost-ignition').server; const errors = require('ghost-ignition').errors; const gscan = require('../lib'); const fs = require('fs-extra'); const logRequest = require('./middlewares/log-request'); const uploadValidation = require('./middlewares/upload-validation'); const ghostVer = require('./ghost-version'); const pkgJson = require('../package.json'); const ghostVersions = require('../lib/utils').versions; const upload = multer({dest: __dirname + '/uploads/'}); const app = express(); const scanHbs = hbs.create(); // Configure express app.set('x-powered-by', false); app.set('query parser', false); app.engine('hbs', scanHbs.express4({ partialsDir: __dirname + '/tpl/partials', layoutsDir: __dirname + '/tpl/layouts', defaultLayout: __dirname + '/tpl/layouts/default', templateOptions: {data: {version: pkgJson.version}} })); app.set('view engine', 'hbs'); app.set('views', __dirname + '/tpl');
}).then(function () { var adminHbs = hbs.create(); // ##Configuration server.set('version hash', assetHash); // return the correct mime type for woff filess express['static'].mime.define({'application/font-woff': ['woff']}); // ## View engine // set the view engine server.set('view engine', 'hbs'); // Create a hbs instance for admin and init view engine server.set('admin view engine', adminHbs.express3({partialsDir: config.paths().adminViews + 'partials'})); // Load helpers helpers.loadCoreHelpers(adminHbs, assetHash); // ## Middleware middleware(server, dbHash); // ## Routing // Set up API routes routes.api(server); // Set up Admin routes routes.admin(server); // Set up Frontend routes routes.frontend(server); // Are we using sockets? Custom socket or the default? function getSocket() { if (config().server.hasOwnProperty('socket')) { return _.isString(config().server.socket) ? config().server.socket : path.join(config.path().contentPath, process.env.NODE_ENV + '.socket'); } return false; } function startGhost() { // Tell users if their node version is not supported, and exit if (!semver.satisfies(process.versions.node, packageInfo.engines.node)) { console.log( "\nERROR: Unsupported version of Node".red, "\nGhost needs Node version".red, packageInfo.engines.node.yellow, "you are using version".red, process.versions.node.yellow, "\nPlease go to http://nodejs.org to get a supported version".green ); process.exit(0); } // Startup & Shutdown messages if (process.env.NODE_ENV === 'production') { console.log( "Ghost is running...".green, "\nYour blog is now available on", config().url, "\nCtrl+C to shut down".grey ); // ensure that Ghost exits correctly on Ctrl+C process.on('SIGINT', function () { console.log( "\nGhost has shut down".red, "\nYour blog is now offline" ); process.exit(0); }); } else { console.log( ("Ghost is running in " + process.env.NODE_ENV + "...").green, "\nListening on", getSocket() || config().server.host + ':' + config().server.port, "\nUrl configured as:", config().url, "\nCtrl+C to shut down".grey ); // ensure that Ghost exits correctly on Ctrl+C process.on('SIGINT', function () { console.log( "\nGhost has shutdown".red, "\nGhost was running for", Math.round(process.uptime()), "seconds" ); process.exit(0); }); } } // Initialize apps then start the server apps.init().then(function () { // ## Start Ghost App if (getSocket()) { // Make sure the socket is gone before trying to create another fs.unlink(getSocket(), function (err) { /*jslint unparam:true*/ server.listen( getSocket(), startGhost ); fs.chmod(getSocket(), '0660'); }); } else { server.listen( config().server.port, config().server.host, startGhost ); } }); }, function (err) {
_private.createHbsEngine = function createHbsEngine() { var engine = hbs.create(); engine.registerHelper('asset', require('../../helpers/asset')); return engine.express4(); };
checkTemplatesCompile = function checkTemplatesCompile(theme, options) { const localHbs = hbs.create(); const failures = []; const checkVersion = _.get(options, 'checkVersion', 'latest'); const ruleSet = spec.get([checkVersion]); let missingHelper; // CASE: 001-deprecations checks only needs `rules` that start with `GS001-DEPR-` const ruleRegex = /GS005-.*/g; const rulesToCheck = _.pickBy(ruleSet.rules, function (rule, ruleCode) { if (ruleCode.match(ruleRegex)) { return rule; } }); _.each(theme.partials, function (partial) { // ensures partials work when running gscan on windows let partialName = partial.split('\\').join('/'); let partialContent = _.find(theme.files, {file: 'partials/' + partial + '.hbs'}); let partialContentWindows = _.find(theme.files, {file: 'partials\\' + partial + '.hbs'}); partialContent = partialContent ? partialContent.content : partialContentWindows.content; localHbs.registerPartial(partialName, partialContent); }); _.each(rulesToCheck, function (check, ruleCode) { _.each(ruleSet.knownHelpers, function (helper) { // Use standard handlebars {{each}} method for simplicity if (helper === 'foreach') { localHbs.handlebars.registerHelper('foreach', hbs.handlebars.helpers.each); } else { localHbs.handlebars.registerHelper(helper, _.noop); } }); _.each(theme.files, function (themeFile) { let templateTest = themeFile.file.match(/^[^/]+.hbs$/); let compiled; // If this is a main template, test compiling it properly if (templateTest) { try { // When we read the theme, we precompile, here we compile with registered partials and helpers // Which will let us detect any missing partials, helpers or parse errors compiled = localHbs.handlebars.compile(themeFile.content, { knownHelpers: _.zipObject(ruleSet.knownHelpers, _.map(ruleSet.knownHelpers, function () { return true; })), knownHelpersOnly: true }); // NOTE: fakeData does not resolve finding unknown helpers in context objects! compiled(fakeData(themeFile)); } catch (error) { // CASE: transform ugly error message from hbs to the known error message: Missing helper: "X" if (error.message.match(/you specified knownhelpersOnly/gi)) { try { missingHelper = error.message.match(/but\sused\sthe\sunknown\shelper\s(.*)\s-/)[1]; } catch (err) { missingHelper = 'unknown helper name'; } error.message = 'Missing helper: "' + missingHelper + '"'; } failures.push({ ref: themeFile.file, message: error.message }); } } }); if (failures.length > 0) { theme.results.fail[ruleCode] = {failures: failures}; } else { theme.results.pass.push(ruleCode); } }); return theme; };
}).then(function () { var adminHbs = hbs.create(), deferred = when.defer(); // ##Configuration // return the correct mime type for woff filess express['static'].mime.define({'application/font-woff': ['woff']}); // ## View engine // set the view engine server.set('view engine', 'hbs'); // Create a hbs instance for admin and init view engine server.set('admin view engine', adminHbs.express3({partialsDir: config().paths.adminViews + 'partials'})); // Load helpers helpers.loadCoreHelpers(adminHbs, assetHash); // ## Middleware middleware(server, dbHash); // ## Routing // Set up API routes routes.api(server); // Set up Admin routes routes.admin(server); // Set up Frontend routes routes.frontend(server); // Log all theme errors and warnings _.each(config().paths.availableThemes._messages.errors, function (error) { errors.logError(error.message, error.context); }); _.each(config().paths.availableThemes._messages.warns, function (warn) { errors.logWarn(warn.message, warn.context); }); // ## Start Ghost App if (config.getSocket()) { // Make sure the socket is gone before trying to create another fs.unlink(config.getSocket(), function (err) { /*jshint unused:false*/ server.listen( config.getSocket(), startGhost(deferred) ); fs.chmod(config.getSocket(), '0660'); }); } else { server.listen( config().server.port, config().server.host, startGhost(deferred) ); } return deferred.promise; });
var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var stylus = require('stylus'); var hbs = require('express-hbs'); var helpers = require('./helpers'); //var routes = require('./routes'); //var user = require('./routes/user'); var app = express(); var curhbs = hbs.create(); // all environments var por = process.env.PORT; app.set('port', 1600); app.engine('hbs', curhbs.express3({ partialsDir: __dirname + '/views/partials' })); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); //Register helpers helpers(curhbs); // Middlewares app.use(express.favicon()); app.use(express.logger('dev'));