FCDM-website-new/wp-content/themes/studio-pro/gulpfile.js

498 lines
10 KiB
JavaScript

//process.env.DISABLE_NOTIFIER = true; // Uncomment to disable all Gulp notifications.
/**
* Studio Pro.
*
* This file adds gulp tasks to the Studio Pro theme.
*
* @author SEO themes
*/
// Require our dependencies.
var args = require('yargs').argv,
autoprefixer = require('autoprefixer'),
browsersync = require('browser-sync'),
bump = require('gulp-bump'),
changecase = require('change-case'),
del = require('del'),
mqpacker = require('css-mqpacker'),
fs = require('fs'),
gulp = require('gulp'),
beautify = require('gulp-cssbeautify'),
cache = require('gulp-cached'),
cleancss = require('gulp-clean-css'),
concat = require('gulp-concat'),
csscomb = require('gulp-csscomb'),
cssnano = require('gulp-cssnano'),
filter = require('gulp-filter'),
imagemin = require('gulp-imagemin'),
notify = require('gulp-notify'),
pixrem = require('gulp-pixrem'),
plumber = require('gulp-plumber'),
postcss = require('gulp-postcss'),
rename = require('gulp-rename'),
replace = require('gulp-replace'),
s3 = require('gulp-s3-publish'),
sass = require('gulp-sass'),
sort = require('gulp-sort'),
sourcemaps = require('gulp-sourcemaps'),
uglify = require('gulp-uglify'),
wpPot = require('gulp-wp-pot'),
zip = require('gulp-zip'),
focus = require('postcss-focus');
// Set assets paths.
var paths = {
all: ['./**/*', '!./node_modules/', '!./node_modules/**', '!./screenshot.png', '!./assets/images/**'],
concat: ['assets/scripts/concat/*.js'],
images: ['assets/images/*', '!assets/images/*.svg'],
php: ['./*.php', './**/*.php', './**/**/*.php'],
scripts: ['assets/scripts/scripts.js', 'assets/scripts/customize.js'],
styles: ['assets/styles/*.scss', '!assets/styles/min/']
};
/**
* Compile WooCommerce styles.
*
* https://www.npmjs.com/package/gulp-sass
*/
gulp.task('woocommerce', function () {
/**
* Process WooCommerce styles.
*/
gulp.src('assets/styles/woocommerce.scss')
// Notify on error
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
// Initialize source map.
.pipe(sourcemaps.init())
// Process sass
.pipe(sass({
outputStyle: 'expanded'
}))
// Pixel fallbacks for rem units.
.pipe(pixrem())
// Parse with PostCSS plugins.
.pipe(postcss([
autoprefixer({
browsers: 'last 2 versions'
}),
mqpacker({
sort: true
}),
focus(),
]))
// Combine similar rules.
.pipe(cleancss({
level: {
2: {
all: true
}
}
}))
// Minify and optimize style.css again.
.pipe(cssnano({
safe: false,
discardComments: {
removeAll: true,
},
}))
// Add .min suffix.
.pipe(rename({
suffix: '.min'
}))
// Write source map.
.pipe(sourcemaps.write('./', {
includeContent: false,
}))
// Output non minified css to theme directory.
.pipe(gulp.dest('assets/styles/min/'))
// Inject changes via browsersync.
.pipe(browsersync.reload({
stream: true
}))
// Filtering stream to only css files.
.pipe(filter('**/*.css'))
// Notify on successful compile (uncomment for notifications).
.pipe(notify("Compiled: <%= file.relative %>"));
});
/**
* Compile Sass.
*
* https://www.npmjs.com/package/gulp-sass
*/
gulp.task('styles', ['woocommerce'], function () {
gulp.src('assets/styles/style.scss')
// Notify on error
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
// Initialize source map.
.pipe(sourcemaps.init())
// Process sass
.pipe(sass({
outputStyle: 'expanded'
}))
// Pixel fallbacks for rem units.
.pipe(pixrem())
// Parse with PostCSS plugins.
.pipe(postcss([
autoprefixer({
browsers: 'last 2 versions'
}),
mqpacker({
sort: true
}),
focus(),
]))
// Format non-minified stylesheet.
.pipe(csscomb())
// Output non minified css to theme directory.
.pipe(gulp.dest('./'))
// Inject changes via browsersync.
.pipe(browsersync.reload({
stream: true
}))
// Process sass again.
.pipe(sass({
outputStyle: 'compressed'
}))
// Combine similar rules.
.pipe(cleancss({
level: {
2: {
all: true
}
}
}))
// Minify and optimize style.css again.
.pipe(cssnano({
safe: false,
discardComments: {
removeAll: true,
},
}))
// Add .min suffix.
.pipe(rename({
suffix: '.min'
}))
// Write source map.
.pipe(sourcemaps.write('./', {
includeContent: false,
}))
// Output the compiled sass to this directory.
.pipe(gulp.dest('assets/styles/min'))
// Filtering stream to only css files.
.pipe(filter('**/*.css'))
// Notify on successful compile (uncomment for notifications).
.pipe(notify("Compiled: <%= file.relative %>"));
});
/**
* Concat javascript files.
*
* https://www.npmjs.com/package/gulp-uglify
*/
gulp.task('concat', function () {
gulp.src(paths.concat)
// Notify on error.
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
// Concatenate scripts.
.pipe(concat('scripts.js'))
// Output the processed js to this directory.
.pipe(gulp.dest('assets/scripts'))
// Inject changes via browsersync.
.pipe(browsersync.reload({
stream: true
}))
} );
/**
* Minify javascript files.
*
* https://www.npmjs.com/package/gulp-uglify
*/
gulp.task('scripts', ['concat'], function () {
gulp.src(paths.scripts)
// Notify on error.
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
// Source maps init.
.pipe(sourcemaps.init())
// Cache files to avoid processing files that haven't changed.
.pipe(cache('scripts'))
// Add .min suffix.
.pipe(rename({
suffix: '.min'
}))
// Minify.
.pipe(uglify())
// Write source map.
.pipe(sourcemaps.write('./', {
includeContent: false,
}))
// Output the processed js to this directory.
.pipe(gulp.dest('assets/scripts/min'))
// Inject changes via browsersync.
.pipe(browsersync.reload({
stream: true
}))
// Notify on successful compile.
.pipe(notify("Minified: <%= file.relative %>"));
});
/**
* Optimize images.
*
* https://www.npmjs.com/package/gulp-imagemin
*/
gulp.task('images', function () {
return gulp.src(paths.images)
// Notify on error.
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
// Cache files to avoid processing files that haven't changed.
.pipe(cache('images'))
// Optimize images.
.pipe(imagemin({
progressive: true
}))
// Output the optimized images to this directory.
.pipe(gulp.dest('assets/images'))
// Inject changes via browsersync.
.pipe(browsersync.reload({
stream: true
}))
// Notify on successful compile.
.pipe(notify("Optimized: <%= file.relative %>"));
});
/**
* Scan the theme and create a POT file.
*
* https://www.npmjs.com/package/gulp-wp-pot
*/
gulp.task('translate', function () {
return gulp.src(paths.php)
.pipe(plumber({
errorHandler: notify.onError("Error: <%= error.message %>")
}))
.pipe(sort())
.pipe(wpPot({
domain: 'studio-pro',
destFile: 'studio-pro.pot',
package: 'Studio Pro',
bugReport: 'https://seothemes.com/support',
lastTranslator: 'Lee Anthony <seothemeswp@gmail.com>',
team: 'SEO Themes <seothemeswp@gmail.com>'
}))
.pipe(gulp.dest('./languages/'));
});
/**
* Package theme.
*
* https://www.npmjs.com/package/gulp-zip
*/
gulp.task('zip', function () {
gulp.src(['./**/*', '!./node_modules/', '!./node_modules/**', '!./aws.json'])
.pipe(zip(__dirname.split("/").pop() + '.zip'))
.pipe(gulp.dest('../'));
});
/**
* Publish packaged theme to S3.
*
* https://www.npmjs.com/package/gulp-s3
*/
gulp.task('publish', function () {
gulp.src('../studio-pro.zip')
.pipe(s3(aws));
});
/**
* Rename theme.
*
* https://www.npmjs.com/package/change-case
* https://www.npmjs.com/package/yargs
*/
gulp.task('rename', function () {
var old_proxy = 'studio.dev',
old_name = 'Studio Pro',
old_domain = 'studio-pro',
old_prefix = 'studio_',
old_package = 'StudioPro';
var new_proxy = args.to + '.dev',
new_name = changecase.titleCase(args.to) + ' Pro',
new_domain = changecase.paramCase(args.to) + '-pro',
new_prefix = changecase.snakeCase(args.to) + '_pro',
new_package = changecase.pascalCase(args.to) + 'Pro';
del(['./languages/' + old_domain + '.pot']);
gulp.src(paths.all)
.pipe(replace(old_proxy, new_proxy))
.pipe(replace(old_name, new_name))
.pipe(replace(old_domain, new_domain))
.pipe(replace(old_prefix, new_prefix))
.pipe(replace(old_package, new_package))
.pipe(gulp.dest('./'));
});
/**
* Bump version.
*
* https://www.npmjs.com/package/gulp-bump
*/
gulp.task('bump', function () {
if (args.major) {
var kind = 'major';
}
if (args.minor) {
var kind = 'minor';
}
if (args.patch) {
var kind = 'patch';
}
gulp.src(['./package.json', './style.css'])
.pipe(bump({
type: kind,
version: args.to
}))
.pipe(gulp.dest('./'));
gulp.src(['./functions.php'])
.pipe(bump({
key: "'CHILD_THEME_VERSION',",
type: kind,
version: args.to
}))
.pipe(gulp.dest('./'));
gulp.src('./assets/styles/style.scss')
.pipe(bump({
type: kind,
version: args.to
}))
.pipe(gulp.dest('./assets/styles/'));
});
/**
* Process tasks and reload browsers on file changes.
*
* https://www.npmjs.com/package/browser-sync
*/
gulp.task('watch', function () {
// HTTPS (optional).
browsersync({
proxy: 'https://studio.dev',
port: 8000,
notify: false,
open: false,
https: {
"key": "/Users/seothemes/.valet/Certificates/studio.dev.key",
"cert": "/Users/seothemes/.valet/Certificates/studio.dev.crt"
}
});
// Run tasks when files change.
gulp.watch(paths.styles, ['styles']);
gulp.watch(paths.concat, ['scripts']);
gulp.watch(paths.images, ['images']);
gulp.watch(paths.php).on('change', browsersync.reload);
});
/**
* Create default task.
*/
gulp.task('default', ['watch'], function () {
gulp.start('styles', 'concat', 'images');
});