diff --git a/.gitignore b/.gitignore
index e49727ac4c..6fe2eaa412 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
.DS_Store
.nodemonignore
.sass-cache/
+.bower-*/
+.idea/
node_modules/
public/lib
test/coverage/
diff --git a/app/views/404.html b/app/views/404.html
new file mode 100644
index 0000000000..65f8637efa
--- /dev/null
+++ b/app/views/404.html
@@ -0,0 +1,17 @@
+{% extends 'layouts/default.html' %}
+
+{% block main %}
+
Oops something went wrong
+
+ 404
+{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/app/views/404.jade b/app/views/404.jade
deleted file mode 100755
index 2f0d9e8663..0000000000
--- a/app/views/404.jade
+++ /dev/null
@@ -1,13 +0,0 @@
-extends layouts/default
-
-block main
- h1 Oops something went wrong
- br
- span 404
-
-block content
- #error-message-box
- #error-stack-trace
- pre
- code!= error
-
diff --git a/app/views/500.html b/app/views/500.html
new file mode 100644
index 0000000000..8eba21c912
--- /dev/null
+++ b/app/views/500.html
@@ -0,0 +1,17 @@
+{% extends 'layouts/default.html' %}
+
+{% block main %}
+ Oops something went wrong
+
+ 500
+{% endblock %}
+
+{% block content %}
+
+{% endblock %}
diff --git a/app/views/500.jade b/app/views/500.jade
deleted file mode 100755
index 491b00084e..0000000000
--- a/app/views/500.jade
+++ /dev/null
@@ -1,12 +0,0 @@
-extends layouts/default
-
-block main
- h1 Oops something went wrong
- br
- span 500
-
-block content
- #error-message-box
- #error-stack-trace
- pre
- code!= error
diff --git a/app/views/includes/foot.html b/app/views/includes/foot.html
new file mode 100644
index 0000000000..b9c0c04794
--- /dev/null
+++ b/app/views/includes/foot.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% if (process.env.NODE_ENV == 'development') %}
+
+
+{% endif %}
diff --git a/app/views/includes/foot.jade b/app/views/includes/foot.jade
deleted file mode 100755
index ba1d6e57bf..0000000000
--- a/app/views/includes/foot.jade
+++ /dev/null
@@ -1,30 +0,0 @@
-//AngularJS
-script(type='text/javascript', src='/lib/angular/angular.js')
-script(type='text/javascript', src='/lib/angular-cookies/angular-cookies.js')
-script(type='text/javascript', src='/lib/angular-resource/angular-resource.js')
-script(type='text/javascript', src='/lib/angular-route/angular-route.js')
-
-//Angular UI
-script(type='text/javascript', src='/lib/angular-bootstrap/ui-bootstrap.js')
-script(type='text/javascript', src='/lib/angular-bootstrap/ui-bootstrap-tpls.js')
-script(type='text/javascript', src='/lib/angular-ui-utils/ui-utils.min.js')
-
-//Application Init
-script(type='text/javascript', src='/js/app.js')
-script(type='text/javascript', src='/js/config.js')
-script(type='text/javascript', src='/js/directives.js')
-script(type='text/javascript', src='/js/filters.js')
-
-//Application Services
-script(type='text/javascript', src='/js/services/global.js')
-script(type='text/javascript', src='/js/services/articles.js')
-
-//Application Controllers
-script(type='text/javascript', src='/js/controllers/articles.js')
-script(type='text/javascript', src='/js/controllers/index.js')
-script(type='text/javascript', src='/js/controllers/header.js')
-script(type='text/javascript', src='/js/init.js')
-
-if (process.env.NODE_ENV == 'development')
- //Livereload script rendered
- script(type='text/javascript', src='http://' + req.host + ':35729/livereload.js')
\ No newline at end of file
diff --git a/app/views/includes/head.html b/app/views/includes/head.html
new file mode 100644
index 0000000000..dd49197063
--- /dev/null
+++ b/app/views/includes/head.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+ {{appName}} - {{title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/views/includes/head.jade b/app/views/includes/head.jade
deleted file mode 100755
index 458c122d7b..0000000000
--- a/app/views/includes/head.jade
+++ /dev/null
@@ -1,29 +0,0 @@
-head
- meta(charset='utf-8')
- meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1')
- meta(name='viewport', content='width=device-width,initial-scale=1')
-
- title= appName+' - '+title
- meta(http-equiv='Content-type', content='text/html;charset=UTF-8')
- meta(name="keywords", content="node.js, express, mongoose, mongodb, angularjs")
- meta(name="description", content="MEAN - A Modern Stack: MongoDB, ExpressJS, AngularJS, NodeJS. (BONUS: Passport User Support).")
-
- link(href='/img/icons/favicon.ico', rel='shortcut icon', type='image/x-icon')
-
- meta(property='fb:app_id', content='APP_ID')
- meta(property='og:title', content='#{appName} - #{title}')
- meta(property='og:description', content='MEAN - A Modern Stack: MongoDB, ExpressJS, AngularJS, NodeJS. (BONUS: Passport User Support).')
- meta(property='og:type', content='website')
- meta(property='og:url', content='APP_URL')
- meta(property='og:image', content='APP_LOGO')
- meta(property='og:site_name', content='MEAN - A Modern Stack')
- meta(property='fb:admins', content='APP_ADMIN')
-
- link(rel='stylesheet', href='/lib/bootstrap/dist/css/bootstrap.min.css')
- //- link(rel='stylesheet', href='/lib/bootstrap/dist/css/bootstrap-responsive.css')
- link(rel='stylesheet', href='/css/common.css')
-
- link(rel='stylesheet', href='/css/views/articles.css')
-
- //if lt IE 9
- script(src='http://html5shim.googlecode.com/svn/trunk/html5.js')
diff --git a/app/views/index.html b/app/views/index.html
new file mode 100644
index 0000000000..c559719aff
--- /dev/null
+++ b/app/views/index.html
@@ -0,0 +1,7 @@
+{% extends 'layouts/default.html' %}
+{% block content %}
+
+
+{% endblock %}
diff --git a/app/views/index.jade b/app/views/index.jade
deleted file mode 100755
index c121898992..0000000000
--- a/app/views/index.jade
+++ /dev/null
@@ -1,6 +0,0 @@
-extends layouts/default
-
-block content
- section(data-ng-view)
- script(type="text/javascript").
- window.user = !{user};
diff --git a/app/views/layouts/default.html b/app/views/layouts/default.html
new file mode 100644
index 0000000000..115a51eb40
--- /dev/null
+++ b/app/views/layouts/default.html
@@ -0,0 +1,13 @@
+
+
+ {% include '../includes/head.html' %}
+
+
+
+
+ {% block content %}{% endblock %}
+
+
+ {% include '../includes/foot.html' %}
+
+
diff --git a/app/views/layouts/default.jade b/app/views/layouts/default.jade
deleted file mode 100755
index 6af83d378f..0000000000
--- a/app/views/layouts/default.jade
+++ /dev/null
@@ -1,9 +0,0 @@
-doctype html
-html(lang='en', xmlns='http://www.w3.org/1999/xhtml', xmlns:fb='https://www.facebook.com/2008/fbml', itemscope='itemscope', itemtype='http://schema.org/Product')
- include ../includes/head
- body
- .navbar.navbar-inverse.navbar-fixed-top(data-ng-include="'views/header.html'", data-role="navigation")
- section.content
- section.container
- block content
- include ../includes/foot
diff --git a/app/views/users/auth.html b/app/views/users/auth.html
new file mode 100644
index 0000000000..74891fddea
--- /dev/null
+++ b/app/views/users/auth.html
@@ -0,0 +1,24 @@
+{% extends '../layouts/default.html' %}
+
+{% block content %}
+
+
+
+ {% if message && message.length %}
+
+
+
+ {{ message }}
+
+
+ {% endif %}
+ {% block auth %}{% endblock %}
+
+
+{% endblock %}
diff --git a/app/views/users/auth.jade b/app/views/users/auth.jade
deleted file mode 100755
index fadb270dd1..0000000000
--- a/app/views/users/auth.jade
+++ /dev/null
@@ -1,21 +0,0 @@
-extends ../layouts/default
-
-block content
- .row
- .col-md-offset-1.col-md-5
- a(href="/auth/facebook")
- img(src="/img/icons/facebook.png")
- a(href="/auth/github")
- img(src="/img/icons/github.png")
- a(href="/auth/twitter")
- img(src="/img/icons/twitter.png")
- a(href="/auth/google")
- img(src="/img/icons/google.png")
- a(href="/auth/linkedin")
- img(src="/img/icons/linkedin.png")
- .col-md-6
- if message && message.length
- .fade.in.alert.alert-error
- button.close(type="button", data-dismiss="alert") ×
- strong #{message}
- block auth
diff --git a/app/views/users/signin.html b/app/views/users/signin.html
new file mode 100644
index 0000000000..72b9be84e2
--- /dev/null
+++ b/app/views/users/signin.html
@@ -0,0 +1,24 @@
+{% extends 'auth.html' %}
+
+{% block auth %}
+
+{% endblock %}
diff --git a/app/views/users/signin.jade b/app/views/users/signin.jade
deleted file mode 100755
index 9cd9492f9a..0000000000
--- a/app/views/users/signin.jade
+++ /dev/null
@@ -1,20 +0,0 @@
-extends auth
-
-block auth
- form.signin.form-horizontal(action="/users/session", method="post")
- .form-group
- label.col-md-4.control-label(for='email') Email
- .col-md-8
- input#email.form-control(type='text', name="email", placeholder='Email')
-
- .form-group
- label.col-md-4.control-label(for='password') Password
- .col-md-8
- input#password.form-control(type='password', name="password", placeholder='Password')
-
- .form-group
- .col-md-offset-4.col-md-8
- button.btn.btn-primary(type='submit') Sign in
-
- | or
- a.show-signup(href="/signup") Sign up
diff --git a/app/views/users/signup.html b/app/views/users/signup.html
new file mode 100644
index 0000000000..a539f3f25f
--- /dev/null
+++ b/app/views/users/signup.html
@@ -0,0 +1,36 @@
+{% extends 'auth.html' %}
+
+{% block auth %}
+
+{% endblock %}
diff --git a/app/views/users/signup.jade b/app/views/users/signup.jade
deleted file mode 100755
index 920f0a65cb..0000000000
--- a/app/views/users/signup.jade
+++ /dev/null
@@ -1,30 +0,0 @@
-extends auth
-
-block auth
- form.signup.form-horizontal(action="/users", method="post")
- .form-group
- label.col-md-4.control-label(for='name') Full Name
- .col-md-8
- input#name.form-control(type='text', name="name", placeholder='Full name', value=user.name)
-
- .form-group
- label.col-md-4.control-label(for='email') Email
- .col-md-8
- input#email.form-control(type='text', name="email", placeholder='Email', value=user.email)
-
- .form-group
- label.col-md-4.control-label(for='username') Username
- .col-md-8
- input#username.form-control(type='text', name="username", placeholder='Username', value=user.username)
-
- .form-group
- label.col-md-4.control-label(for='password') Password
- .col-md-8
- input#password.form-control(type='password', name="password", placeholder='Password')
-
- .form-group
- .col-md-offset-4.col-md-8
- button.btn.btn-primary(type='submit') Sign up
-
- | or
- a.show-login(href="/signin") login
diff --git a/bower.json b/bower.json
index 8d146ef432..e46e8849cc 100644
--- a/bower.json
+++ b/bower.json
@@ -2,7 +2,7 @@
"name": "mean",
"version": "0.1.3",
"dependencies": {
- "angular": "1.2.10",
+ "angular": "latest",
"angular-resource": "latest",
"angular-cookies": "latest",
"angular-mocks": "latest",
diff --git a/config/env/all.js b/config/env/all.js
index 6bf44396b7..807640df56 100644
--- a/config/env/all.js
+++ b/config/env/all.js
@@ -7,10 +7,11 @@ module.exports = {
root: rootPath,
port: process.env.PORT || 3000,
db: process.env.MONGOHQ_URL,
+ templateEngine: 'swig',
// The secret should be set to a non-guessable string that
// is used to compute a session hash
sessionSecret: 'MEAN',
// The name of the MongoDB collection to store sessions in
sessionCollection: 'sessions'
-}
+};
diff --git a/config/env/development.js b/config/env/development.js
index 37b4d7132a..f5075ab7c5 100644
--- a/config/env/development.js
+++ b/config/env/development.js
@@ -1,33 +1,33 @@
'use strict';
module.exports = {
- db: "mongodb://localhost/mean-dev",
+ db: 'mongodb://localhost/mean-dev',
app: {
- name: "MEAN - A Modern Stack - Development"
+ name: 'MEAN - A Modern Stack - Development'
},
facebook: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/facebook/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/facebook/callback'
},
twitter: {
- clientID: "CONSUMER_KEY",
- clientSecret: "CONSUMER_SECRET",
- callbackURL: "http://localhost:3000/auth/twitter/callback"
+ clientID: 'CONSUMER_KEY',
+ clientSecret: 'CONSUMER_SECRET',
+ callbackURL: 'http://localhost:3000/auth/twitter/callback'
},
github: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/github/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/github/callback'
},
google: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/google/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/google/callback'
},
linkedin: {
- clientID: "API_KEY",
- clientSecret: "SECRET_KEY",
- callbackURL: "http://localhost:3000/auth/linkedin/callback"
+ clientID: 'API_KEY',
+ clientSecret: 'SECRET_KEY',
+ callbackURL: 'http://localhost:3000/auth/linkedin/callback'
}
-}
\ No newline at end of file
+};
diff --git a/config/env/production.js b/config/env/production.js
index 71c73a4f54..151b201649 100644
--- a/config/env/production.js
+++ b/config/env/production.js
@@ -1,33 +1,33 @@
'use strict';
module.exports = {
- db: "mongodb://localhost/mean",
+ db: 'mongodb://localhost/mean',
app: {
- name: "MEAN - A Modern Stack - Production"
+ name: 'MEAN - A Modern Stack - Production'
},
facebook: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/facebook/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/facebook/callback'
},
twitter: {
- clientID: "CONSUMER_KEY",
- clientSecret: "CONSUMER_SECRET",
- callbackURL: "http://localhost:3000/auth/twitter/callback"
+ clientID: 'CONSUMER_KEY',
+ clientSecret: 'CONSUMER_SECRET',
+ callbackURL: 'http://localhost:3000/auth/twitter/callback'
},
github: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/github/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/github/callback'
},
google: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/google/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/google/callback'
},
linkedin: {
- clientID: "API_KEY",
- clientSecret: "SECRET_KEY",
- callbackURL: "http://localhost:3000/auth/linkedin/callback"
+ clientID: 'API_KEY',
+ clientSecret: 'SECRET_KEY',
+ callbackURL: 'http://localhost:3000/auth/linkedin/callback'
}
-}
\ No newline at end of file
+};
diff --git a/config/env/test.js b/config/env/test.js
index 2a21399897..dc2a0c5033 100644
--- a/config/env/test.js
+++ b/config/env/test.js
@@ -1,29 +1,29 @@
'use strict';
module.exports = {
- db: "mongodb://localhost/mean-test",
+ db: 'mongodb://localhost/mean-test',
port: 3001,
app: {
- name: "MEAN - A Modern Stack - Test"
+ name: 'MEAN - A Modern Stack - Test'
},
facebook: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/facebook/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/facebook/callback'
},
twitter: {
- clientID: "CONSUMER_KEY",
- clientSecret: "CONSUMER_SECRET",
- callbackURL: "http://localhost:3000/auth/twitter/callback"
+ clientID: 'CONSUMER_KEY',
+ clientSecret: 'CONSUMER_SECRET',
+ callbackURL: 'http://localhost:3000/auth/twitter/callback'
},
github: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/github/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/github/callback'
},
google: {
- clientID: "APP_ID",
- clientSecret: "APP_SECRET",
- callbackURL: "http://localhost:3000/auth/google/callback"
+ clientID: 'APP_ID',
+ clientSecret: 'APP_SECRET',
+ callbackURL: 'http://localhost:3000/auth/google/callback'
}
-}
\ No newline at end of file
+};
diff --git a/config/express.js b/config/express.js
index 60f7a6db7b..a958d5f6b6 100755
--- a/config/express.js
+++ b/config/express.js
@@ -4,6 +4,7 @@
* Module dependencies.
*/
var express = require('express'),
+ consolidate = require('consolidate'),
mongoStore = require('connect-mongo')(express),
flash = require('connect-flash'),
helpers = require('view-helpers'),
@@ -31,12 +32,17 @@ module.exports = function(app, passport, db) {
app.use(express.logger('dev'));
}
+ // assign the template engine to .html files
+ app.engine('html', consolidate[config.templateEngine]);
+
+ // set .html as the default extension
+ app.set('view engine', 'html');
+
// Set views path, template engine and default layout
app.set('views', config.root + '/app/views');
- app.set('view engine', 'jade');
// Enable jsonp
- app.enable("jsonp callback");
+ app.enable('jsonp callback');
app.configure(function() {
// The cookieParser should be above session
@@ -68,7 +74,7 @@ module.exports = function(app, passport, db) {
// Routes should be at the last
app.use(app.router);
-
+
// Setting the fav icon and static folder
app.use(express.favicon());
app.use(express.static(config.root + '/public'));
@@ -90,7 +96,7 @@ module.exports = function(app, passport, db) {
});
// Assume 404 since no middleware responded
- app.use(function(req, res, next) {
+ app.use(function(req, res) {
res.status(404).render('404', {
url: req.originalUrl,
error: 'Not found'
@@ -98,4 +104,4 @@ module.exports = function(app, passport, db) {
});
});
-};
\ No newline at end of file
+};
diff --git a/gruntfile.js b/gruntfile.js
index 1779ab8489..9f1c3f5871 100644
--- a/gruntfile.js
+++ b/gruntfile.js
@@ -80,7 +80,7 @@ module.exports = function(grunt) {
}
});
- //Load NPM tasks
+ //Load NPM tasks
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-mocha-test');
@@ -97,4 +97,4 @@ module.exports = function(grunt) {
//Test task.
grunt.registerTask('test', ['env:test', 'mochaTest', 'karma:unit']);
-};
\ No newline at end of file
+};
diff --git a/package.json b/package.json
index e5cb3d8a73..800ae83fea 100755
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"dependencies": {
"express": "~3.4.7",
"jade": "~1.0.2",
+ "consolidate": "~0.10.0",
"mongoose": "~3.8.3",
"connect-mongo": "~0.4.0",
"connect-flash": "~0.1.1",
@@ -56,7 +57,8 @@
"grunt-nodemon": "0.1.2",
"grunt-contrib-watch": "~0.5.3",
"karma-coverage": "~0.1.4",
- "karma": "~0.10.9"
+ "karma": "~0.10.9",
+ "swig": "~1.3.2"
},
"devDependencies": {
"supertest": "0.8.2",
diff --git a/public/views/articles/view.html b/public/views/articles/view.html
index b34b586920..f69d0e73f3 100644
--- a/public/views/articles/view.html
+++ b/public/views/articles/view.html
@@ -1,11 +1,11 @@
- {{article.created | date:'medium'}}/
+ {{article.created | date:'medium'}} /
{{article.user.name}}
{{article.title}}