vhost-audit/contrib/contextmenu/gulpfile.js

177 lines
5.2 KiB
JavaScript

'use strict';
var gulp = require('gulp');
var plugins = require('gulp-load-plugins')();
var sass = require('gulp-sass');
var pkg = require('./package');
var scripts = {
name: 'jquery.contextMenu.js',
min: 'jquery.contextMenu.min.js',
all: [
'gulpfile.js',
'src/jquery.contextMenu.js',
'dist/jquery.contextMenu.js'
],
main: 'dist/jquery.contextMenu.js',
src: [
'src/jquery.contextMenu.js'
],
dest: 'dist',
libs: [
'bower_components/jquery-ui/ui/position.js',
'bower_components/jquery-ui/ui/minified/position.min.js'
]
};
var styles = {
name: 'jquery.contextMenu.css',
min: 'jquery.contextMenu.min.css',
all: [
'src/sass/**/*.scss'
],
main: 'dist/jquery.contextMenu.css',
src: 'src/sass/jquery.contextMenu.scss',
dest: 'dist'
};
var icons = {
src: 'src/icons/*.svg',
templateFileFont: 'src/sass/icons/_variables.scss.tpl',
templateFileIconClasses: 'src/sass/icons/_icon_classes.scss.tpl',
fontOutputPath: 'dist/font',
scssOutputPath: 'src/sass/icons/'
};
var replacement = {
regexp: /@\w+/g,
filter: function (placeholder) {
switch (placeholder) {
case '@VERSION':
placeholder = pkg.version;
break;
case '@YEAR':
placeholder = (new Date()).getFullYear();
break;
case '@DATE':
placeholder = (new Date()).toISOString();
break;
}
return placeholder;
}
};
gulp.task('jshint', function () {
return gulp.src(scripts.src).
pipe(plugins.jshint('src/.jshintrc')).
pipe(plugins.jshint.reporter('default'));
});
gulp.task('jscs', function () {
return gulp.src(scripts.src).
pipe(plugins.jscs());
});
gulp.task('js', ['jshint', 'jscs', 'jslibs'], function () {
return gulp.src(scripts.src).
pipe(plugins.sourcemaps.init()).
pipe(plugins.replace(replacement.regexp, replacement.filter)).
pipe(gulp.dest(scripts.dest)).
pipe(plugins.rename(scripts.min)).
pipe(plugins.uglify({
preserveComments: 'some'
})).
pipe(plugins.sourcemaps.write('.')).
pipe(gulp.dest(scripts.dest));
});
gulp.task('jslibs', function (){
return gulp.src(scripts.libs).
pipe(plugins.rename({prefix: 'jquery.ui.'})).
pipe(gulp.dest('src')).
pipe(gulp.dest('dist'));
});
gulp.task('css', function () {
return gulp.src(styles.src).
pipe(sass()).
pipe(plugins.csslint('src/.csslintrc')).
pipe(plugins.csslint.reporter()).
pipe(plugins.sourcemaps.init()).
pipe(plugins.replace(replacement.regexp, replacement.filter)).
pipe(plugins.autoprefixer({
browsers: [
'Android 2.3',
'Android >= 4',
'Chrome >= 20',
'Firefox >= 24',
'Explorer >= 8',
'iOS >= 6',
'Opera >= 12',
'Safari >= 6'
]
})).
pipe(plugins.csscomb('src/.csscomb.json')).
pipe(plugins.rename(styles.name)).
pipe(gulp.dest(styles.dest)).
pipe(plugins.rename(styles.min)).
pipe(plugins.minifyCss()).
pipe(plugins.sourcemaps.write('.')).
pipe(gulp.dest(styles.dest));
});
gulp.task('build-icons', function () {
var iconfont = require('gulp-iconfont');
var consolidate = require('gulp-consolidate');
gulp.src(icons.src)
.pipe(iconfont({
fontName: 'context-menu-icons',
fontHeight: 1024,
descent: 64,
normalize: true,
appendCodepoints: false,
startCodepoint: 0xE001
}))
.on('glyphs', function (glyphs) {
var options = {
glyphs: glyphs,
className: 'context-menu-icon',
mixinName: 'context-menu-item-icon'
};
gulp.src(icons.templateFileFont)
.pipe(consolidate('lodash', options))
.pipe(plugins.rename({basename: '_variables', extname: '.scss'}))
.pipe(gulp.dest(icons.scssOutputPath));
gulp.src(icons.templateFileIconClasses)
.pipe(consolidate('lodash', options))
.pipe(plugins.rename('_icons.scss'))
.pipe(gulp.dest('src/sass')); // set path to export your sample HTML
})
.pipe(gulp.dest(icons.fontOutputPath));
});
/**
* Update paths in integration tests that are generated by the documentation
* generator so they use the local source.
*/
gulp.task('integration-test-paths', function(){
return gulp.src('test/integration/html/*.html').
pipe(plugins.replace('http\:\/\/swisnl\.github\.io\/jQuery\-contextMenu\/dist\/', '\.\.\/\.\.\/\.\.\/src\/')).
pipe(plugins.replace('\/src\/jquery.contextMenu.css', '\/dist\/jquery.contextMenu.css')).
pipe(plugins.replace('http\:\/\/swisnl\.github\.io\/jQuery-contextMenu\/js\/jquery\.ui\.position\.min\.js', '\.\.\/\.\.\/\.\.\/src\/jquery\.ui\.position\.min\.js')).
pipe(gulp.dest('test/integration/html/'));
});
gulp.task('watch', ['js', 'css'], function () {
gulp.watch(scripts.src, ['js']);
gulp.watch(styles.all, ['css']);
});
gulp.task('build', ['build-icons', 'css', 'js', 'integration-test-paths']);
gulp.task('default', ['watch']);