diff --git a/gulp/config.js b/gulp/config.js new file mode 100644 index 0000000..f806c4a --- /dev/null +++ b/gulp/config.js @@ -0,0 +1,135 @@ +/** + * The configuration file for gulp projects. + * This file should not be edited--project specific variables are stored in variables.js + */ +'use strict'; + +/** + * User defined variables + */ +var variables = require( './variables' ); + +/** + * Main source + * @type {string} + */ +var source = './'; + +/** + * Source for Sass files + * @type {string} + */ +var styleSource = source + 'sass/**/*.scss'; + +/** + * CSS destination folder + * themes: '' + * plugins: 'includes/css' + * @type {string} + */ +var styleDestination = source + ( 'theme' === variables.type ? '' : 'includes/css' ); + +/** + * Sass output style + * @type {string} + */ +var sassOutputStyle = '' !== variables.sassOutputStyle ? variables.sassOutputStyle : ( 'theme' === variables.type ? 'compact' : 'compressed' ); + +/** + * JS destination folder + * themes: 'js' + * plugins: 'includes/js' + * @type {string} + */ +var scriptDestination = 'theme' === variables.type ? 'js' : 'includes/js'; + +/** + * Source for javascript files + * @type {[*]} + */ +var scriptSource = [ + source + scriptDestination + '/**/*.js', + '!' + source + scriptDestination + '/**/*min.js' +]; + +/** + * Source for Bower files + * @type {string} + */ +var dependencySource = 'node_modules'; + +/** + * Source for Six/Ten Press files + * @type {[*]} + */ +var SixTenSource = [ + dependencySource + '/sixtenpress/includes/common/**.*', + dependencySource + '/sixtenpress/includes/common/**/*' +]; + +/** + * Destination for Six/Ten Press common files + * @type {string} + */ +var SixTenDestination = source + 'includes/common'; + +/** + * Source for language files. + * @type {string} + */ +var potSource = source + '**/*.php'; + +/** + * Destination for language files. + * @type {string} + */ +var potDestination = source + variables.languageFolder + '/'; + +/** + * The following should not be edited. + * @type {{projectName: string, version: string, paths: {sassPath: string, dependencyDir: string, sixten: string}, output: {style: string, destination: string}, destination: string, buildInclude: [*]}} + */ +module.exports = { + + projectName: variables.projectSlug, + projectTitle: variables.projectName, + version: variables.version, + root: source, + url: variables.url, + paths: { + sassPath: styleSource, + jsPath: scriptSource, + dependencyDir: dependencySource, + sixtenBower: SixTenSource, + potSource: potSource + }, + output: { + style: sassOutputStyle, + styleDestination: styleDestination, + scriptDestination: scriptDestination, + sixtenDestination: SixTenDestination, + potDestination: potDestination + }, + packages: variables.packages, + destination: variables.buildDestination, + buildInclude: [ + '**', + + // exclude: + '!node_modules/**/*', + '!bower_components/**/*', + '!sass/**/*', + '!dist/**/*', + '!node_modules', + '!bower_components', + '!sass', + '!dist', + '!gulpfile.js', + '!package.json', + '!package-lock.json', + '!bower.json', + '!gulp/**/*', + '!gulp', + '!yarn.lock' + ] +}; diff --git a/gulp/tasks/assets-shortcodes.js b/gulp/tasks/assets-shortcodes.js new file mode 100644 index 0000000..ae35ba1 --- /dev/null +++ b/gulp/tasks/assets-shortcodes.js @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2017 Robin Cornett + */ + +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'assets-shortcodes', function () { + var config = require( '../config' ), + task_dir = config.paths.dependencyDir + '/sixtenpress-shortcodes/includes/**/*.*', + directions = config.paths.dependencyDir + '/sixtenpress-shortcodes/sixtenpress-shortcodes.php'; + gulp.src( directions ) + .pipe( gulp.dest( config.root + 'includes/shortcodes' ) ); + gulp.src( task_dir ) + .pipe( gulp.dest( config.root + 'includes/shortcodes/includes' ) ); +} ); diff --git a/gulp/tasks/assets-sixtenpress.js b/gulp/tasks/assets-sixtenpress.js new file mode 100644 index 0000000..8e04a4b --- /dev/null +++ b/gulp/tasks/assets-sixtenpress.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'assets-sixtenpress', function () { + var config = require( '../config' ); + gulp.src( config.paths.sixtenBower ) + .pipe( gulp.dest( config.output.sixtenDestination ) ); +} ); diff --git a/gulp/tasks/assets-slick.js b/gulp/tasks/assets-slick.js new file mode 100644 index 0000000..2702d4c --- /dev/null +++ b/gulp/tasks/assets-slick.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'assets-slick', function () { + var config = require( '../config' ); + return gulp.src( config.paths.dependencyDir + '/slick-carousel/slick/**.js' ) + .pipe( gulp.dest( config.output.scriptDestination ) ); +} ); diff --git a/gulp/tasks/assets-tasks.js b/gulp/tasks/assets-tasks.js new file mode 100644 index 0000000..2a57695 --- /dev/null +++ b/gulp/tasks/assets-tasks.js @@ -0,0 +1,13 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'assets-tasks', function () { + var config = require( '../config' ), + task_dir = config.paths.dependencyDir + '/gulp-tasks/gulp/tasks/*.*', + directions = config.paths.dependencyDir + '/gulp-tasks/gulp/config.js'; + gulp.src( directions ) + .pipe( gulp.dest( config.root + 'gulp' ) ); + gulp.src( task_dir ) + .pipe( gulp.dest( config.root + 'gulp/tasks' ) ); +} ); diff --git a/gulp/tasks/assets-tgmpa.js b/gulp/tasks/assets-tgmpa.js new file mode 100644 index 0000000..b62de46 --- /dev/null +++ b/gulp/tasks/assets-tgmpa.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'assets-tgmpa', function () { + var config = require( '../config' ); + return gulp.src( config.paths.dependencyDir + '/tgmpa/class-tgm-plugin-activation.php' ) + .pipe( gulp.dest( config.root ) ); +} ); diff --git a/gulp/tasks/assets.js b/gulp/tasks/assets.js new file mode 100644 index 0000000..096b550 --- /dev/null +++ b/gulp/tasks/assets.js @@ -0,0 +1,6 @@ +'use strict'; + +var gulp = require( 'gulp' ), + config = require( '../config' ); + +gulp.task( 'assets', config.packages ); diff --git a/gulp/tasks/browser-sync.js b/gulp/tasks/browser-sync.js new file mode 100644 index 0000000..ce85663 --- /dev/null +++ b/gulp/tasks/browser-sync.js @@ -0,0 +1,17 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'browserSync', function () { + + var browserSync = require( 'browser-sync' ).create(), + config = require( '../config' ), + files = [ + config.output.styleDestination + '**/*.css', + config.output.scriptDestination + '**/*.js' + ]; + browserSync.init( files, { + proxy: config.url, + injectChanges: true + } ) +} ); diff --git a/gulp/tasks/build.js b/gulp/tasks/build.js new file mode 100644 index 0000000..f4ea148 --- /dev/null +++ b/gulp/tasks/build.js @@ -0,0 +1,10 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'build', [ + 'sass', + 'js', + 'translate', + 'zip' +] ); diff --git a/gulp/tasks/clean.js b/gulp/tasks/clean.js new file mode 100644 index 0000000..2feb8c3 --- /dev/null +++ b/gulp/tasks/clean.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'clean', function () { + var del = require( 'del' ), + config = require( '../config' ); + return del( [ config.destination ] ); +} ); diff --git a/gulp/tasks/default.js b/gulp/tasks/default.js new file mode 100644 index 0000000..32b8fdd --- /dev/null +++ b/gulp/tasks/default.js @@ -0,0 +1,5 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'default', ['js', 'sass', 'translate', 'watch'] ); diff --git a/gulp/tasks/js.js b/gulp/tasks/js.js new file mode 100644 index 0000000..8e5ae7c --- /dev/null +++ b/gulp/tasks/js.js @@ -0,0 +1,16 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'js', function () { + + var uglify = require( 'gulp-uglify-es' ).default, + rename = require( 'gulp-rename' ), + config = require( '../config' ); + gulp.src( config.paths.jsPath ) + .pipe( uglify() ) + .pipe( rename( { + extname: '.min.js' + } ) ) + .pipe( gulp.dest( config.output.scriptDestination ) ); +} ); diff --git a/gulp/tasks/sass.js b/gulp/tasks/sass.js new file mode 100644 index 0000000..bcd52d7 --- /dev/null +++ b/gulp/tasks/sass.js @@ -0,0 +1,41 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'sass', function () { + + var autoprefixer = require( 'autoprefixer' ), + postcss = require( 'gulp-postcss' ), + sass = require( 'gulp-sass' ), + notify = require( 'gulp-notify' ), + atImport = require( 'postcss-import' ), + mqpacker = require( 'css-mqpacker' ), + config = require( '../config' ), + perfectionist = require( 'perfectionist' ), + browserSync = require( 'browser-sync' ), + processors = [ + atImport, + autoprefixer( { + cascade: false, + remove: false + } ), + mqpacker( {sort: true} ), + perfectionist( { + cascade: true, + format: config.output.style, + indentSize: 4, + maxAtRuleLength: 80, + maxSelectorLength: 80, + maxValueLength: 80, + sourcemap: true + } ) + ]; + gulp.src( config.paths.sassPath ) + .pipe( sass( {outputStyle: config.output.style} ).on( 'error', sass.logError ) ) + .pipe( postcss( processors ) ) + .pipe( gulp.dest( config.output.styleDestination ) ) + .pipe( browserSync.reload( { + stream: true + } ) ) + .pipe( notify( {message: 'you sassed the shit out of that.', onLast: true} ) ); +} ); diff --git a/gulp/tasks/translate.js b/gulp/tasks/translate.js new file mode 100644 index 0000000..20d2c74 --- /dev/null +++ b/gulp/tasks/translate.js @@ -0,0 +1,18 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'translate', function () { + + var pot = require( 'gulp-wp-pot' ), + config = require( '../config' ); + + gulp.src( [config.paths.potSource] ) + .pipe( pot( { + domain: config.projectName, + package: config.projectTitle, + headers: false + } ) ) + .pipe( gulp.dest( config.output.potDestination + config.projectName + '.pot' ) ); + +} ); diff --git a/gulp/tasks/watch.js b/gulp/tasks/watch.js new file mode 100644 index 0000000..a303a6f --- /dev/null +++ b/gulp/tasks/watch.js @@ -0,0 +1,9 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'watch', ['sass','browserSync'], function () { + var config = require( '../config' ); + gulp.watch( config.paths.jsPath, ['js'] ); + gulp.watch( config.paths.sassPath, ['sass'] ); +} ); diff --git a/gulp/tasks/zip.js b/gulp/tasks/zip.js new file mode 100644 index 0000000..e875ba5 --- /dev/null +++ b/gulp/tasks/zip.js @@ -0,0 +1,31 @@ +'use strict'; + +var gulp = require( 'gulp' ); + +gulp.task( 'zip' , function () { + + var chmod = require( 'gulp-chmod' ), + zip = require( 'gulp-zip' ), + config = require( '../config' ); + + return gulp.src( config.buildInclude, { base: '../' } ) + .pipe( chmod( { + owner: { + read: true, + write: true, + execute: true + }, + group: { + read: true, + write: false, + execute: true + }, + others: { + read: true, + write: false, + execute: true + } + }, true ) ) + .pipe( zip( config.projectName + '.' + config.version + '.zip' ) ) + .pipe( gulp.dest( config.destination ) ); +} ); diff --git a/gulp/variables.js b/gulp/variables.js new file mode 100644 index 0000000..1a4bf78 --- /dev/null +++ b/gulp/variables.js @@ -0,0 +1,67 @@ +/** + * Use this file to define unique project details. + */ + +'use strict'; + +var project = require( '../package.json' ); + +module.exports = { + + /** + * The project slug (folder) + */ + projectSlug: project.name, + + /** + * The project's proper name + */ + projectName: project.description, + + /** + * Current project version + */ + version: project.version, + + /** + * Type of project (plugin/theme) + */ + type: 'plugin', + + /** + * Preferred languages folder + */ + languageFolder: 'languages', + + /** + * Local Development URL (for BrowserSync) + */ + url: 'local.wordpress-trunk.test', + + /** + * If blank, will be compact for themes, compressed for plugins. + * Define this manually to override (expanded, compact, compressed, nested) + */ + sassOutputStyle: '', + + /** + * Array of assets/packages for importing into project. + * Current packages available: 'assets-shortcodes', + * 'assets-sixtenpress', + * 'assets-slick', + * 'assets-tasks', + * 'assets-tgmpa' + */ + packages: [ + // 'assets-shortcodes', + // 'assets-sixtenpress', + // 'assets-slick', + // 'assets-tasks', + // 'assets-tgmpa' + ], + + /** + * Destination folder for project zip archives. + */ + buildDestination: '../../build' +}; diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..1f7ca02 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,10 @@ +/** + * gulpfile.js + */ +'use strict'; + +var gulp = require( 'gulp' ); +var requireDir = require( 'require-dir' ); + +// Require all tasks in gulp/tasks, including subfolders +requireDir( './gulp/tasks', { recurse: true } ); diff --git a/package.json b/package.json new file mode 100644 index 0000000..067473a --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "display-featured-image-genesis", + "description": "Display Featured Image for Genesis", + "version": "3.1.0", + "private": true, + "license": "GPL-2.0", + "devDependencies": { + "autoprefixer": "9.1.5", + "browser-sync": "2.24.7", + "css-mqpacker": "7.0.0", + "del": "^3.0.0", + "gulp": "^3.9.1", + "gulp-chmod": "^2.0.0", + "gulp-notify": "^3.2.0", + "gulp-postcss": "^8.0.0", + "gulp-rename": "^1.4.0", + "gulp-sass": "^4.0.1", + "gulp-uglify": "3.0.1", + "gulp-uglify-es": "^1.0.4", + "gulp-wp-pot": "^2.3.2", + "gulp-zip": "^4.2.0", + "perfectionist": "^2.4.0", + "postcss-import": "12.0.0", + "require-dir": "1.0.0" + }, + "browserslist": [ + "extends @wordpress/browserslist-config" + ], + "dependencies": { + "@wordpress/browserslist-config": "^2.2.2" + } +}