PageRenderTime 30ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/Gruntfile.js

https://gitlab.com/nicholas-b-carter/patternfly
JavaScript | 210 lines | 150 code | 4 blank | 56 comment | 1 complexity | ec00a1121e2edc001c5bf1697e00e741 MD5 | raw file
  1. /*global module,require*/
  2. var lrSnippet = require('connect-livereload')();
  3. var mountFolder = function (connect, dir) {
  4. return connect.static(require('path').resolve(dir));
  5. };
  6. module.exports = function (grunt) {
  7. // load all grunt tasks
  8. require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
  9. // configurable paths
  10. var projectConfig = {
  11. dist: 'dist',
  12. src: ''
  13. };
  14. try {
  15. projectConfig.src = require('./bower.json').appPath || projectConfig.src;
  16. } catch (e) {}
  17. grunt.initConfig({
  18. clean: {
  19. build: '<%= config.dist %>'
  20. },
  21. config: projectConfig,
  22. connect: {
  23. server: {
  24. options: {
  25. hostname: '0.0.0.0',
  26. middleware: function (connect) {
  27. return [
  28. lrSnippet,
  29. mountFolder(connect, projectConfig.src),
  30. mountFolder(connect, projectConfig.src + 'tests')
  31. ];
  32. },
  33. port: 9000
  34. }
  35. }
  36. },
  37. copy: {
  38. main: {
  39. files: [
  40. // copy Bootstrap font files
  41. {expand: true, cwd: 'components/bootstrap/dist/fonts/', src: ['*'], dest: 'dist/fonts/'},
  42. // copy Font Awesome font files
  43. {expand: true, cwd: 'components/font-awesome/fonts/', src: ['*'], dest: 'dist/fonts/'},
  44. // copy Bootstrap less files
  45. {expand: true, cwd: 'components/bootstrap/less/', src: ['**'], dest: 'less/lib/bootstrap/'},
  46. // copy Font Awesome less files
  47. {expand: true, cwd: 'components/font-awesome/less/', src: ['**'], dest: 'less/lib/font-awesome/'},
  48. // copy Bootstrap-Combobox less files
  49. {expand: true, cwd: 'components/bootstrap-combobox/less/', src: ['**'], dest: 'less/lib/bootstrap-combobox/'},
  50. // copy Bootstrap-Datepicker less files
  51. {expand: true, cwd: 'components/bootstrap-datepicker/less/', src: ['**'], dest: 'less/lib/bootstrap-datepicker/'},
  52. // copy Bootstrap-Select less files
  53. {expand: true, cwd: 'components/bootstrap-select/less/', src: ['**'], dest: 'less/lib/bootstrap-select/'},
  54. // Bootstrap Switch less files must be manually copied because of edits made to source less for strict-math purposes
  55. // manually copy 'components/bootstrap-switch/src/less/bootstrap3/' and make sure any math is wrapped with parentheses
  56. // copy Bootstrap Touchspin css file
  57. {expand: true, cwd: 'components/bootstrap-touchspin/dist/', src: ['jquery.bootstrap-touchspin.css'], dest: 'less/lib/bootstrap-touchspin/'},
  58. // copy C3 css file
  59. {expand: true, cwd: 'components/c3/', src: ['c3.css'], dest: 'less/lib/c3/'},
  60. ],
  61. },
  62. },
  63. csscount: {
  64. production: {
  65. src: [
  66. 'dist/css/patternfly*.min.css'
  67. ],
  68. options: {
  69. maxSelectors: 4096
  70. }
  71. }
  72. },
  73. cssmin: {
  74. production: {
  75. files: [{
  76. expand: true,
  77. cwd: 'dist/css',
  78. src: ['patternfly*.css', '!*.min.css'],
  79. dest: 'dist/css',
  80. ext: '.min.css',
  81. }],
  82. options: {
  83. sourceMap: true
  84. }
  85. }
  86. },
  87. jekyll: {
  88. options: {
  89. src: 'tests-src'
  90. },
  91. tests: {
  92. options: {
  93. dest: 'tests'
  94. }
  95. }
  96. },
  97. jslint: {
  98. client: {
  99. src: [
  100. 'dist/js/patternfly.js'
  101. ],
  102. directives: {
  103. // node environment
  104. node: false,
  105. // browser environment
  106. browser: true,
  107. // allow dangling underscores
  108. nomen: true,
  109. // allow todo statements
  110. todo: true,
  111. // allow unused parameters
  112. unparam: true,
  113. // add predefined libraries
  114. predef: [
  115. 'jQuery',
  116. 'Event'
  117. ],
  118. indent: 2
  119. }
  120. }
  121. },
  122. less: {
  123. patternfly: {
  124. files: {
  125. 'dist/css/patternfly.css': 'less/patternfly.less',
  126. },
  127. options: {
  128. paths: ['less/'],
  129. strictMath: true,
  130. sourceMap: true,
  131. outputSourceFiles: true,
  132. sourceMapFilename: 'dist/css/patternfly.css.map',
  133. sourceMapURL: 'patternfly.css.map'
  134. }
  135. },
  136. patternflyAdditions: {
  137. files: {
  138. 'dist/css/patternfly-additions.css': 'less/patternfly-additions.less'
  139. },
  140. options: {
  141. paths: ['less/'],
  142. strictMath: true,
  143. sourceMap: true,
  144. outputSourceFiles: true,
  145. sourceMapFilename: 'dist/css/patternfly-additions.css.map',
  146. sourceMapURL: 'patternfly-additions.css.map'
  147. }
  148. }
  149. },
  150. uglify: {
  151. options: {
  152. mangle: false
  153. },
  154. production: {
  155. files: {
  156. 'dist/js/patternfly.min.js': ['dist/js/patternfly.js']
  157. }
  158. }
  159. },
  160. watch: {
  161. copy: {
  162. files: 'components/**/*',
  163. tasks: ['copy']
  164. },
  165. jekyll: {
  166. files: 'tests-src/**/*',
  167. tasks: ['jekyll']
  168. },
  169. less: {
  170. files: 'less/*.less',
  171. tasks: ['less']
  172. },
  173. css: {
  174. files: ['dist/css/patternfly*.css', 'dist/css/!*.min.css'],
  175. tasks: ['cssmin', 'csscount']
  176. },
  177. js: {
  178. files: ['dist/js/*.js', '!dist/js/*.min.js'],
  179. tasks: ['jslint', 'uglify']
  180. },
  181. livereload: {
  182. files: ['dist/css/*.css', 'dist/js/*.js', 'tests/*.html', '!tests-src/*.html']
  183. },
  184. options: {
  185. livereload: true
  186. }
  187. }
  188. });
  189. grunt.registerTask('build', [
  190. 'copy',
  191. 'jekyll',
  192. 'less',
  193. 'cssmin',
  194. 'csscount',
  195. 'jslint',
  196. 'uglify'
  197. ]);
  198. grunt.registerTask('server', [
  199. 'connect:server',
  200. 'watch'
  201. ]);
  202. grunt.registerTask('default', ['build']);
  203. };