/Gruntfile.js

https://gitlab.com/ModioAB/kanban · JavaScript · 286 lines · 76 code · 9 blank · 201 comment · 0 complexity · 1cbbf699470f026da64840a5f4b14347 MD5 · raw file

  1. module.exports = function (grunt) {
  2. grunt.initConfig({
  3. pkg: grunt.file.readJSON('package.json'),
  4. sass: {
  5. options: {
  6. includePaths: [
  7. 'bower_components/foundation/scss',
  8. 'bower_components/font-awesome/scss/',
  9. 'bower_components/sass-flex-mixin/',
  10. 'bower_components/angularjs-datepicker/src/css/'
  11. ]
  12. },
  13. dist: {
  14. options: {
  15. outputStyle: 'compressed'
  16. },
  17. files: {
  18. 'web/assets/css/app.css': 'src/scss/app.scss'
  19. }
  20. }
  21. },
  22. concat: {
  23. dist: {
  24. src: [
  25. "src/**/*.module.js",
  26. "src/**/**!(.module).js"
  27. ],
  28. dest: "web/assets/js/app.js"
  29. }
  30. },
  31. uglify: {
  32. dist: {
  33. files: {
  34. "web/assets/js/app.min.js": ["web/assets/js/app.js"]
  35. }
  36. }
  37. },
  38. copy: {
  39. main: {
  40. files: [
  41. {
  42. flatten: false,
  43. expand: true,
  44. cwd: 'bower_components/twemoji/svg/',
  45. src: ['**/*.svg'],
  46. dest: 'web/images/twemoji/svg/',
  47. filter: 'isFile'
  48. },
  49. {
  50. flatten: true,
  51. src: ['bower_components/twemoji/twemoji.min.js'],
  52. dest: 'web/assets/js/twemoji.min.js',
  53. filter: 'isFile'
  54. },
  55. {
  56. flatten: true,
  57. src: ['bower_components/markdown-it-emoji/dist/markdown-it-emoji.min.js'],
  58. dest: 'web/assets/js/markdown-it-emoji.min.js',
  59. filter: 'isFile'
  60. },
  61. {
  62. flatten: true,
  63. src: ['bower_components/angular-mocks/angular-mocks.js'],
  64. dest: 'web/assets/js/angular-mocks.js',
  65. filter: 'isFile'
  66. },
  67. {
  68. flatten: true,
  69. src: ['bower_components/reconnectingWebsocket/reconnecting-websocket.js'],
  70. dest: 'web/assets/js/reconnecting-websocket.js',
  71. filter: 'isFile'
  72. },
  73. {
  74. flatten: true,
  75. src: ['bower_components/markdown-it/dist/markdown-it.js'],
  76. dest: 'web/assets/js/markdown-it.js',
  77. filter: 'isFile'
  78. },
  79. {
  80. flatten: true,
  81. src: ['bower_components/a0-angular-storage/dist/angular-storage.js'],
  82. dest: 'web/assets/js/angular-storage.js',
  83. filter: 'isFile'
  84. },
  85. {
  86. flatten: true,
  87. src: ['bower_components/angular-underscore/angular-underscore.js'],
  88. dest: 'web/assets/js/angular-underscore.js',
  89. filter: 'isFile'
  90. },
  91. {
  92. flatten: true,
  93. src: ['bower_components/underscore/underscore.js'],
  94. dest: 'web/assets/js/underscore.js',
  95. filter: 'isFile'
  96. },
  97. {
  98. flatten: true,
  99. src: ['bower_components/angular-foundation/src/topbar/topbar.js'],
  100. dest: 'web/assets/js/topbar.js',
  101. filter: 'isFile'
  102. },
  103. {
  104. flatten: true,
  105. src: ['bower_components/angular-foundation/src/dropdownToggle/dropdownToggle.js'],
  106. dest: 'web/assets/js/dropdownToggle.js',
  107. filter: 'isFile'
  108. },
  109. {
  110. flatten: true,
  111. src: ['bower_components/angular-foundation/src/position/position.js'],
  112. dest: 'web/assets/js/position.js',
  113. filter: 'isFile'
  114. },
  115. {
  116. flatten: true,
  117. src: ['bower_components/angular-foundation/src/typeahead/typeahead.js'],
  118. dest: 'web/assets/js/typeahead.js',
  119. filter: 'isFile'
  120. },
  121. {
  122. flatten: true,
  123. src: ['bower_components/angular-foundation/src/bindHtml/bindHtml.js'],
  124. dest: 'web/assets/js/bindHtml.js',
  125. filter: 'isFile'
  126. },
  127. {
  128. flatten: true,
  129. src: ['bower_components/angular-foundation/src/mediaQueries/mediaQueries.js'],
  130. dest: 'web/assets/js/mediaQueries.js',
  131. filter: 'isFile'
  132. },
  133. {
  134. flatten: true,
  135. src: ['bower_components/marked/lib/marked.js'],
  136. dest: 'web/assets/js/marked.js',
  137. filter: 'isFile'
  138. },
  139. {
  140. flatten: true,
  141. src: ['bower_components/angular-loading-bar/build/loading-bar.js'],
  142. dest: 'web/assets/js/loading-bar.js',
  143. filter: 'isFile'
  144. },
  145. {
  146. flatten: true,
  147. src: ['bower_components/angular-loading-bar/build/loading-bar.css'],
  148. dest: 'web/assets/css/loading-bar.css',
  149. filter: 'isFile'
  150. },
  151. {
  152. flatten: true,
  153. src: ['bower_components/angular-foundation/src/transition/transition.js'],
  154. dest: 'web/assets/js/transition.js',
  155. filter: 'isFile'
  156. },
  157. {
  158. flatten: true,
  159. src: ['bower_components/ng-sortable/dist/ng-sortable.js'],
  160. dest: 'web/assets/js/ng-sortable.js',
  161. filter: 'isFile'
  162. },
  163. {
  164. flatten: true,
  165. src: ['bower_components/angular/angular.js'],
  166. dest: 'web/assets/js/angular.js',
  167. filter: 'isFile'
  168. },
  169. {
  170. flatten: true,
  171. src: ['bower_components/angular-ui-router/release/angular-ui-router.min.js'],
  172. dest: 'web/assets/js/angular-ui-router.js',
  173. filter: 'isFile'
  174. },
  175. {
  176. flatten: true,
  177. src: ['bower_components/ng-sortable/dist/ng-sortable.min.css'],
  178. dest: 'web/assets/css/ng-sortable.min.css',
  179. filter: 'isFile'
  180. },
  181. {
  182. flatten: true,
  183. src: ['bower_components/angularjs-datepicker/dist/angular-datepicker.min.js'],
  184. dest: 'web/assets/js/angularjs-datepicker.min.js',
  185. filter: 'isFile'
  186. },
  187. {
  188. flatten: false,
  189. expand: true,
  190. cwd: 'bower_components/angular-foundation/template',
  191. src: '**',
  192. dest: 'web/template/',
  193. filter: 'isFile'
  194. },
  195. {
  196. flatten: true,
  197. expand: true,
  198. cwd: 'bower_components/foundation/js/foundation/',
  199. src: '**',
  200. dest: 'web/assets/js',
  201. filter: 'isFile'
  202. },
  203. {
  204. flatten: true,
  205. expand: true,
  206. cwd: 'bower_components/font-awesome/fonts/',
  207. src: '**',
  208. dest: 'web/assets/fonts/',
  209. filter: 'isFile'
  210. },
  211. {
  212. flatten: false,
  213. expand: true,
  214. cwd: 'src/',
  215. src: ['**/*.js'],
  216. dest: 'web/assets/js/',
  217. filter: 'isFile'
  218. },
  219. {
  220. flatten: false,
  221. expand: true,
  222. cwd: 'src/',
  223. src: ['**/*.html'],
  224. dest: 'web/assets/html/',
  225. filter: 'isFile'
  226. },
  227. {
  228. flatten: true,
  229. src: ['src/user/views/oauth.html'],
  230. dest: 'web/assets/html/user/views/oauth.html',
  231. filter: 'isFile'
  232. },
  233. {
  234. flatten: false,
  235. expand: true,
  236. cwd: 'src/static/images/',
  237. src: ['**/*.svg', '**/*.png'],
  238. dest: 'web/images/',
  239. filter: 'isFile'
  240. }
  241. ]
  242. }
  243. },
  244. watch: {
  245. grunt: {
  246. files: ['Gruntfile.js'],
  247. tasks: ['sass', 'copy']
  248. },
  249. sass: {
  250. files: 'src/scss/*.scss',
  251. tasks: ['sass']
  252. },
  253. copy: {
  254. files: ['src/**/*.js', 'src/**/*.html'],
  255. tasks: ['copy']
  256. },
  257. concat: {
  258. files: ['src/**/*.js'],
  259. tasks: ['concat']
  260. },
  261. uglify: {
  262. files: ['web/assets/js/app.js'],
  263. tasks: ['uglify']
  264. }
  265. }
  266. });
  267. grunt.loadNpmTasks('grunt-sass');
  268. grunt.loadNpmTasks('grunt-contrib-watch');
  269. grunt.loadNpmTasks('grunt-contrib-copy');
  270. grunt.loadNpmTasks('grunt-contrib-concat');
  271. grunt.loadNpmTasks('grunt-contrib-uglify');
  272. grunt.registerTask('build', ['sass', 'copy', 'concat', 'uglify']);
  273. grunt.registerTask('default', ['build', 'watch']);
  274. };