Skip to content

Instantly share code, notes, and snippets.

@solepixel
Created April 20, 2015 04:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save solepixel/04bc11c263d6a51e64f0 to your computer and use it in GitHub Desktop.
Save solepixel/04bc11c263d6a51e64f0 to your computer and use it in GitHub Desktop.
// Load plugins
var gulp = require('gulp'),
autoprefixer = require('gulp-autoprefixer'),
cache = require('gulp-cache'),
compass = require('gulp-compass'),
concat = require('gulp-concat'),
imagemin = require('gulp-imagemin'),
jshint = require('gulp-jshint'),
imagemin = require('gulp-imagemin'),
livereload = require('gulp-livereload'),
minifyCSS = require('gulp-minify-css'),
notify = require('gulp-notify'),
plumber = require('gulp-plumber'),
rename = require('gulp-rename'),
foreach = require('gulp-foreach'),
path = require('path'),
sass = require('gulp-ruby-sass'),
uglify = require('gulp-uglify'),
gutil = require('gulp-util');
// the title and icon that will be used for Gulp notification
var notifyInfo = {
title: 'Gulp'
};
// error notification settings for plumber
var plumberErrorHandler = { errorHandler: notify.onError({
title: notifyInfo.title,
message: "Error: <%= error.message %>"
})
};
// Styles
gulp.task('styles', function(cb){
return sass( 'assets/sass/main.scss', {sourcemap: false}, {style: 'expanded', lineNumbers: true, compass: true}, { container: 'gulp-ruby-sass-styles' })
//.pipe(plumber(plumberErrorHandler))
.on('error', function(err) { console.log('Error', err.message) })
.pipe(autoprefixer('last 2 version', 'ie 9', 'ios 6', 'android 4'))
.pipe(gulp.dest('assets/css'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifyCSS({ keepSpecialComments: 1 }))
.pipe(livereload())
.pipe(gulp.dest('assets/css'))
.pipe(notify({ message: 'Styles task complete' }));
});
// Admin Styles
gulp.task('adminStyles', function(){
return sass('assets/sass/admin.scss', {style: 'expanded', lineNumbers: true, compass: true, 'sourcemap=none': true})
.pipe(plumber(plumberErrorHandler))
.pipe(autoprefixer('last 2 version', 'ie 9', 'ios 6', 'android 4'))
.pipe(gulp.dest('assets/css'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifyCSS({ keepSpecialComments: 1 }))
.pipe(livereload())
.pipe(gulp.dest('assets/css'))
.pipe(notify({ message: 'Admin styles task complete' }));
});
// Occasion Themes
var occasion_themes = {
evergreen: {
name: 'Evergreen',
scss: 'evergreen.scss',
folder: 'evergreen'
},
fourth_of_july: {
name: 'Fourth of July',
scss: 'fourth-of-july.scss',
folder: 'fourth-of-july'
}
}, occasion_tasks = [];
Object.keys( occasion_themes ).forEach( function( theme ){
var taskname = theme + '-theme';
occasion_tasks.push( taskname );
gulp.task( taskname, function() {
return sass( 'occasions/' + occasion_themes[theme].scss, {style: 'expanded', lineNumbers: true, compass: true, 'sourcemap=none': true})
//.pipe(plumber(plumberErrorHandler))
.on('error', function(err) { console.log('Error', err.message) })
.pipe(gulp.dest('occasions/' + occasion_themes[theme].folder + '/css'))
.pipe(rename({ basename: 'style' }))
.pipe(autoprefixer('last 2 version', 'ie 9', 'ios 6', 'android 4'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifyCSS({ keepSpecialComments: 1 }))
.pipe(livereload())
.pipe(gulp.dest('occasions/' + occasion_themes[theme].folder + '/css'))
.pipe( notify({ message: occasion_themes[theme].name + ' task complete' }) );
});
});
gulp.task( 'occasion_themes', occasion_tasks );
// Vendor Plugin Scripts
gulp.task('plugins', function() {
return gulp.src('assets/js/vendor/*.js')
.pipe(plumber(plumberErrorHandler))
.pipe(concat('plugins.js'))
.pipe(gulp.dest('assets/js/build'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(livereload())
.pipe(gulp.dest('assets/js'))
.pipe(notify({ message: 'Plugins task complete' }));
});
// Site Scripts
gulp.task('scripts', function() {
return gulp.src('assets/js/source/*.js')
.pipe(plumber(plumberErrorHandler))
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('bfi-main.js'))
.pipe(gulp.dest('assets/js/build'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(livereload())
.pipe(gulp.dest('assets/js'))
.pipe(notify({ message: 'Scripts task complete' }));
});
// WP ajax script
gulp.task('wp-ajax', function() {
return gulp.src('assets/js/source/bfi-ajax.js')
.pipe(plumber(plumberErrorHandler))
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(gulp.dest('assets/js/build'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(livereload())
.pipe(gulp.dest('assets/js'))
.pipe(notify({ message: 'Ajax scripts task complete' }));
});
// WP admin script
gulp.task('wp-admin', function() {
return gulp.src('assets/js/source/bfi-admin.js')
.pipe(plumber(plumberErrorHandler))
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(gulp.dest('assets/js/build'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(livereload())
.pipe(gulp.dest('assets/js'))
.pipe(notify({ message: 'Admin scripts task complete' }));
});
// Images
gulp.task('images', function() {
return gulp.src('assets/img/**/*')
.pipe(plumber(plumberErrorHandler))
.pipe(cache(imagemin({ optimizationLevel: 7, progressive: true, interlaced: true })))
.pipe(livereload())
.pipe(gulp.dest('assets/img'))
.pipe(notify({ message: 'Images task complete' }));
});
// Watch
gulp.task('watch', function() {
// Listen on port 35729
livereload.listen();
// Watch .scss files
gulp.watch(['assets/sass/**/*.scss'], [ 'styles', 'adminStyles' ] );
gulp.watch(['occasions/*.scss'], [ 'occasion_themes' ] );
// Watch .js files
gulp.watch(['assets/js/vendor/*.js', 'assets/js/source/*.js'], ['plugins', 'scripts', 'wp-ajax', 'wp-admin']);
// Watch image files
// gulp.watch('assets/images/**/*', ['images']);
// Watch .php files
gulp.watch(['*.php', '**/*.php']).on('change', livereload.changed);
});
// Default task
gulp.task( 'default', [ 'styles', 'adminStyles', 'occasion_themes', 'scripts', 'plugins', 'wp-ajax', 'watch'] );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment