gulpfile.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. var gulp = require('gulp');
  2. var browserSync = require('browser-sync').create();
  3. var mocha = require('gulp-mocha');
  4. var uglify = require('gulp-uglify');
  5. var rename = require("gulp-rename");
  6. var del = require('del');
  7. var eslint = require('gulp-eslint');
  8. var merge = require('merge-stream');
  9. var csslint = require('gulp-csslint');
  10. var cleanCSS = require('gulp-clean-css');
  11. var sourcemaps = require('gulp-sourcemaps');
  12. var testcafe = require('gulp-testcafe');
  13. var paths = {
  14. src: 'src',
  15. srcFiles: 'src/**/*',
  16. srcHTML: 'src/**/*.html',
  17. srcCSS: 'src/css/*.css',
  18. srcJS: 'src/js/*.js',
  19. demo: 'demo',
  20. demoFiles: 'demo/**/*',
  21. demoHTML: 'demo/**/*.html',
  22. demoCSSFolder: 'demo/css',
  23. demoCSS: 'demo/**/*.css',
  24. demoJSFolder: 'demo/js',
  25. demoJS: 'demo/**/*.js',
  26. dist: 'dist',
  27. distIndex: 'dist/index.html',
  28. distCSS: 'dist/**/*.css',
  29. distCSSFolder: 'dist/css',
  30. distJS: 'dist/**/*.js',
  31. distJSFolder: 'dist/js'
  32. };
  33. gulp.task('unit-tests', function () {
  34. return gulp.src(['test/unit/*.js'], {read: false})
  35. .pipe(mocha({reporter: 'spec'}));
  36. });
  37. gulp.task('integration-tests', ['unit-tests'], function () {
  38. return gulp.src(['test/integration/*.js'], {read: false})
  39. .pipe(mocha({reporter: 'spec'}));
  40. });
  41. gulp.task('addAssets', ['integration-tests'], function () {
  42. var fontawesomeCSS = gulp.src('node_modules/font-awesome/css/font-awesome.min.css')
  43. .pipe(gulp.dest(paths.demoCSSFolder));
  44. var fontawesomeFonts = gulp.src('node_modules/font-awesome/fonts/*')
  45. .pipe(gulp.dest(paths.demo + '/fonts'));
  46. var jsFiles = gulp.src([
  47. paths.srcJS,
  48. 'node_modules/jquery/dist/jquery.min.js',
  49. 'node_modules/jquery-mockjax/dist/jquery.mockjax.min.js',
  50. 'node_modules/html2canvas/dist/html2canvas.min.js',
  51. 'node_modules/jspdf/dist/jspdf.min.js'
  52. ])
  53. .pipe(gulp.dest(paths.demoJSFolder));
  54. var cssFiles = gulp.src(paths.srcCSS)
  55. .pipe(gulp.dest(paths.demoCSSFolder));
  56. return merge(fontawesomeCSS, fontawesomeFonts, jsFiles, cssFiles);
  57. });
  58. gulp.task('e2e-tests', ['addAssets'], function () {
  59. return gulp.src('test/e2e/**/test.js')
  60. .pipe(testcafe({ browsers: ['chrome:headless', 'firefox:headless'] }));
  61. });
  62. gulp.task('cleanupJS', function() {
  63. del([paths.distJSFolder + '/**']);
  64. });
  65. gulp.task('eslint', function () {
  66. return gulp.src(paths.srcJS)
  67. .pipe(eslint.format())
  68. .pipe(eslint.failOnError());
  69. });
  70. gulp.task('js', ['cleanupJS', 'eslint', 'e2e-tests'], function () {
  71. return gulp.src(paths.srcJS)
  72. .pipe(gulp.dest(paths.distJSFolder))
  73. .pipe(sourcemaps.init())
  74. .pipe(uglify())
  75. .pipe(rename('jquery.orgchart.min.js'))
  76. .pipe(sourcemaps.write('./'))
  77. .pipe(gulp.dest(paths.distJSFolder));
  78. });
  79. gulp.task('cleanupCSS', function() {
  80. del([paths.distCSSFolder + '/**']);
  81. });
  82. gulp.task('csslint', function() {
  83. gulp.src(paths.srcCSS)
  84. .pipe(csslint({
  85. 'adjoining-classes': false,
  86. 'box-sizing': false,
  87. 'box-model': false,
  88. 'fallback-colors': false,
  89. 'order-alphabetical': false
  90. }))
  91. .pipe(csslint.formatter());
  92. });
  93. gulp.task('css', ['cleanupCSS', 'csslint'], function () {
  94. return gulp.src(paths.srcCSS)
  95. .pipe(gulp.dest(paths.distCSSFolder))
  96. .pipe(cleanCSS())
  97. .pipe(rename('jquery.orgchart.min.css'))
  98. .pipe(gulp.dest(paths.distCSSFolder));
  99. });
  100. gulp.task('build', ['js', 'css']);
  101. gulp.task('reload', function (done) {
  102. browserSync.reload();
  103. done();
  104. });
  105. gulp.task('serve', ['build'], function () {
  106. browserSync.init({
  107. server: {
  108. baseDir: paths.demo
  109. }
  110. });
  111. gulp.watch(paths.srcFiles, ['build']);
  112. gulp.watch(paths.demoFiles, ['reload']);
  113. });