Skip to content

Commit 9cb1d29

Browse files
committed
Add some really janky stuff for faster front end dev to be fixed later
1 parent 4ac9d5b commit 9cb1d29

26 files changed

+423
-7
lines changed

Gemfile.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,4 @@ DEPENDENCIES
151151
yui-compressor
152152

153153
BUNDLED WITH
154-
1.10.5
154+
1.10.6

Rakefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ end
4242
desc "preview the site in a web browser"
4343
task :preview do
4444
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
45-
jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll serve --watch")
45+
jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll serve")
4646

4747
trap("INT") {
4848
[jekyllPid].each { |pid| Process.kill(9, pid) rescue Errno::ESRCH }

gulp/config.js

+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
var src = 'source';
2+
var build = 'public';
3+
var development = 'public/development';
4+
var production = 'public';
5+
var srcAssets = 'source/_assets';
6+
var developmentAssets = 'public/assets';
7+
var productionAssets = 'public/production/assets';
8+
9+
module.exports = {
10+
browsersync: {
11+
development: {
12+
server: {
13+
baseDir: [development, build, src]
14+
},
15+
port: 9999,
16+
files: [
17+
developmentAssets + '*.{css,js}',
18+
]
19+
},
20+
production: {
21+
server: {
22+
baseDir: [production]
23+
},
24+
port: 9998
25+
}
26+
},
27+
delete: {
28+
src: [developmentAssets]
29+
},
30+
jekyll: {
31+
development: {
32+
src: src,
33+
dest: development,
34+
config: '_config.yml'
35+
},
36+
production: {
37+
src: src,
38+
dest: production,
39+
// config: '_config.yml,_config.build.yml'
40+
config: '_config.yml'
41+
}
42+
},
43+
less: {
44+
src: srcAssets + '/stylesheets/app.less',
45+
dest: developmentAssets,
46+
options: {
47+
noCache: true,
48+
compass: false,
49+
bundleExec: true,
50+
sourcemap: true
51+
}
52+
},
53+
scripts: {
54+
src: srcAssets + '/bower_components/jquery/dist/jquery.min.js',
55+
src: srcAssets + '/bower_components/jstorage/jstorage.min.js',
56+
src: srcAssets + '/bower_components/modernizr/modernizr.js',
57+
src: srcAssets + '/bower_components/bootstrap/dist/js/bootstrap.min.js',
58+
src: srcAssets + '/bower_components/jsrender/jsrender.js',
59+
src: srcAssets + '/bower_components/highlightjs/highlight.pack.js',
60+
src: srcAssets + '/bower_components/jquery-cookie/jquery.cookie.js',
61+
src: srcAssets + '/javascripts/**/*.js',
62+
dest: developmentAssets
63+
},
64+
autoprefixer: {
65+
browsers: [
66+
'last 2 versions',
67+
'safari 5',
68+
'ie 8',
69+
'ie 9',
70+
'opera 12.1',
71+
'ios 6',
72+
'android 4'
73+
],
74+
cascade: true
75+
},
76+
watch: {
77+
jekyll: [
78+
'_config.yml',
79+
src + '/_data/**/*.{json,yml,csv}',
80+
src + '/_includes/**/*.{html,xml}',
81+
src + '/_layouts/*.html'
82+
],
83+
less: srcAssets + '/stylesheets/**/*.less',
84+
scripts: srcAssets + '/javascripts/**/*.js',
85+
images: srcAssets + '/images/**/*'
86+
},
87+
lesslint: {
88+
src: [
89+
srcAssets + '/stylesheets/**/*.less'
90+
],
91+
options: {
92+
bundleExec: true
93+
}
94+
},
95+
jshint: {
96+
src: srcAssets + '/javascripts/*.js'
97+
},
98+
optimize: {
99+
css: {
100+
src: developmentAssets + '/*.css',
101+
dest: productionAssets,
102+
options: {
103+
keepSpecialComments: 0
104+
}
105+
}
106+
},
107+
revision: {
108+
src: {
109+
assets: [
110+
productionAssets + '/*.css'
111+
],
112+
base: production
113+
},
114+
dest: {
115+
assets: production,
116+
manifest: {
117+
name: 'manifest.json',
118+
path: productionAssets
119+
}
120+
}
121+
},
122+
collect: {
123+
src: [
124+
productionAssets + '/manifest.json',
125+
production + '/*.{html,xml,txt,json,css,js}',
126+
'!' + production + '/feed.xml'
127+
],
128+
dest: production
129+
}
130+
};

gulp/tasks/default.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
var gulp = require('gulp');
2+
3+
gulp.task('default', ['watch']);
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var gulp = require('gulp');
2+
var browsersync = require('browser-sync');
3+
var config = require('../../config').browsersync.development;
4+
5+
/**
6+
* Run the build task and start a server with BrowserSync
7+
*/
8+
gulp.task('browsersync', ['build'], function() {
9+
browsersync(config);
10+
});

gulp/tasks/development/build.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var gulp = require('gulp');
2+
var runSequence = require('run-sequence');
3+
4+
/**
5+
* Run all tasks needed for a build in defined order
6+
*/
7+
gulp.task('build', function(callback) {
8+
runSequence('delete',
9+
[
10+
'jekyll',
11+
'less',
12+
// 'scripts'
13+
], callback);
14+
});

gulp/tasks/development/delete.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var gulp = require('gulp');
2+
var del = require('del');
3+
var config = require('../../config').delete;
4+
5+
/**
6+
* Delete folders and files
7+
*/
8+
gulp.task('delete', function(callback) {
9+
del(config.src, callback);
10+
});

gulp/tasks/development/jekyll.js

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var gulp = require('gulp');
2+
var cp = require('child_process');
3+
var browsersync = require('browser-sync');
4+
var config = require('../../config').jekyll.development;
5+
6+
/**
7+
* Build the Jekyll Site
8+
*/
9+
gulp.task('jekyll', function(done) {
10+
browsersync.notify('Compiling Jekyll');
11+
12+
return cp.spawn('bundle', ['exec', 'jekyll', 'build', '-q', '--source=' + config.src, '--destination=' + config.dest, '--config=' + config.config], { stdio: 'inherit' })
13+
.on('close', done);
14+
});
15+
16+
gulp.task('jekyll-rebuild', ['jekyll'], function() {
17+
browsersync.reload();
18+
});

gulp/tasks/development/jshint.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var gulp = require('gulp');
2+
var jshint = require('gulp-jshint');
3+
var stylish = require('jshint-stylish');
4+
var config = require('../../config').jshint;
5+
6+
/**
7+
* Check JavaScript sytax with JSHint
8+
*/
9+
gulp.task('jshint', function() {
10+
return gulp.src(config.src)
11+
.pipe(jshint())
12+
.pipe(jshint.reporter(stylish));
13+
});

gulp/tasks/development/less-lint.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
var gulp = require('gulp');
2+
var recess = require('gulp-recess');
3+
var config = require('../../config').scsslint;
4+
5+
/**
6+
* Lint LESS files
7+
*/
8+
gulp.task('lesslint', function() {
9+
return gulp.src(config.src)
10+
.pipe(recess(config.options));
11+
});

gulp/tasks/development/less.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
var gulp = require('gulp');
2+
var browsersync = require('browser-sync');
3+
var less = require('gulp-less');
4+
var gulpFilter = require('gulp-filter');
5+
var prefix = require('gulp-autoprefixer');
6+
var config = require('../../config');
7+
var handleErrors = require('../../util/handleErrors');
8+
9+
gulp.task('less', function () {
10+
return gulp.src(config.less.src)
11+
.pipe(less())
12+
.on('error', handleErrors)
13+
.pipe(prefix(config.autoprefixer))
14+
.pipe(gulp.dest(config.less.dest))
15+
.pipe(browsersync.reload({stream:true}));
16+
});

gulp/tasks/development/scripts.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
var gulp = require('gulp');
2+
var concat = require('gulp-concat');
3+
var config = require('../../config');
4+
5+
gulp.task('scripts', function() {
6+
return gulp.src(config.scripts.src)
7+
.pipe(concat('app.js'))
8+
.pipe(gulp.dest(config.scripts.dest));
9+
});

gulp/tasks/development/watch.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var gulp = require('gulp');
2+
var config = require('../../config');
3+
4+
/**
5+
* Start browsersync task and then watch files for changes
6+
*/
7+
// gulp.task('watch', ['browsersync'], function() {
8+
// gulp.watch(config.jekyll, ['jekyll-rebuild']);
9+
// gulp.watch(config.less, ['less', 'lesslint']);
10+
// gulp.watch(config.scripts, ['scripts', 'jshint']);
11+
// gulp.watch(config.images, ['images']);
12+
13+
14+
15+
gulp.task('watch', ['browsersync'], function () {
16+
gulp.watch('source/_includes/**/*.{html,xml}', ['jekyll-rebuild']);
17+
gulp.watch('source/_layouts/*.html,xml', ['jekyll-rebuild']);
18+
gulp.watch('source/_assets/stylesheets/**/*.less', ['less', 'lesslint']);
19+
gulp.watch('source/_assets/javascripts/**/*.less', ['scripts', 'jshint']);
20+
});

gulp/tasks/production/browser-sync.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var gulp = require('gulp');
2+
var browsersync = require('browser-sync');
3+
var config = require('../../config').browsersync.production;
4+
5+
/**
6+
* Start a server and watch changes with BrowserSync
7+
*/
8+
gulp.task('browsersync:production', ['build:production'], function() {
9+
browsersync(config);
10+
});

gulp/tasks/production/build.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var gulp = require('gulp');
2+
var runSequence = require('run-sequence');
3+
4+
/**
5+
* Run all tasks needed for a build in defined order
6+
*/
7+
gulp.task('build:production', function(callback) {
8+
runSequence('delete',
9+
[
10+
'jekyll:production',
11+
'less'
12+
],
13+
// [
14+
// 'optimize:css'
15+
// 'optimize:js',
16+
// ],
17+
'revision',
18+
'rev:collect',
19+
callback);
20+
});
21+
22+
// gulp.task('build:production', function(callback) {
23+
// runSequence('delete',
24+
// [
25+
// 'jekyll:production',
26+
// 'less',
27+
// // 'scripts'
28+
// ], callback);
29+
// });

gulp/tasks/production/jekyll.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var gulp = require('gulp');
2+
var cp = require('child_process');
3+
var browsersync = require('browser-sync');
4+
var config = require('../../config').jekyll.production;
5+
6+
/**
7+
* Build the Jekyll Site
8+
*/
9+
gulp.task('jekyll:production', function(done) {
10+
browsersync.notify('Compiling Jekyll (Production)');
11+
12+
return cp.spawn('bundle', ['exec', 'jekyll', 'build', '-q', '--source=' + config.src, '--destination=' + config.dest, '--config=' + config.config], { stdio: 'inherit' })
13+
.on('close', done);
14+
});

gulp/tasks/production/optimize-css.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var gulp = require('gulp');
2+
var minifycss = require('gulp-minify-css');
3+
var size = require('gulp-size');
4+
var config = require('../../config').optimize.css;
5+
6+
/**
7+
* Copy and minimize CSS files
8+
*/
9+
gulp.task('optimize:css', function() {
10+
return gulp.src(config.src)
11+
.pipe(minifycss(config.options))
12+
.pipe(gulp.dest(config.dest))
13+
.pipe(size());
14+
});
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var gulp = require('gulp');
2+
var collect = require('gulp-rev-collector');
3+
var config = require('../../config').collect;
4+
5+
/**
6+
* Replace all links to assets in files
7+
* from a manifest file
8+
*/
9+
gulp.task('rev:collect', function() {
10+
return gulp.src(config.src)
11+
.pipe(collect())
12+
.pipe(gulp.dest(config.dest));
13+
});

gulp/tasks/production/revision.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
var gulp = require('gulp');
2+
var rev = require('gulp-rev');
3+
var config = require('../../config').revision;
4+
5+
/**
6+
* Revision all asset files and
7+
* write a manifest file
8+
*/
9+
gulp.task('revision', function() {
10+
return gulp.src(config.src.assets, { base: config.src.base })
11+
.pipe(gulp.dest(config.dest.assets))
12+
.pipe(rev())
13+
.pipe(gulp.dest(config.dest.assets))
14+
.pipe(rev.manifest({ path: config.dest.manifest.name }))
15+
.pipe(gulp.dest(config.dest.manifest.path));
16+
});

0 commit comments

Comments
 (0)