Skip to content
This repository was archived by the owner on Sep 18, 2024. It is now read-only.

Commit 077d5ec

Browse files
committed
Added Marko template engine support. Closes #75
1 parent 5b07ff0 commit 077d5ec

File tree

22 files changed

+200
-67
lines changed

22 files changed

+200
-67
lines changed

.dependencies.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"jade": "~1.9.1",
99
"ejs": "~2.1.4",
1010
"swig": "~1.4.2",
11+
"marko": "~1.3.24",
1112
"express-handlebars": "~1.1.0",
1213
"compression": "~1.3.0",
1314
"method-override": "~2.3.0",

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ An Expressjs generator for Yeoman, based on the express command line tool.
1616
- Handlebars
1717
- Swig
1818
- EJS
19+
- Marko
1920
- Supported CSS pre-processors
2021
- SASS (both node-sass and ruby sass)
2122
- LESS

app/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ module.exports = generators.Base.extend({
4949
'Jade',
5050
'Swig',
5151
'EJS',
52-
'Handlebars'
52+
'Handlebars',
53+
'Marko'
5354
]
5455
}];
5556

app/templates/basic-coffee/app.js

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ var app = express();
1919
app.engine('handlebars', exphbs({
2020
defaultLayout: 'main',
2121
partialsDir: ['views/partials/']
22-
}));<% } %>
22+
}));<% } %><% if(options.viewEngine != 'marko'){ %>
2323
app.set('views', path.join(__dirname, 'views'));
24-
app.set('view engine', '<%= options.viewEngine %>');
24+
app.set('view engine', '<%= options.viewEngine %>');<% } %>
2525

2626
// app.use(favicon(__dirname + '/public/img/favicon.ico'));
2727
app.use(logger('dev'));
@@ -37,35 +37,47 @@ app.use('/users', users);
3737

3838
/// catch 404 and forward to error handler
3939
app.use(function(req, res, next) {
40-
var err = new Error('Not Found');
41-
err.status = 404;
42-
next(err);
40+
var err = new Error('Not Found');
41+
err.status = 404;
42+
next(err);
4343
});
4444

4545
/// error handlers
4646

4747
// development error handler
4848
// will print stacktrace
49+
<% if(options.viewEngine == 'marko'){ %>
50+
var errorTemplate = require('marko').load(require.resolve('./views/error.marko'));<% } %>
4951
if (app.get('env') === 'development') {
50-
app.use(function(err, req, res, next) {
51-
res.status(err.status || 500);
52-
res.render('error', {
53-
message: err.message,
54-
error: err,
55-
title: 'error'
52+
app.use(function(err, req, res, next) {
53+
res.status(err.status || 500);<% if(options.viewEngine == 'marko'){ %>
54+
errorTemplate.render({
55+
message: err.message,
56+
error: err,
57+
title: 'error'
58+
}, res);<% } else { %>
59+
res.render('error', {
60+
message: err.message,
61+
error: err,
62+
title: 'error'
63+
});<% } %>
5664
});
57-
});
5865
}
5966

6067
// production error handler
6168
// no stacktraces leaked to user
6269
app.use(function(err, req, res, next) {
63-
res.status(err.status || 500);
64-
res.render('error', {
65-
message: err.message,
66-
error: {},
67-
title: 'error'
68-
});
70+
res.status(err.status || 500);<% if(options.viewEngine == 'marko'){ %>
71+
errorTemplate.render({
72+
message: err.message,
73+
error: err,
74+
title: 'error'
75+
}, res);<% } else { %>
76+
res.render('error', {
77+
message: err.message,
78+
error: {},
79+
title: 'error'
80+
});<% } %>
6981
});
7082

7183

app/templates/basic-coffee/package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
"jade": "~1.9.1"<% } %><% if(options.viewEngine == 'ejs'){ %>,
1616
"ejs": "~2.1.4"<% } %><% if(options.viewEngine == 'swig'){ %>,
1717
"swig": "~1.4.2"<% } %><% if(options.viewEngine == 'handlebars'){ %>,
18-
"express-handlebars": "~1.1.0"<% } %>
18+
"express-handlebars": "~1.1.0"<% } %><% if(options.viewEngine == 'marko'){ %>,
19+
"marko": "~1.3.24"<% } %>
1920
},
20-
"devDependencies": {<% if(options.buildTool == 'grunt'){ %>
21+
"devDependencies": {
22+
"coffee-script": "~1.8.0",<% if(options.buildTool == 'grunt'){ %>
2123
"grunt": "~0.4.5",
2224
"grunt-develop": "~0.4.0"<% if(options.cssPreprocessor == 'sass'){ %>,
2325
"grunt-contrib-sass": "~0.8.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>,
@@ -27,8 +29,7 @@
2729
"grunt-contrib-watch": "~0.6.1",
2830
"request": "~2.51.0",
2931
"time-grunt": "~1.0.0",
30-
"load-grunt-tasks": "~2.0.0",
31-
"coffee-script": "~1.8.0"<% } %><% if(options.buildTool == 'gulp'){ %>
32+
"load-grunt-tasks": "~2.0.0"<% } %><% if(options.buildTool == 'gulp'){ %>
3233
"gulp": "~3.8.10"<% if(options.cssPreprocessor == 'sass'){ %>,
3334
"gulp-ruby-sass": "~0.7.1"<% } %><% if(options.cssPreprocessor == 'node-sass'){ %>,
3435
"gulp-sass": "~1.3.2"<% } %><% if(options.cssPreprocessor == 'less'){ %>,
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
express = require 'express'
2-
router = express.Router()
2+
router = express.Router()<% if(options.viewEngine == 'marko'){ %>
3+
marko = require 'marko'<% } %>
34

45
# GET home page.
5-
router.get '/', (req, res) ->
6-
res.render 'index', { title: 'Express' }
6+
<% if(options.viewEngine == 'marko'){ %>
7+
indexTemplate = marko.load require.resolve '../views/index.marko'<% } %>
8+
router.get '/', (req, res) -><% if(options.viewEngine == 'marko'){ %>
9+
indexTemplate.render
10+
title: 'Express'
11+
, res<% } else { %>
12+
res.render 'index', { title: 'Express' }<% } %>
713

814
module.exports = router

app/templates/basic/app.js

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ var app = express();
1717
app.engine('handlebars', exphbs({
1818
defaultLayout: 'main',
1919
partialsDir: ['views/partials/']
20-
}));<% } %>
20+
}));<% } %><% if(options.viewEngine != 'marko'){ %>
2121
app.set('views', path.join(__dirname, 'views'));
22-
app.set('view engine', '<%= options.viewEngine %>');
22+
app.set('view engine', '<%= options.viewEngine %>');<% } %>
2323

2424
// app.use(favicon(__dirname + '/public/img/favicon.ico'));
2525
app.use(logger('dev'));
@@ -44,26 +44,38 @@ app.use(function(req, res, next) {
4444

4545
// development error handler
4646
// will print stacktrace
47+
<% if(options.viewEngine == 'marko'){ %>
48+
var errorTemplate = require('marko').load(require.resolve('./views/error.marko'));<% } %>
4749
if (app.get('env') === 'development') {
4850
app.use(function(err, req, res, next) {
49-
res.status(err.status || 500);
51+
res.status(err.status || 500);<% if(options.viewEngine == 'marko'){ %>
52+
errorTemplate.render({
53+
message: err.message,
54+
error: err,
55+
title: 'error'
56+
}, res);<% } else { %>
5057
res.render('error', {
5158
message: err.message,
5259
error: err,
5360
title: 'error'
54-
});
61+
});<% } %>
5562
});
5663
}
5764

5865
// production error handler
5966
// no stacktraces leaked to user
6067
app.use(function(err, req, res, next) {
61-
res.status(err.status || 500);
68+
res.status(err.status || 500);<% if(options.viewEngine == 'marko'){ %>
69+
errorTemplate.render({
70+
message: err.message,
71+
error: err,
72+
title: 'error'
73+
}, res);<% } else { %>
6274
res.render('error', {
6375
message: err.message,
6476
error: {},
6577
title: 'error'
66-
});
78+
});<% } %>
6779
});
6880

6981

app/templates/basic/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"jade": "~1.9.1"<% } %><% if(options.viewEngine == 'ejs'){ %>,
1616
"ejs": "~2.1.4"<% } %><% if(options.viewEngine == 'swig'){ %>,
1717
"swig": "~1.4.2"<% } %><% if(options.viewEngine == 'handlebars'){ %>,
18-
"express-handlebars": "~1.1.0"<% } %>
18+
"express-handlebars": "~1.1.0"<% } %><% if(options.viewEngine == 'marko'){ %>,
19+
"marko": "~1.3.24"<% } %>
1920
},
2021
"devDependencies": {<% if(options.buildTool == 'grunt'){ %>
2122
"grunt": "~0.4.5",
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
var express = require('express');
2-
var router = express.Router();
2+
var router = express.Router();<% if(options.viewEngine == 'marko'){ %>
3+
var marko = require('marko');<% } %>
34

45
/* GET home page. */
5-
router.get('/', function(req, res) {
6-
res.render('index', { title: 'Express' });
6+
<% if(options.viewEngine == 'marko'){ %>
7+
var indexTemplate = marko.load(require.resolve('../views/index.marko'));<% } %>
8+
router.get('/', function(req, res) {<% if(options.viewEngine == 'marko'){ %>
9+
indexTemplate.render({
10+
title: 'Express'
11+
}, res);<% } else { %>
12+
res.render('index', { title: 'Express' });<% } %>
713
});
814

915
module.exports = router;
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
express = require 'express'
2-
router = express.Router()<% if(options.database == 'mongodb'){ %>
2+
router = express.Router()<% if(options.viewEngine == 'marko'){ %>
3+
marko = require 'marko'<% } %><% if(options.database == 'mongodb'){ %>
34
mongoose = require 'mongoose'
45
Article = mongoose.model 'Article'<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %>
56
db = require '../models'<% } %>
67

78
module.exports = (app) ->
89
app.use '/', router
9-
10+
<% if(options.viewEngine == 'marko'){ %>
11+
indexTemplate = marko.load require.resolve '../views/index.marko'<% } %>
1012
router.get '/', (req, res, next) ->
1113
<% if(options.database == 'mongodb'){ %>
1214
Article.find (err, articles) ->
1315
return next(err) if err<% } %><% if(options.database == 'mysql' || options.database == 'postgresql'){ %>
14-
db.Article.findAll().success (articles) -><% } %>
16+
db.Article.findAll().success (articles) -><% } %><% if(options.viewEngine == 'marko'){ %>
17+
indexTemplate.render
18+
title: 'Generator-Express MVC',
19+
articles: articles
20+
, res<% } else { %>
1521
res.render 'index',
1622
title: 'Generator-Express MVC'
17-
articles: articles
23+
articles: articles<% } %>

0 commit comments

Comments
 (0)