felixarntz/site-icon-extended

View on GitHub
gulpfile.js

Summary

Maintainability
B
4 hrs
Test Coverage
/* ---- THE FOLLOWING CONFIG SHOULD BE EDITED ---- */

var pkg = require( './package.json' );

function parseKeywords( keywords ) {
    // These keywords are useful for Packagist/NPM/Bower, but not for the WordPress plugin repository.
    var disallowed = [ 'wordpress', 'plugin' ];

    k = keywords;
    for ( var i in disallowed ) {
        var index = k.indexOf( disallowed[ i ] );
        if ( -1 < index ) {
            k.splice( index, 1 );
        }
    }

    return k;
}

var keywords = parseKeywords( pkg.keywords );

var config = {
    pluginSlug: pkg.name,
    pluginName: 'Site Icon Extended',
    pluginURI: pkg.homepage,
    author: pkg.author.name,
    authorURI: pkg.author.url,
    authorEmail: pkg.author.email,
    description: pkg.description,
    version: pkg.version,
    license: pkg.license.name,
    licenseURI: pkg.license.url,
    tags: keywords.join( ', ' ),
    contributors: [ 'flixos90' ].join( ', ' ),
    donateLink: 'https://leaves-and-love.net/wordpress-plugins/',
    minRequired: '4.3',
    testedUpTo: '4.5.3',
    translateURI: 'https://translate.wordpress.org/projects/wp-plugins/' + pkg.name,
    network: false
};

/* ---- DO NOT EDIT BELOW THIS LINE ---- */

// WP plugin header for main plugin file
var pluginheader =     'Plugin Name: ' + config.pluginName + '\n' +
                    'Plugin URI:  ' + config.pluginURI + '\n' +
                    'Description: ' + config.description + '\n' +
                    'Version:     ' + config.version + '\n' +
                    'Author:      ' + config.author + '\n' +
                    'Author URI:  ' + config.authorURI + '\n' +
                    'License:     ' + config.license + '\n' +
                    'License URI: ' + config.licenseURI + '\n' +
                    'Text Domain: ' + config.pluginSlug + '\n' +
                    ( config.network ? 'Network:     true' + '\n' : '' ) +
                    'Tags:        ' + config.tags;

// WP plugin header for readme.txt
var readmeheader =    'Plugin Name:       ' + config.pluginName + '\n' +
                    'Plugin URI:        ' + config.pluginURI + '\n' +
                    'Author:            ' + config.author + '\n' +
                    'Author URI:        ' + config.authorURI + '\n' +
                    'Contributors:      ' + config.contributors + '\n' +
                    ( config.donateLink ? 'Donate link:       ' + config.donateLink + '\n' : '' ) +
                    'Requires at least: ' + config.minRequired + '\n' +
                    'Tested up to:      ' + config.testedUpTo + '\n' +
                    'Stable tag:        ' + config.version + '\n' +
                    'Version:           ' + config.version + '\n' +
                    'License:           ' + config.license + '\n' +
                    'License URI:       ' + config.licenseURI + '\n' +
                    'Tags:              ' + config.tags;

// header for minified assets
var assetheader =    '/*!\n' +
                    ' * ' + config.pluginName + ' (' + config.pluginURI + ')\n' +
                    ' * By ' + config.author + ' (' + config.authorURI + ')\n' +
                    ' * Licensed under ' + config.license + ' (' + config.licenseURI + ')\n' +
                    ' */\n';


/* ---- REQUIRED DEPENDENCIES ---- */

var gulp = require( 'gulp' );

var sass = require( 'gulp-sass' );
var csscomb = require( 'gulp-csscomb' );
var minifyCSS = require( 'gulp-minify-css' );
var jshint = require( 'gulp-jshint' );
var concat = require( 'gulp-concat' );
var uglify = require( 'gulp-uglify' );
var gutil = require( 'gulp-util' );
var rename = require( 'gulp-rename' );
var replace = require( 'gulp-replace' );
var sort = require( 'gulp-sort' );
var banner = require( 'gulp-banner' );
var composer = require( 'gulp-composer' );
var bower = require( 'bower' );

var paths = {
    php: {
        files: [ './*.php', './inc/**/*.php' ]
    },
    sass: {
        files: [ './assets/src/sass/**/*.scss' ],
        src: './assets/src/sass/',
        dst: './assets/dist/css/'
    },
    js: {
        files: [ './assets/src/js/**/*.js' ],
        src: './assets/src/js/',
        dst: './assets/dist/js/'
    }
};

/* ---- MAIN TASKS ---- */

// general task (compile Sass and JavaScript and refresh POT file)
gulp.task( 'default', [ 'sass', 'js' ]);

// watch Sass and JavaScript files
gulp.task( 'watch', function() {
    gulp.watch( paths.sass.files, [ 'sass' ]);
    gulp.watch( paths.js.files, [ 'js' ]);
});

// build the plugin
gulp.task( 'build', [ 'author-replace', 'readme-replace' ], function() {
    gulp.start( 'header-replace' );
    gulp.start( 'default' );
});

/* ---- SUB TASKS ---- */

// compile Sass
gulp.task( 'sass', function( done ) {
    gulp.src( paths.sass.files )
        .pipe( sass({
            errLogToConsole: true
        }) )
        .pipe( csscomb() )
        .pipe( banner( assetheader ) )
        .pipe( gulp.dest( paths.sass.dst ) )
        .pipe( minifyCSS({
            keepSpecialComments: 0
        }) )
        .pipe( banner( assetheader ) )
        .pipe( rename({
            extname: '.min.css'
        }) )
        .pipe( gulp.dest( paths.sass.dst ) )
        .on( 'end', done );
});

// compile JavaScript
gulp.task( 'js', function( done ) {
    gulp.src( paths.js.files )
        .pipe( jshint({
            lookup: true
        }) )
        .pipe( banner( assetheader ) )
        .pipe( gulp.dest( paths.js.dst ) )
        .pipe( uglify() )
        .pipe( banner( assetheader ) )
        .pipe( rename({
            extname: '.min.js'
        }) )
        .pipe( gulp.dest( paths.js.dst ) )
        .on( 'end', done );
});

// replace the author header in all PHP files
gulp.task( 'author-replace', function( done ) {
    gulp.src( paths.php.files, { base: './' })
        .pipe( replace( /\*\s@author\s[^\r\n]+/, '* @author ' + config.author + ' <' + config.authorEmail + '>' ) )
        .pipe( gulp.dest( './' ) )
        .on( 'end', done );
});

// replace the plugin header in the main plugin file
gulp.task( 'header-replace', function( done ) {
    gulp.src( './' + config.pluginSlug + '.php' )
        .pipe( replace( /((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/, '/*\n' + pluginheader + '\n*/' ) )
        .pipe( gulp.dest( './' ) )
        .on( 'end', done );
});

// replace the plugin header in readme.txt
gulp.task( 'readme-replace', function( done ) {
    gulp.src( './readme.txt' )
        .pipe( replace( /\=\=\= (.+) \=\=\=([\s\S]+)\=\= Description \=\=/m, '=== ' + config.pluginName + ' ===\n\n' + readmeheader + '\n\n' + config.description + '\n\n== Description ==' ) )
        .pipe( gulp.dest( './' ) )
        .on( 'end', done );
});

// install Bower components
gulp.task( 'bower-install', function() {
    return bower.commands.install()
        .on( 'log', function( data ) {
            gutil.log( 'bower', gutil.colors.cyan( data.id ), data.message );
        });
});