gulpfile.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Utilities
  2. var autoprefixer = require('autoprefixer');
  3. var cssnano = require('cssnano');
  4. var fs = require('fs');
  5. // Gulp
  6. var gulp = require('gulp');
  7. // Gulp plugins
  8. var concat = require('gulp-concat');
  9. var gutil = require('gulp-util');
  10. var header = require('gulp-header');
  11. var postcss = require('gulp-postcss');
  12. var rename = require('gulp-rename');
  13. var runSequence = require('run-sequence');
  14. // Misc/global vars
  15. var pkg = JSON.parse(fs.readFileSync('package.json'));
  16. var activatedAnimations = activateAnimations();
  17. // Task options
  18. var opts = {
  19. destPath: './',
  20. concatName: 'animate.css',
  21. autoprefixer: {
  22. browsers: ['> 1%', 'last 2 versions', 'Firefox ESR'],
  23. cascade: false,
  24. },
  25. minRename: {
  26. suffix: '.min',
  27. },
  28. banner: [
  29. '@charset "UTF-8";\n',
  30. '/*!',
  31. ' * <%= name %> -<%= homepage %>',
  32. ' * Version - <%= version %>',
  33. ' * Licensed under the MIT license - http://opensource.org/licenses/MIT',
  34. ' *',
  35. ' * Copyright (c) <%= new Date().getFullYear() %> <%= author.name %>',
  36. ' */\n\n',
  37. ].join('\n'),
  38. };
  39. // ----------------------------
  40. // Gulp task definitions
  41. // ----------------------------
  42. gulp.task('default', function() {
  43. runSequence('createCSS', 'addHeader');
  44. });
  45. gulp.task('createCSS', function() {
  46. return gulp
  47. .src(activatedAnimations)
  48. .pipe(concat(opts.concatName))
  49. .pipe(postcss([autoprefixer(opts.autoprefixer)]))
  50. .pipe(gulp.dest(opts.destPath))
  51. .pipe(postcss([cssnano({reduceIdents: {keyframes: false}})]))
  52. .pipe(rename(opts.minRename))
  53. .pipe(gulp.dest(opts.destPath));
  54. });
  55. gulp.task('addHeader', function() {
  56. return gulp
  57. .src('*.css')
  58. .pipe(header(opts.banner, pkg))
  59. .pipe(gulp.dest(opts.destPath));
  60. });
  61. // ----------------------------
  62. // Helpers/functions
  63. // ----------------------------
  64. // Read the config file and return an array of the animations to be activated
  65. function activateAnimations() {
  66. var categories = JSON.parse(fs.readFileSync('animate-config.json')),
  67. category,
  68. files,
  69. file,
  70. target = ['source/_base.css'],
  71. count = 0;
  72. for (category in categories) {
  73. if (categories.hasOwnProperty(category)) {
  74. files = categories[category];
  75. for (file in files) {
  76. if (files[file]) {
  77. // marked as true
  78. target.push('source/' + category + '/' + file + '.css');
  79. count += 1;
  80. }
  81. }
  82. }
  83. }
  84. if (!count) {
  85. gutil.log('No animations activated.');
  86. } else {
  87. gutil.log(count + (count > 1 ? ' animations' : ' animation') + ' activated.');
  88. }
  89. return target;
  90. }