You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

197 line
4.8 KiB

  1. 'use strict';
  2. var gulp = require('gulp');
  3. var es = require('event-stream');
  4. var clean = require('gulp-clean');
  5. var concat = require('gulp-concat');
  6. var uglify = require('gulp-uglify');
  7. var rename = require('gulp-rename');
  8. var less = require('gulp-less');
  9. var wrap = require('gulp-wrap');
  10. var watch = require('gulp-watch');
  11. var connect = require('gulp-connect');
  12. var header = require('gulp-header');
  13. var order = require('gulp-order');
  14. var jshint = require('gulp-jshint');
  15. var runSequence = require('run-sequence');
  16. var cssnano = require('gulp-cssnano');
  17. var pkg = require('./package.json');
  18. var sourcemaps = require('gulp-sourcemaps');
  19. var banner = ['/**',
  20. ' * <%= pkg.name %> - <%= pkg.description %>',
  21. ' * @version v<%= pkg.version %>',
  22. ' * @link <%= pkg.homepage %>',
  23. ' * @license <%= pkg.license %>',
  24. ' */',
  25. ''].join('\n');
  26. /**
  27. * Clean ups ./dist folder
  28. */
  29. gulp.task('clean', function() {
  30. return gulp
  31. .src('./dist', {read: false})
  32. .pipe(clean({force: true}))
  33. .on('error', log);
  34. });
  35. /**
  36. * JShint all *.js files
  37. */
  38. gulp.task('lint', function () {
  39. return gulp.src('./src/main/javascript/**/*.js')
  40. .pipe(jshint())
  41. .pipe(jshint.reporter('jshint-stylish'));
  42. });
  43. /**
  44. * Build a distribution
  45. */
  46. gulp.task('dist', ['clean', 'lint'], _dist);
  47. function _dist() {
  48. return es.merge(
  49. gulp.src([
  50. './node_modules/es5-shim/es5-shim.js',
  51. './lib/sanitize-html.min.js',
  52. './src/main/javascript/**/*.js',
  53. './node_modules/swagger-client/browser/swagger-client.js'
  54. ]),
  55. gulp
  56. .src(['./src/main/template/templates.js'])
  57. .on('error', log)
  58. )
  59. .pipe(sourcemaps.init({loadMaps: true}))
  60. .pipe(order(['scripts.js', 'templates.js']))
  61. .pipe(concat('swagger-ui.js'))
  62. .pipe(wrap('(function(){<%= contents %>}).call(this);'))
  63. .pipe(header(banner, { pkg: pkg }))
  64. .pipe(sourcemaps.write())
  65. .pipe(gulp.dest('./dist'))
  66. .pipe(uglify())
  67. .on('error', log)
  68. .pipe(rename({extname: '.min.js'}))
  69. .on('error', log)
  70. .pipe(gulp.dest('./dist'))
  71. .pipe(connect.reload());
  72. }
  73. gulp.task('dev-dist', ['lint', 'dev-copy'], _dist);
  74. /**
  75. * Processes less files into CSS files
  76. */
  77. gulp.task('less', ['clean'], _less);
  78. function _less() {
  79. return gulp
  80. .src([
  81. './src/main/less/screen.less',
  82. './src/main/less/print.less',
  83. './src/main/less/reset.less',
  84. './src/main/less/style.less'
  85. ])
  86. .pipe(less())
  87. .on('error', function(err){ log(err); this.emit('end');})
  88. .pipe(gulp.dest('./src/main/html/css/'))
  89. .pipe(connect.reload());
  90. }
  91. gulp.task('dev-less', _less);
  92. /**
  93. * Copy lib and html folders
  94. */
  95. gulp.task('copy', ['less'], _copy);
  96. function _copy() {
  97. // copy JavaScript files inside lib folder
  98. gulp
  99. .src(['./lib/**/*.{js,map}',
  100. './node_modules/es5-shim/es5-shim.js'
  101. ])
  102. .pipe(gulp.dest('./dist/lib'))
  103. .on('error', log);
  104. // copy `lang` for translations
  105. gulp
  106. .src(['./lang/**/*.js'])
  107. .pipe(gulp.dest('./dist/lang'))
  108. .on('error', log);
  109. // copy all files inside html folder
  110. gulp
  111. .src(['./src/main/html/**/*'])
  112. .pipe(gulp.dest('./dist'))
  113. .on('error', log);
  114. }
  115. gulp.task('dev-copy', ['dev-less', 'copy-local-specs'], _copy);
  116. gulp.task('copy-local-specs', function () {
  117. // copy the test specs
  118. return gulp
  119. .src(['./test/specs/**/*'])
  120. .pipe(gulp.dest('./dist/specs'))
  121. .on('error', log);
  122. });
  123. gulp.task('minify-css', function() {
  124. /** Minify all CSS within dist folder, runs after dist process*/
  125. return gulp.src('./dist/css/*.css')
  126. .pipe(cssnano())
  127. .pipe(gulp.dest('./dist/css'));
  128. });
  129. gulp.task('uglify-libs', function() {
  130. /**
  131. * Minify all JS libs within the dist folder. A nice TODO would be to use versions from CDN
  132. */
  133. gulp.src('./dist/lib/*.js')
  134. .pipe(uglify())
  135. .pipe(gulp.dest('./dist/lib'));
  136. });
  137. /**
  138. * Watch for changes and recompile
  139. */
  140. gulp.task('watch', ['copy-local-specs'], function() {
  141. return watch([
  142. './src/**/*.{js,less,handlebars}',
  143. './src/main/html/*.html',
  144. './test/specs/**/*.{json,yaml}'
  145. ],
  146. function() {
  147. gulp.start('dev-dist');
  148. });
  149. });
  150. /**
  151. * Live reload web server of `dist`
  152. */
  153. gulp.task('connect', function() {
  154. connect.server({
  155. root: 'dist',
  156. livereload: true
  157. });
  158. });
  159. function log(error) {
  160. console.error(error.toString && error.toString());
  161. }
  162. gulp.task('handlebars', function () {
  163. gulp
  164. .src(['./src/main/template/templates.js'])
  165. .pipe(wrap('/* jshint ignore:start */ \n {<%= contents %>} \n /* jshint ignore:end */'))
  166. .pipe(gulp.dest('./src/main/template/'))
  167. .on('error', log);
  168. });
  169. gulp.task('default', function(callback) {
  170. runSequence(['dist', 'copy'],
  171. ['uglify-libs', 'minify-css'],
  172. callback);
  173. });
  174. gulp.task('serve', ['connect', 'watch']);
  175. gulp.task('dev', ['default'], function () {
  176. gulp.start('serve');
  177. });