gulpfile.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. var static_path = '../static/misago/';
  2. var packageJSON = require('./package');
  3. var gulp = require('gulp');
  4. var concat = require('gulp-concat');
  5. var connect = require('gulp-connect');
  6. var imageop = require('gulp-image-optimization');
  7. var jshint = require('gulp-jshint');
  8. var less = require('gulp-less');
  9. var minify = require('gulp-minify-css');
  10. var open = require('gulp-open');
  11. var sourcemaps = require('gulp-sourcemaps');
  12. var uglify = require('gulp-uglify');
  13. var del = require('del');
  14. var apps = [
  15. 'activation',
  16. 'forgotten-password',
  17. 'forum-navbar',
  18. 'register',
  19. 'sign-in',
  20. ];
  21. var vendors = [
  22. 'bower_components/jquery/dist/jquery.js',
  23. 'bower_components/mithril.js/mithril.js',
  24. 'bower_components/moment/min/moment.min.js',
  25. 'bower_components/bootstrap/js/transition.js',
  26. 'bower_components/bootstrap/js/affix.js',
  27. 'bower_components/bootstrap/js/modal.js',
  28. 'bower_components/bootstrap/js/dropdown.js'
  29. ];
  30. var ace = [
  31. 'bower_components/ace-builds/src/ace.js',
  32. 'bower_components/ace-builds/src/mode-markdown.js'
  33. ];
  34. var testLibs = [
  35. 'node_modules/qunitjs/qunit/qunit.js',
  36. 'bower_components/jquery-mockjax/dist/jquery.mockjax.js'
  37. ];
  38. var testStyles = [
  39. 'node_modules/qunitjs/qunit/qunit.css',
  40. ];
  41. var zxcvbn = 'bower_components/zxcvbn/dist/*.js';
  42. gulp.task('lint', function() {
  43. return gulp.src(['misago/*.js', 'misago/**/*.js'])
  44. .pipe(jshint(packageJSON.jshintConfig))
  45. .pipe(jshint.reporter('default'));
  46. });
  47. gulp.task('misagojs', ['lint'], function() {
  48. var appPath = function(app) {
  49. return 'misago/' + app + '/**/*.js'
  50. };
  51. return gulp.src([
  52. 'misago/app.js',
  53. 'misago/utils/**/*.js',
  54. 'misago/services/*.js',
  55. 'misago/models/**/*.js',
  56. 'misago/components/**/*.js',
  57. 'misago/forms/**/*.js'
  58. ].concat(apps.map(appPath)))
  59. .pipe(concat('misago.js'))
  60. .pipe(gulp.dest('dist'));
  61. });
  62. gulp.task('vendorjs', function() {
  63. return gulp.src(vendors)
  64. .pipe(concat('vendor.js'))
  65. .pipe(gulp.dest('dist'));
  66. });
  67. gulp.task('acejs', function() {
  68. return gulp.src(ace)
  69. .pipe(concat('ace.js'))
  70. .pipe(gulp.dest('dist'));
  71. });
  72. gulp.task('zxcvbn', function() {
  73. return gulp.src(zxcvbn)
  74. .pipe(gulp.dest('dist'));
  75. });
  76. gulp.task('collectjs', ['vendorjs', 'misagojs', 'acejs', 'zxcvbn'], function() {
  77. return gulp.src('dist/*.js')
  78. .pipe(gulp.dest('dist/js'));
  79. });
  80. gulp.task('compressjs', ['collectjs'], function() {
  81. return gulp.src('dist/js/*.js')
  82. .pipe(sourcemaps.init())
  83. .pipe(uglify())
  84. .pipe(sourcemaps.write('/'))
  85. .pipe(gulp.dest('dist/js'));
  86. });
  87. gulp.task('compileless', function() {
  88. return gulp.src('misago/style/misago.less')
  89. .pipe(less())
  90. .pipe(gulp.dest('dist'));
  91. });
  92. gulp.task('collectcss', ['compileless'], function() {
  93. return gulp.src('dist/*.css')
  94. .pipe(gulp.dest('dist/css'));
  95. });
  96. gulp.task('compresscss', ['collectcss'], function() {
  97. return gulp.src('dist/css/*.css')
  98. .pipe(minify())
  99. .pipe(gulp.dest('dist/css'));
  100. });
  101. gulp.task('copyfonts', function() {
  102. return gulp.src('static/fonts/**/*')
  103. .pipe(gulp.dest('dist/fonts'));
  104. });
  105. gulp.task('copyimg', function() {
  106. return gulp.src('static/img/**/*')
  107. .pipe(imageop({
  108. optimizationLevel: 9
  109. }))
  110. .pipe(gulp.dest('dist/img'));
  111. });
  112. gulp.task('cleanprod', function(cb) {
  113. del([
  114. static_path + 'css',
  115. static_path + 'js',
  116. static_path + 'fonts',
  117. static_path + 'img'
  118. ], {force: true}, cb);
  119. });
  120. gulp.task('prepareprod', [
  121. 'cleanprod',
  122. 'compressjs',
  123. 'compresscss',
  124. 'copyfonts',
  125. 'copyimg'
  126. ]);
  127. gulp.task('deployjs', ['prepareprod'], function() {
  128. return gulp.src('dist/js/**/*')
  129. .pipe(gulp.dest(static_path + 'js'));
  130. })
  131. gulp.task('deploycss', ['prepareprod'], function() {
  132. return gulp.src('dist/css/**/*')
  133. .pipe(gulp.dest(static_path + 'css'));
  134. })
  135. gulp.task('deployfonts', ['prepareprod'], function() {
  136. return gulp.src('dist/fonts/**/*')
  137. .pipe(gulp.dest(static_path + 'fonts'));
  138. })
  139. gulp.task('deployimg', ['prepareprod'], function() {
  140. return gulp.src('dist/img/**/*')
  141. .pipe(gulp.dest(static_path + 'img'));
  142. })
  143. gulp.task('default', ['deployjs', 'deploycss', 'deployfonts', 'deployimg']);
  144. gulp.task('quickdeployjs', ['collectjs'], function() {
  145. return gulp.src('dist/js/**/*')
  146. .pipe(gulp.dest(static_path + 'js'));
  147. });
  148. gulp.task('quickdeploycss', ['collectcss'], function() {
  149. return gulp.src('dist/css/**/*')
  150. .pipe(gulp.dest(static_path + 'css'));
  151. });
  152. gulp.task('watch', [
  153. 'quickdeployjs',
  154. 'quickdeploycss',
  155. 'deployfonts',
  156. 'deployimg'
  157. ], function() {
  158. gulp.watch('misago/**/*.js', ['quickdeployjs']);
  159. gulp.watch('misago/**/*.less', ['quickdeploycss']);
  160. });
  161. gulp.task('cleantest', function(cb) {
  162. del('test/dist', cb);
  163. });
  164. gulp.task('collecttestjs', ['cleantest', 'collectjs'], function() {
  165. return gulp.src('dist/js/**/*')
  166. .pipe(gulp.dest('test/dist/misago/js'));
  167. });
  168. gulp.task('collecttestcss', ['cleantest', 'collectcss'], function() {
  169. return gulp.src('dist/css/**/*')
  170. .pipe(gulp.dest('test/dist/misago/css'));
  171. });
  172. gulp.task('collecttestfonts', ['cleantest', 'copyfonts'], function() {
  173. return gulp.src('dist/fonts/**/*')
  174. .pipe(gulp.dest('test/dist/misago/fonts'));
  175. });
  176. gulp.task('collecttestimg', ['cleantest', 'copyimg'], function() {
  177. return gulp.src('dist/img/**/*')
  178. .pipe(gulp.dest('test/dist/misago/img'));
  179. });
  180. gulp.task('collecttestslibs', ['cleantest'], function() {
  181. return gulp.src(testLibs)
  182. .pipe(concat('libs.js'))
  183. .pipe(gulp.dest('test/dist'));
  184. });
  185. gulp.task('collecttestsstyles', ['cleantest'], function() {
  186. return gulp.src(testStyles)
  187. .pipe(concat('test-styles.css'))
  188. .pipe(gulp.dest('test/dist'));
  189. });
  190. gulp.task('collecttestsutils', ['cleantest'], function() {
  191. return gulp.src('test/utils/**/*.js')
  192. .pipe(jshint(packageJSON.jshintConfig))
  193. .pipe(jshint.reporter('default'))
  194. .pipe(concat('utils.js'))
  195. .pipe(gulp.dest('test/dist'));
  196. });
  197. gulp.task('collecttests', ['cleantest'], function() {
  198. return gulp.src('test/tests/**/*.js')
  199. .pipe(jshint(packageJSON.jshintConfig))
  200. .pipe(jshint.reporter('default'))
  201. .pipe(concat('tests.js'))
  202. .pipe(gulp.dest('test/dist'));
  203. });
  204. gulp.task('starttestserver', [
  205. 'collecttests',
  206. 'collecttestsutils',
  207. 'collecttestslibs',
  208. 'collecttestsstyles',
  209. 'collecttestjs',
  210. 'collecttestcss',
  211. 'collecttestfonts',
  212. 'collecttestimg'
  213. ], function() {
  214. connect.server({
  215. port: 8080,
  216. root: 'test'
  217. });
  218. gulp.src(__filename)
  219. .pipe(open({ uri: 'http://127.0.0.1:8080/' }));
  220. });
  221. gulp.task('test', ['starttestserver'], function() {
  222. gulp.watch([
  223. 'test/tests/**/*.js',
  224. 'test/utils/**/*.js',
  225. 'misago/**/*.js',
  226. 'misago/**/*.less'
  227. ], [
  228. 'collecttests',
  229. 'collecttestjs',
  230. 'collecttestcss',
  231. 'collecttestfonts',
  232. 'collecttestimg',
  233. 'collecttestsutils',
  234. 'collecttestslibs',
  235. 'collecttestsstyles'
  236. ]);
  237. });