Gruntfile.js 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. /**
  2. * Owl Carousel
  3. *
  4. * Bartosz Wojciechowski
  5. *
  6. * Copyright (c) 2014
  7. * Licensed under the MIT license.
  8. */
  9. module.exports = function(grunt) {
  10. if (!grunt.file.isDir('bower_components')) {
  11. grunt.fail.fatal('>> Please run "bower install" before continuing.');
  12. }
  13. require('load-grunt-tasks')(grunt);
  14. grunt
  15. .initConfig({
  16. pkg: grunt.file.readJSON('package.json'),
  17. app: grunt.file.readJSON('_config.json'),
  18. vendor: 'bower_components',
  19. banner: '/**\n' + ' * Owl Carousel v<%= pkg.version %>\n'
  20. + ' * Copyright 2013-<%= grunt.template.today("yyyy") %> <%= pkg.author.name %>\n'
  21. + ' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + ' */\n',
  22. // assemble
  23. assemble: {
  24. options: {
  25. flatten: false,
  26. expand: true,
  27. production: false,
  28. assets: '<%= app.docs.dest %>/assets',
  29. postprocess: require('pretty'),
  30. // metadata
  31. pkg: '<%= pkg %>',
  32. app: '<%= app %>',
  33. data: [ '<%= app.docs.src %>/data/*.{json,yml}' ],
  34. // templates
  35. partials: '<%= app.docs.templates %>/partials/*.hbs',
  36. layoutdir: '<%= app.docs.layouts %>/',
  37. // extensions
  38. helpers: '<%= app.docs.src %>/helpers/*.js'
  39. },
  40. index: {
  41. options: {
  42. layout: 'home.hbs'
  43. },
  44. files: [ {
  45. expand: true,
  46. cwd: '<%= app.docs.pages %>/',
  47. src: '*.hbs',
  48. dest: '<%= app.docs.dest %>/'
  49. } ]
  50. },
  51. demos: {
  52. options: {
  53. layout: 'demos.hbs'
  54. },
  55. files: [ {
  56. expand: true,
  57. cwd: '<%= app.docs.pages %>/demos/',
  58. src: '*.hbs',
  59. dest: '<%= app.docs.dest %>/demos'
  60. } ]
  61. },
  62. docs: {
  63. options: {
  64. layout: 'docs.hbs'
  65. },
  66. files: [ {
  67. expand: true,
  68. cwd: '<%= app.docs.pages %>/docs/',
  69. src: '*.hbs',
  70. dest: '<%= app.docs.dest %>/docs'
  71. } ]
  72. }
  73. },
  74. // clean
  75. clean: {
  76. docs: [ '<%= app.docs.dest %>/**/*.*' ],
  77. dist: [ 'dist/**/*.*' ]
  78. },
  79. // sass
  80. sass: {
  81. docs: {
  82. options: {
  83. outputStyle: 'compressed',
  84. includePaths: [ '<%= app.docs.src %>/assets/scss/', 'bower_components/foundation/scss' ]
  85. },
  86. files: {
  87. '<%= app.docs.dest %>/assets/css/docs.theme.min.css': '<%= app.docs.src %>/assets/scss/docs.theme.scss'
  88. }
  89. },
  90. dist: {
  91. options: {
  92. outputStyle: 'nested'
  93. },
  94. files: [ {
  95. expand: true,
  96. flatten: true,
  97. cwd: 'src/scss/',
  98. src: '*scss',
  99. dest: 'src/css/',
  100. ext: '.css',
  101. extDot: 'last'
  102. } ]
  103. }
  104. },
  105. concat: {
  106. dist: {
  107. files: {
  108. 'dist/assets/owl.carousel.css': [ 'src/css/*.css', '!src/css/owl.theme*.css' ],
  109. 'dist/<%= pkg.name %>.js': '<%= app.src.scripts %>'
  110. }
  111. }
  112. },
  113. cssmin: {
  114. dist: {
  115. files: {
  116. 'dist/assets/<%= pkg.name %>.min.css': [ 'src/css/*.css', '!src/css/owl.theme*.css' ],
  117. 'dist/assets/owl.theme.default.min.css': 'src/css/owl.theme.default.css',
  118. 'dist/assets/owl.theme.green.min.css': 'src/css/owl.theme.green.css'
  119. }
  120. }
  121. },
  122. jshint: {
  123. options: {
  124. jshintrc: 'src/js/.jshintrc'
  125. },
  126. dist: {
  127. src: [ '<%= app.src.scripts %>', 'Gruntfile.js' ]
  128. }
  129. },
  130. qunit: {
  131. dist: [ 'test/*.html' ]
  132. },
  133. jscs: {
  134. options: {
  135. config: 'src/js/.jscsrc',
  136. reporter: 'text.js',
  137. reporterOutput: 'jscs.report.txt'
  138. },
  139. dist: {
  140. src: [ '<%= app.src.scripts %>', 'Gruntfile.js' ]
  141. }
  142. },
  143. uglify: {
  144. dist: {
  145. files: {
  146. 'dist/<%= pkg.name %>.min.js': '<%= app.src.scripts %>'
  147. }
  148. }
  149. },
  150. // copy
  151. copy: {
  152. themes: {
  153. expand: true,
  154. flatten: true,
  155. cwd: 'src/css/',
  156. src: [ 'owl.theme.*' ],
  157. dest: 'dist/assets'
  158. },
  159. distImages: {
  160. expand: true,
  161. flatten: true,
  162. cwd: 'src/',
  163. src: [ 'img/*.*' ],
  164. dest: 'dist/assets'
  165. },
  166. distToDocs: {
  167. expand: true,
  168. cwd: 'dist/',
  169. src: [ '**/*.*' ],
  170. dest: '<%= app.docs.dest %>/assets/owlcarousel'
  171. },
  172. srcToDocs: {
  173. expand: true,
  174. cwd: 'src/js',
  175. src: [ '**/*.js' ],
  176. dest: '<%= app.docs.dest %>/assets/owlcarousel/src'
  177. },
  178. docsAssets: {
  179. expand: true,
  180. cwd: '<%= app.docs.src %>/assets/',
  181. src: [ 'css/*.css', 'vendors/*.js', 'vendors/*.map', 'img/*.*', 'js/*.*' ],
  182. dest: '<%= app.docs.dest %>/assets/'
  183. },
  184. readme: {
  185. files: [ {
  186. 'dist/LICENSE': 'LICENSE',
  187. 'dist/README.md': 'README.md'
  188. } ]
  189. }
  190. },
  191. // connect
  192. connect: {
  193. options: {
  194. port: 9000,
  195. open: true,
  196. livereload: true,
  197. hostname: 'localhost'
  198. },
  199. docs: {
  200. options: {
  201. base: "<%= app.docs.dest %>"
  202. }
  203. }
  204. },
  205. // watch
  206. watch: {
  207. options: {
  208. livereload: true
  209. },
  210. templates: {
  211. files: [ '<%= app.docs.templates %>/**/*.hbs' ],
  212. tasks: [ 'assemble' ]
  213. },
  214. sass: {
  215. files: [ '<%= app.docs.src %>/assets/**/*.scss' ],
  216. tasks: [ 'sass:docs' ]
  217. },
  218. sassDist: {
  219. files: [ 'src/**/*.scss' ],
  220. tasks: [ 'sass:dist', 'concat:dist', 'cssmin:dist', 'copy:themes','copy:distToDocs' ]
  221. },
  222. jsDocs: {
  223. files: [ '<%= app.docs.src %>/assets/**/*.js' ],
  224. tasks: [ 'copy:docsAssets' ]
  225. },
  226. js: {
  227. files: [ 'src/**/*.js' ],
  228. tasks: [ 'jscs:dist', 'jshint:dist', 'qunit:dist', 'uglify:dist', 'concat:dist', 'copy:distToDocs', 'copy:srcToDocs' ]
  229. },
  230. helpers: {
  231. files: [ '<%= app.src %>/helpers/*.js' ],
  232. tasks: [ 'assemble' ]
  233. },
  234. test: {
  235. files: [ 'test/*.html', 'test/unit/*.js' ],
  236. tasks: [ 'qunit:dist' ]
  237. }
  238. },
  239. // compress zip
  240. compress: {
  241. zip: {
  242. options: {
  243. archive: 'docs/download/owl.carousel.<%= pkg.version %>.zip'
  244. },
  245. files: [ {
  246. expand: true,
  247. cwd: 'dist/',
  248. src: [ '**' ],
  249. dest: 'owl.carousel.<%= pkg.version %>'
  250. } ]
  251. }
  252. },
  253. // publish to github pages
  254. 'gh-pages': {
  255. options: {
  256. base: 'docs'
  257. },
  258. src: '**/*'
  259. }
  260. });
  261. grunt.loadNpmTasks('assemble');
  262. // tasks
  263. grunt.registerTask('dist', [ 'clean:dist', 'sass:dist', 'concat:dist', 'cssmin:dist', 'copy:themes', 'copy:distImages', 'jscs:dist', 'uglify:dist', 'copy:readme' ]);
  264. grunt.registerTask('docs', [ 'dist', 'clean:docs', 'assemble', 'sass:docs', 'copy:docsAssets', 'copy:distToDocs', 'zip' ]);
  265. grunt.registerTask('test', [ 'jshint:dist', 'qunit:dist' ]);
  266. grunt.registerTask('default', [ 'dist', 'docs', 'test' ]);
  267. grunt.registerTask('serve', [ 'connect:docs', 'watch' ]);
  268. grunt.registerTask('zip', [ 'compress' ]);
  269. grunt.registerTask('deploy', [ 'docs', 'gh-pages' ]);
  270. };