Skip to content

Commit 3ac6065

Browse files
committed
Refactor to make sharing JS easier
1 parent ac09680 commit 3ac6065

33 files changed

+142
-124
lines changed

gulpfile.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ gulp.task('clean', function () {
2828

2929
// css
3030
gulp.task('styles', function () {
31-
gulp.src('assets/styles/main.styl')
31+
gulp.src('src/styles/main.styl')
3232
.pipe($.if(!prod, $.sourcemaps.init()))
3333
.pipe($.stylus({
3434
'include css': true,
@@ -47,7 +47,7 @@ gulp.task('scripts', function () {
4747
return browserify({
4848
entries: fileIn,
4949
debug: !prod,
50-
paths: [path.dirname(fileIn), './']
50+
paths: [path.dirname(fileIn), './src']
5151
})
5252
.transform('babelify', { presets: ['es2015'] })
5353
.bundle()
@@ -56,15 +56,15 @@ gulp.task('scripts', function () {
5656
.pipe(buffer());
5757
};
5858

59-
return gulpBrowserify('./assets/scripts/main.js', 'main.js')
59+
return gulpBrowserify('./src/js/client/main.js', 'main.js')
6060
.pipe($.if(!prod, $.sourcemaps.init({ loadMaps: true })))
6161
.pipe($.if(prod, $.uglify()))
6262
.pipe($.if(!prod, $.sourcemaps.write()))
6363
.pipe(gulp.dest('assets/dist/scripts'))
6464
.pipe(bs.stream());;
6565
});
6666

67-
var assetPath = ['assets/**', '!assets/scripts/**', '!assets/styles/**', '!assets/dist/**'];
67+
var assetPath = ['assets/**', '!assets/dist/**'];
6868

6969
// other assets
7070
gulp.task('assets', function () {
@@ -88,19 +88,21 @@ gulp.task('wait', function (cb) {
8888
});
8989

9090
gulp.task('watch', ['build'], function () {
91-
gulp.watch(['assets/scripts/**', 'lib/**'], ['scripts']);
92-
gulp.watch('assets/styles/**', ['styles']);
93-
gulp.watch(['views/**', 'resources/**'], bs.reload)
91+
gulp.watch(['src/js/**'], ['scripts']);
92+
gulp.watch('src/styles/**', ['styles']);
93+
gulp.watch(['src/views/**', 'src/resources/**'], bs.reload)
9494
gulp.watch(assetPath, ['assets']);
9595
});
9696

9797
gulp.task('serve', ['watch'], function () {
98-
var runnode = function (env) {
98+
var runnode = function (env = {}) {
9999
nodemon({
100100
script: 'index.js',
101101
ext: 'js',
102-
ignore: ['assets/**', 'gulpfile.js'],
103-
env: env || { }
102+
ignore: ['src/js/client/**', 'gulpfile.js'],
103+
env: Object.assign({
104+
NODE_PATH: './src',
105+
}, env),
104106
});
105107
}
106108

@@ -114,7 +116,9 @@ gulp.task('serve', ['watch'], function () {
114116
});
115117
});
116118
} else {
117-
runnode();
119+
runnode({
120+
NODE_PATH: `${process.env.NODE_PATH}:./src`,
121+
});
118122
}
119123
});
120124

index.js

Lines changed: 1 addition & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,111 +1,5 @@
1-
'use strict';
2-
31
try {
42
require('dotenv').load();
53
} catch (e) { }
64

7-
var express = require('express');
8-
var nunjucks = require('nunjucks');
9-
var bodyParser = require('body-parser');
10-
var path = require('path');
11-
var fs = require('fs');
12-
var _ = require('lodash');
13-
var url = require('url');
14-
var querystring = require('querystring');
15-
var yaml = require('js-yaml');
16-
var crypto = require('crypto');
17-
var Countdown = require('./lib/countdown');
18-
var utils = require('./utils');
19-
var app = express();
20-
var server = require('http').Server(app);
21-
22-
require('./sockets.js')(server);
23-
24-
utils.init(app);
25-
26-
// Static file serving
27-
var staticOptions = { };
28-
if (app.settings.env != 'development') {
29-
staticOptions.maxAge = 60 * 60 * 365 * 1000;
30-
}
31-
app.use(require('compression')());
32-
app.use('/assets', express.static('assets/dist', staticOptions));
33-
34-
// View rendering
35-
var nunjucksEnv = nunjucks.configure('views', {
36-
autoescape: true,
37-
noCache: app.settings.env == 'development',
38-
express: app
39-
});
40-
41-
app.locals.asset = utils.asset;
42-
app.locals.loadAsset = utils.loadAsset;
43-
app.locals.markdownResource = utils.loadMarkdown;
44-
45-
if (process.env.BS_SNIPPET) {
46-
app.locals.browserSync = process.env.BS_SNIPPET;
47-
}
48-
49-
// Routes
50-
51-
app.use(function(req, res, next) {
52-
// Force https
53-
if ((req.headers['x-forwarded-proto'] != 'https') && (process.env.FORCE_HTTPS == "1")) {
54-
res.redirect('https://' + req.hostname + req.originalUrl);
55-
} else {
56-
next();
57-
}
58-
});
59-
60-
app.use('/api', require('./api'));
61-
62-
app.use(function (req, res, next) {
63-
res.locals.title = 'Hack Cambridge';
64-
var port = (app.settings.env == "development") ? ':' + req.app.settings.port : '';
65-
res.locals.requestedUrl = url.parse(
66-
req.protocol + '://' + req.hostname + port + req.originalUrl
67-
);
68-
next();
69-
});
70-
71-
function renderHome(req, res) {
72-
res.render('index.html', {
73-
faqs: utils.loadResource('faqs'),
74-
sponsors: utils.loadResource('sponsors'),
75-
countdown: Countdown.createStartCountdown()
76-
});
77-
}
78-
79-
app.get('/', renderHome);
80-
81-
app.get('/terms', function (req, res) {
82-
res.render('terms.html');
83-
});
84-
85-
app.get('/privacy', function (req, res) {
86-
res.render('privacy.html');
87-
});
88-
89-
app.get('/pay', function (req, res) {
90-
res.render('pay.html', {
91-
title: 'Make a payment to Hack Cambridge',
92-
stripeKey: process.env.STRIPE_PUBLISH_KEY
93-
});
94-
});
95-
96-
app.get('/favicon.ico', function (req, res) {
97-
res.sendFile(path.join(__dirname, '/assets/images/favicon.ico'));
98-
});
99-
100-
app.use((req, res) => {
101-
res.status(404).render('404.html');
102-
});
103-
104-
// Start server
105-
app.set('port', (process.env.PORT || 3000));
106-
107-
module.exports = app;
108-
109-
server.listen(app.get('port'), function() {
110-
console.log('Node app is running on port', app.get('port'));
111-
});
5+
require('js/server/index');

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"main": "index.js",
66
"scripts": {
77
"test": "./node_modules/mocha/bin/mocha",
8-
"start": "node index.js",
8+
"start": "export NODE_PATH=$NODE_PATH:./src; node ./index",
99
"postinstall": "gulp build"
1010
},
1111
"repository": {
@@ -18,7 +18,7 @@
1818
"url": "https://github.com/hackcambridge/hack-cambridge-website/issues"
1919
},
2020
"engines": {
21-
"node": "4.2.4"
21+
"node": "6.9.1"
2222
},
2323
"homepage": "https://github.com/hackcambridge/hack-cambridge-website#readme",
2424
"dependencies": {

assets/scripts/main.js renamed to src/js/client/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
var $ = require('jquery');
2-
var Countdown = require('lib/countdown.js');
2+
var Countdown = require('js/shared/countdown.js');
33

44
require('./polyfills')
55

File renamed without changes.
File renamed without changes.
File renamed without changes.

src/js/server/index.js

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
'use strict';
2+
3+
var express = require('express');
4+
var nunjucks = require('nunjucks');
5+
var bodyParser = require('body-parser');
6+
var path = require('path');
7+
var fs = require('fs');
8+
var _ = require('lodash');
9+
var url = require('url');
10+
var querystring = require('querystring');
11+
var yaml = require('js-yaml');
12+
var crypto = require('crypto');
13+
var Countdown = require('js/shared/countdown');
14+
var utils = require('./utils');
15+
var app = express();
16+
var server = require('http').Server(app);
17+
18+
require('./sockets.js')(server);
19+
20+
utils.init(app);
21+
22+
// Static file serving
23+
var staticOptions = { };
24+
if (app.settings.env != 'development') {
25+
staticOptions.maxAge = 60 * 60 * 365 * 1000;
26+
}
27+
app.use(require('compression')());
28+
app.use('/assets', express.static(utils.resolvePath('assets/dist'), staticOptions));
29+
30+
// View rendering
31+
var nunjucksEnv = nunjucks.configure(utils.resolvePath('src/views'), {
32+
autoescape: true,
33+
noCache: app.settings.env == 'development',
34+
express: app
35+
});
36+
37+
app.locals.asset = utils.asset;
38+
app.locals.loadAsset = utils.loadAsset;
39+
app.locals.markdownResource = utils.loadMarkdown;
40+
41+
if (process.env.BS_SNIPPET) {
42+
app.locals.browserSync = process.env.BS_SNIPPET;
43+
}
44+
45+
// Routes
46+
47+
app.use(function(req, res, next) {
48+
// Force https
49+
if ((req.headers['x-forwarded-proto'] != 'https') && (process.env.FORCE_HTTPS == "1")) {
50+
res.redirect('https://' + req.hostname + req.originalUrl);
51+
} else {
52+
next();
53+
}
54+
});
55+
56+
app.use('/api', require('./api'));
57+
58+
app.use(function (req, res, next) {
59+
res.locals.title = 'Hack Cambridge';
60+
var port = (app.settings.env == "development") ? ':' + req.app.settings.port : '';
61+
res.locals.requestedUrl = url.parse(
62+
req.protocol + '://' + req.hostname + port + req.originalUrl
63+
);
64+
next();
65+
});
66+
67+
function renderHome(req, res) {
68+
res.render('index.html', {
69+
faqs: utils.loadResource('faqs'),
70+
sponsors: utils.loadResource('sponsors'),
71+
countdown: Countdown.createStartCountdown()
72+
});
73+
}
74+
75+
app.get('/', renderHome);
76+
77+
app.get('/terms', function (req, res) {
78+
res.render('terms.html');
79+
});
80+
81+
app.get('/privacy', function (req, res) {
82+
res.render('privacy.html');
83+
});
84+
85+
app.get('/pay', function (req, res) {
86+
res.render('pay.html', {
87+
title: 'Make a payment to Hack Cambridge',
88+
stripeKey: process.env.STRIPE_PUBLISH_KEY
89+
});
90+
});
91+
92+
app.get('/favicon.ico', function (req, res) {
93+
res.sendFile(path.join(__dirname, '/assets/images/favicon.ico'));
94+
});
95+
96+
app.use((req, res) => {
97+
res.status(404).render('404.html');
98+
});
99+
100+
// Start server
101+
app.set('port', (process.env.PORT || 3000));
102+
103+
module.exports = app;
104+
105+
server.listen(app.get('port'), function() {
106+
console.log('Node app is running on port', app.get('port'));
107+
});
File renamed without changes.

utils.js renamed to src/js/server/utils.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ var markdown = require('markdown-it')({
99
typographer: true
1010
}).use(require('markdown-it-attrs'));
1111
var nunjucks = require('nunjucks');
12+
const path = require('path');
1213

1314
var loadedResources = {};
1415
var loadedMarkdowns = {};
1516
var app;
1617

18+
const PROJECT_ROOT = path.resolve(path.join(__dirname, '../../../'));
19+
1720
function timeProperties(items, properties) {
1821
items.forEach((item) => properties.forEach((prop) => item[prop] = moment.tz(item[prop], 'Europe/London')));
1922
}
@@ -27,10 +30,14 @@ exports.init = function init(a) {
2730
app = a;
2831
};
2932

33+
exports.resolvePath = function resolvePath(fromProjectRoot) {
34+
return path.join(PROJECT_ROOT, fromProjectRoot);
35+
}
36+
3037
var assetsFile;
3138

3239
try {
33-
assetsFile = require('./assets/dist/rev-manifest.json');
40+
assetsFile = require(exports.resolvePath('./assets/dist/rev-manifest.json'));
3441
} catch (e) {
3542
assetsFile = { };
3643
}
@@ -59,7 +66,9 @@ exports.loadAsset = function loadAsset(assetName) {
5966

6067
exports.loadResource = function loadResource(resourceName) {
6168
if ((!loadedResources[resourceName]) || (app.settings.env == 'development')) {
62-
var loadedResource = yaml.safeLoad(fs.readFileSync('./resources/' + resourceName + '.yml'))[resourceName];
69+
var loadedResource = yaml.safeLoad(
70+
fs.readFileSync(exports.resolvePath(`src/resources/${resourceName}.yml`))
71+
)[resourceName];
6372

6473
switch (resourceName) {
6574
case 'faqs':
@@ -107,7 +116,11 @@ exports.loadResource = function loadResource(resourceName) {
107116

108117
exports.loadMarkdown = function loadMarkdown(markdownName) {
109118
if ((!loadedMarkdowns[markdownName]) || (app.settings.env == 'development')) {
110-
var loadedMarkdown = nunjucks.runtime.markSafe(markdown.render(fs.readFileSync('./resources/' + markdownName + '.md', 'utf8')));
119+
var loadedMarkdown = nunjucks.runtime.markSafe(
120+
markdown.render(fs.readFileSync(exports.resolvePath(
121+
`src/resources/${markdownName}.md`, 'utf8'
122+
)))
123+
);
111124
loadedMarkdowns[markdownName] = loadedMarkdown;
112125
}
113126

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)