177 lines
5.2 KiB
JavaScript
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']);
|