fs = require 'fs'
gulp = require 'gulp'
rename = require 'gulp-rename'
pug = require 'gulp-pug'
sass = require 'gulp-dart-sass'
csso = require 'gulp-csso'
coffee = require 'gulp-coffee'
cson = require 'gulp-cson'
webpack = require 'webpack-stream'
responsive = require 'gulp-responsive'
superstatic = require 'superstatic'
livereload = require 'livereload'
del = require 'del'
patterns =
pug: 'public/views/*.pug'
source: 'public/views/source.pug'
sass: 'public/stylesheets/**/*.sass'
coffee: 'public/scripts/**/*.coffee'
cson: 'public/data/**/*.cson'
webpack: 'public/scripts/main.js'
image: 'public/images/galleries/*'
# Start development server
serve = ->
server = superstatic.server
host: '0.0.0.0'
port: 8080
config:
'host': '0.0.0.0'
'trailingSlash': false
'headers': [
'source': '**/*'
'headers': [
'key': 'Cache-Control'
'value': 'max-age=0'
]
]
server.listen ->
console.log 'Server running on port ' + 8080
return
live = livereload.createServer
extraExts: [
'html'
]
exclusions: [
__dirname + "/node_modules"
]
live.watch __dirname
return
# Compile views
gulp.task 'pug', ->
gulp.src [patterns.pug, "!#{patterns.source}"]
.pipe pug
locals:
__dirname: __dirname
require: require
.pipe rename (path) ->
# These should be in the root directory
if path.basename isnt 'index' and path.basename isnt '404'
path.dirname += '/' + path.basename
# Don't change 404 filename
unless path.basename is '404'
path.basename = 'index'
path.extname = '.html'
return
.pipe gulp.dest './'
# Compile source pages
# Need a different task for the source page because it takes a long time to compile
gulp.task 'source', ->
gulp.src patterns.source
.pipe pug
locals:
__dirname: __dirname
require: require
.pipe rename (path) ->
path.dirname += '/' + path.basename
path.basename = 'index'
path.extname = '.html'
return
.pipe gulp.dest './'
# Compile stylesheets
gulp.task 'sass', ->
gulp.src 'public/stylesheets/main.sass'
.pipe do sass
.pipe do csso
.pipe gulp.dest 'public/stylesheets/'
# Compile scripts
gulp.task 'coffee', ->
gulp.src patterns.coffee
.pipe coffee
bare: true
.pipe gulp.dest 'public/scripts/'
# Pack scripts
gulp.task 'webpack', ->
gulp.src patterns.webpack
.pipe webpack
config:
mode: 'production'
output:
filename: 'main.min.js'
.pipe gulp.dest 'public/scripts/'
# Compile data
gulp.task 'cson', ->
gulp.src patterns.cson
.pipe do cson
.pipe gulp.dest 'public/data'
# Create thumbnails
gulp.task 'image', ->
gulp.src patterns.image
.pipe responsive
'*':
format: 'jpg'
height: 250
quality: 50
withoutEnlargement: false
.pipe gulp.dest 'public/images/galleries/thumbnails'
# Watch files
gulp.task 'watch', ->
gulp.watch 'public/views/**/*.pug', gulp.series 'pug'
gulp.watch patterns.source, gulp.series 'source'
gulp.watch patterns.sass, gulp.series 'sass'
gulp.watch patterns.coffee, gulp.series 'coffee', 'webpack'
gulp.watch patterns.cson, gulp.series 'cson', 'pug'
gulp.watch patterns.image, gulp.series 'image'
do serve
return
# Build everything
gulp.task 'build', gulp.series 'cson', 'coffee', 'webpack', 'sass', 'image', 'pug', 'source'
# Clean up files
gulp.task 'clean', ->
del fs.readFileSync("#{__dirname}/.gitignore", 'utf-8').split '\n'