Gruntfile.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. module.exports = function (grunt) {
  2. // Full list of files that must be included by RequireJS
  3. includes = [
  4. 'jquery.select2'
  5. ];
  6. amdIncludes = [
  7. 'almond'
  8. ];
  9. fullIncludes = [
  10. 'jquery',
  11. 'jquery.mousewheel',
  12. 'select2/compat/matcher',
  13. 'select2/compat/initSelection',
  14. 'select2/compat/query',
  15. 'select2/dropdown/attachContainer'
  16. ].concat(includes);
  17. var i18nModules = [];
  18. var i18nPaths = {};
  19. var i18nFiles = grunt.file.expand({
  20. cwd: 'src/js'
  21. }, 'select2/i18n/*.js');
  22. for (var i = 0; i < i18nFiles.length; i++) {
  23. var file = i18nFiles[i];
  24. var name = file.split('.')[0];
  25. i18nModules.push({
  26. name: name
  27. });
  28. i18nPaths[name] = '../../' + name;
  29. }
  30. grunt.initConfig({
  31. clean: {
  32. docs: ['docs/_site']
  33. },
  34. uglify: {
  35. 'dist': {
  36. src: 'dist/js/select2.js',
  37. dest: 'dist/js/select2.min.js'
  38. },
  39. 'dist.full': {
  40. src: 'dist/js/select2.full.js',
  41. dest: 'dist/js/select2.full.min.js'
  42. }
  43. },
  44. qunit: {
  45. all: [
  46. 'tests/**/*.html'
  47. ]
  48. },
  49. 'gh-pages': {
  50. options: {
  51. base: 'docs',
  52. branch: 'master',
  53. clone: 'node_modules/grunt-gh-pages/repo',
  54. message: 'Updated docs with master',
  55. push: true,
  56. repo: '[email protected]:select2/select2.github.io.git'
  57. },
  58. src: '**'
  59. },
  60. jekyll: {
  61. options: {
  62. src: 'docs',
  63. dest: 'docs/_site'
  64. },
  65. build: {
  66. d: null
  67. },
  68. serve: {
  69. options: {
  70. serve: true,
  71. watch: true
  72. }
  73. }
  74. },
  75. jshint: {
  76. options: {
  77. jshintrc: true
  78. },
  79. code: {
  80. src: ['src/js/**/*.js']
  81. },
  82. tests: {
  83. src: ['tests/**/*.js']
  84. }
  85. },
  86. sass: {
  87. dist: {
  88. options: {
  89. outputStyle: 'compressed'
  90. },
  91. files: {
  92. 'dist/css/select2.min.css': [
  93. 'src/scss/core.scss',
  94. 'src/scss/theme/default/layout.css'
  95. ]
  96. }
  97. },
  98. dev: {
  99. options: {
  100. outputStyle: 'nested'
  101. },
  102. files: {
  103. 'dist/css/select2.css': [
  104. 'src/scss/core.scss',
  105. 'src/scss/theme/default/layout.css'
  106. ]
  107. }
  108. }
  109. },
  110. symlink: {
  111. docs: {
  112. cwd: 'dist',
  113. expand: true,
  114. overwrite: false,
  115. src: [
  116. '*'
  117. ],
  118. dest: 'docs/dist',
  119. filter: 'isDirectory'
  120. }
  121. },
  122. requirejs: {
  123. 'dist': {
  124. options: {
  125. baseUrl: 'src/js',
  126. optimize: 'none',
  127. name: 'select2/core',
  128. out: 'dist/js/select2.js',
  129. include: amdIncludes.concat(includes),
  130. paths: {
  131. almond: '../../vendor/almond-0.2.9',
  132. jquery: 'jquery.shim'
  133. },
  134. wrap: grunt.file.readJSON('src/js/banner.json')
  135. }
  136. },
  137. 'dist.full': {
  138. options: {
  139. baseUrl: 'src/js',
  140. optimize: 'none',
  141. name: 'select2/core',
  142. out: 'dist/js/select2.full.js',
  143. include: amdIncludes.concat(fullIncludes),
  144. paths: {
  145. almond: '../../vendor/almond-0.2.9',
  146. jquery: 'jquery.shim',
  147. 'jquery.mousewheel': '../../vendor/jquery.mousewheel'
  148. },
  149. wrap: grunt.file.readJSON('src/js/banner.json')
  150. }
  151. },
  152. 'amd': {
  153. options: {
  154. baseUrl: 'src/js',
  155. optimize: 'none',
  156. name: 'select2/core',
  157. out: 'dist/js/select2.amd.js',
  158. include: includes,
  159. paths: {
  160. jquery: 'empty:'
  161. },
  162. wrap: grunt.file.readJSON('src/js/banner.amd.json')
  163. }
  164. },
  165. 'amd.full': {
  166. options: {
  167. baseUrl: 'src/js',
  168. optimize: 'none',
  169. name: 'select2/core',
  170. out: 'dist/js/select2.amd.full.js',
  171. include: fullIncludes,
  172. paths: {
  173. jquery: 'empty:',
  174. 'jquery.mousewheel': '../../vendor/jquery.mousewheel'
  175. },
  176. wrap: grunt.file.readJSON('src/js/banner.amd.json')
  177. }
  178. },
  179. 'i18n': {
  180. options: {
  181. baseUrl: 'src/js/select2/i18n',
  182. dir: 'dist/js/i18n',
  183. paths: i18nPaths,
  184. modules: i18nModules,
  185. wrap: grunt.file.readJSON('src/js/banner.json')
  186. }
  187. }
  188. },
  189. watch: {
  190. js: {
  191. files: [
  192. 'src/js/select2/**/*.js',
  193. 'tests/**/*.js'
  194. ],
  195. tasks: [
  196. 'compile',
  197. 'test',
  198. 'minify'
  199. ]
  200. },
  201. css: {
  202. files: [
  203. 'src/scss/**/*.scss'
  204. ],
  205. tasks: [
  206. 'compile',
  207. 'minify'
  208. ]
  209. }
  210. }
  211. });
  212. grunt.loadNpmTasks('grunt-contrib-clean');
  213. grunt.loadNpmTasks('grunt-contrib-concat');
  214. grunt.loadNpmTasks('grunt-contrib-jshint');
  215. grunt.loadNpmTasks('grunt-contrib-qunit');
  216. grunt.loadNpmTasks('grunt-contrib-requirejs');
  217. grunt.loadNpmTasks('grunt-contrib-symlink');
  218. grunt.loadNpmTasks('grunt-contrib-uglify');
  219. grunt.loadNpmTasks('grunt-contrib-watch');
  220. grunt.loadNpmTasks('grunt-gh-pages');
  221. grunt.loadNpmTasks('grunt-jekyll');
  222. grunt.loadNpmTasks('grunt-sass');
  223. grunt.registerTask('default', ['compile', 'test', 'minify']);
  224. grunt.registerTask('compile', ['requirejs', 'sass:dev']);
  225. grunt.registerTask('minify', ['uglify', 'sass:dist']);
  226. grunt.registerTask('test', ['qunit', 'jshint']);
  227. grunt.registerTask('docs', ['symlink:docs', 'jekyll:serve']);
  228. grunt.registerTask('docs-release', ['default', 'clean:docs', 'gh-pages']);
  229. };