Gruntfile.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. // AdminLTE Gruntfile
  2. module.exports = function (grunt) { // jshint ignore:line
  3. 'use strict'
  4. grunt.initConfig({
  5. pkg : grunt.file.readJSON('package.json'),
  6. watch : {
  7. less : {
  8. // Compiles less files upon saving
  9. files: ['build/less/*.less'],
  10. tasks: ['less:development', 'less:production']
  11. },
  12. js : {
  13. // Compile js files upon saving
  14. files: ['build/js/*.js', 'dist/js/app.js'],
  15. tasks: ['js']
  16. },
  17. skins: {
  18. // Compile any skin less files upon saving
  19. files: ['build/less/skins/*.less'],
  20. tasks: ['less:skins', 'less:minifiedSkins']
  21. }
  22. },
  23. notify: {
  24. less : {
  25. title : 'LESS Compiler',
  26. message: 'LESS finished running'
  27. },
  28. uglify: {
  29. options: {
  30. title : 'JS Compiler',
  31. message: 'JS bundler finished running'
  32. }
  33. }
  34. },
  35. // 'less'-task configuration
  36. // This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css
  37. less : {
  38. // Development not compressed
  39. development : {
  40. files: {
  41. // compilation.css : source.less
  42. 'dist/css/AdminLTE.css' : 'build/less/AdminLTE.less',
  43. // AdminLTE without plugins
  44. 'dist/css/alt/AdminLTE-without-plugins.css' : 'build/less/AdminLTE-without-plugins.less',
  45. // Separate plugins
  46. 'dist/css/alt/AdminLTE-select2.css' : 'build/less/select2.less',
  47. 'dist/css/alt/AdminLTE-fullcalendar.css' : 'build/less/fullcalendar.less',
  48. 'dist/css/alt/AdminLTE-bootstrap-social.css': 'build/less/bootstrap-social.less'
  49. }
  50. },
  51. // Production compressed version
  52. production : {
  53. options: {
  54. compress: true
  55. },
  56. files : {
  57. // compilation.css : source.less
  58. 'dist/css/AdminLTE.min.css' : 'build/less/AdminLTE.less',
  59. // AdminLTE without plugins
  60. 'dist/css/alt/AdminLTE-without-plugins.min.css' : 'build/less/AdminLTE-without-plugins.less',
  61. // Separate plugins
  62. 'dist/css/alt/AdminLTE-select2.min.css' : 'build/less/select2.less',
  63. 'dist/css/alt/AdminLTE-fullcalendar.min.css' : 'build/less/fullcalendar.less',
  64. 'dist/css/alt/AdminLTE-bootstrap-social.min.css': 'build/less/bootstrap-social.less'
  65. }
  66. },
  67. // Non minified skin files
  68. skins : {
  69. files: {
  70. 'dist/css/skins/skin-blue.css' : 'build/less/skins/skin-blue.less',
  71. 'dist/css/skins/skin-black.css' : 'build/less/skins/skin-black.less',
  72. 'dist/css/skins/skin-yellow.css' : 'build/less/skins/skin-yellow.less',
  73. 'dist/css/skins/skin-green.css' : 'build/less/skins/skin-green.less',
  74. 'dist/css/skins/skin-red.css' : 'build/less/skins/skin-red.less',
  75. 'dist/css/skins/skin-purple.css' : 'build/less/skins/skin-purple.less',
  76. 'dist/css/skins/skin-blue-light.css' : 'build/less/skins/skin-blue-light.less',
  77. 'dist/css/skins/skin-black-light.css' : 'build/less/skins/skin-black-light.less',
  78. 'dist/css/skins/skin-yellow-light.css': 'build/less/skins/skin-yellow-light.less',
  79. 'dist/css/skins/skin-green-light.css' : 'build/less/skins/skin-green-light.less',
  80. 'dist/css/skins/skin-red-light.css' : 'build/less/skins/skin-red-light.less',
  81. 'dist/css/skins/skin-purple-light.css': 'build/less/skins/skin-purple-light.less',
  82. 'dist/css/skins/_all-skins.css' : 'build/less/skins/_all-skins.less'
  83. }
  84. },
  85. // Skins minified
  86. minifiedSkins: {
  87. options: {
  88. compress: true
  89. },
  90. files : {
  91. 'dist/css/skins/skin-blue.min.css' : 'build/less/skins/skin-blue.less',
  92. 'dist/css/skins/skin-black.min.css' : 'build/less/skins/skin-black.less',
  93. 'dist/css/skins/skin-yellow.min.css' : 'build/less/skins/skin-yellow.less',
  94. 'dist/css/skins/skin-green.min.css' : 'build/less/skins/skin-green.less',
  95. 'dist/css/skins/skin-red.min.css' : 'build/less/skins/skin-red.less',
  96. 'dist/css/skins/skin-purple.min.css' : 'build/less/skins/skin-purple.less',
  97. 'dist/css/skins/skin-blue-light.min.css' : 'build/less/skins/skin-blue-light.less',
  98. 'dist/css/skins/skin-black-light.min.css' : 'build/less/skins/skin-black-light.less',
  99. 'dist/css/skins/skin-yellow-light.min.css': 'build/less/skins/skin-yellow-light.less',
  100. 'dist/css/skins/skin-green-light.min.css' : 'build/less/skins/skin-green-light.less',
  101. 'dist/css/skins/skin-red-light.min.css' : 'build/less/skins/skin-red-light.less',
  102. 'dist/css/skins/skin-purple-light.min.css': 'build/less/skins/skin-purple-light.less',
  103. 'dist/css/skins/_all-skins.min.css' : 'build/less/skins/_all-skins.less'
  104. }
  105. }
  106. },
  107. // Uglify task info. Compress the js files.
  108. uglify: {
  109. options : {
  110. mangle : true,
  111. preserveComments: 'some'
  112. },
  113. production: {
  114. files: {
  115. 'dist/js/app.min.js' : ['dist/js/app.js'],
  116. 'dist/js/adminlte.min.js': ['dist/js/adminlte.js']
  117. }
  118. }
  119. },
  120. // Concatenate JS Files
  121. concat: {
  122. options: {
  123. separator: '\n\n',
  124. banner : '/*! AdminLTE app.js\n'
  125. + '* ================\n'
  126. + '* Main JS application file for AdminLTE v2. This file\n'
  127. + '* should be included in all pages. It controls some layout\n'
  128. + '* options and implements exclusive AdminLTE plugins.\n'
  129. + '*\n'
  130. + '* @Author Almsaeed Studio\n'
  131. + '* @Support <https://www.almsaeedstudio.com>\n'
  132. + '* @Email <abdullah@almsaeedstudio.com>\n'
  133. + '* @version <%= pkg.version %>\n'
  134. + '* @repository <%= pkg.repository.url %>\n'
  135. + '* @license MIT <http://opensource.org/licenses/MIT>\n'
  136. + '*/\n\n'
  137. + '// Make sure jQuery has been loaded\n'
  138. + 'if (typeof jQuery === \'undefined\') {\n'
  139. + 'throw new Error(\'AdminLTE requires jQuery\')\n'
  140. + '}\n\n'
  141. },
  142. dist : {
  143. src : [
  144. 'build/js/Layout.js',
  145. 'build/js/PushMenu.js',
  146. 'build/js/Tree.js',
  147. 'build/js/ControlSidebar.js',
  148. 'build/js/BoxWidget.js',
  149. 'build/js/TodoList.js',
  150. 'build/js/DirectChat.js'
  151. ],
  152. dest: 'dist/js/adminlte.js'
  153. }
  154. },
  155. // Build the documentation files
  156. includes: {
  157. build: {
  158. src : ['*.html'], // Source files
  159. dest : 'documentation/', // Destination directory
  160. flatten: true,
  161. cwd : 'documentation/build',
  162. options: {
  163. silent : true,
  164. includePath: 'documentation/build/include'
  165. }
  166. }
  167. },
  168. // Optimize images
  169. image: {
  170. dynamic: {
  171. files: [
  172. {
  173. expand: true,
  174. cwd : 'build/img/',
  175. src : ['**/*.{png,jpg,gif,svg,jpeg}'],
  176. dest : 'dist/img/'
  177. }
  178. ]
  179. }
  180. },
  181. // Validate JS code
  182. jshint: {
  183. options: {
  184. jshintrc: 'build/js/.jshintrc'
  185. },
  186. grunt : {
  187. options: {
  188. jshintrc: 'build/grunt/.jshintrc'
  189. },
  190. src : 'Gruntfile.js'
  191. },
  192. core : {
  193. src: 'build/js/*.js'
  194. },
  195. demo : {
  196. src: 'dist/js/demo.js'
  197. },
  198. pages : {
  199. src: 'dist/js/pages/*.js'
  200. }
  201. },
  202. jscs: {
  203. options: {
  204. config: 'build/js/.jscsrc'
  205. },
  206. core : {
  207. src: '<%= jshint.core.src %>'
  208. },
  209. pages : {
  210. src: '<%= jshint.pages.src %>'
  211. }
  212. },
  213. // Validate CSS files
  214. csslint: {
  215. options: {
  216. csslintrc: 'build/less/.csslintrc'
  217. },
  218. dist : [
  219. 'dist/css/AdminLTE.css'
  220. ]
  221. },
  222. // Validate Bootstrap HTML
  223. bootlint: {
  224. options: {
  225. relaxerror: ['W005']
  226. },
  227. files : ['pages/**/*.html', '*.html']
  228. },
  229. // Delete images in build directory
  230. // After compressing the images in the build/img dir, there is no need
  231. // for them
  232. clean: {
  233. build: ['build/img/*']
  234. }
  235. })
  236. // Load all grunt tasks
  237. // LESS Compiler
  238. grunt.loadNpmTasks('grunt-contrib-less')
  239. // Watch File Changes
  240. grunt.loadNpmTasks('grunt-contrib-watch')
  241. // Compress JS Files
  242. grunt.loadNpmTasks('grunt-contrib-uglify')
  243. // Include Files Within HTML
  244. grunt.loadNpmTasks('grunt-includes')
  245. // Optimize images
  246. grunt.loadNpmTasks('grunt-image')
  247. // Validate JS code
  248. grunt.loadNpmTasks('grunt-contrib-jshint')
  249. grunt.loadNpmTasks('grunt-jscs')
  250. // Delete not needed files
  251. grunt.loadNpmTasks('grunt-contrib-clean')
  252. // Lint CSS
  253. grunt.loadNpmTasks('grunt-contrib-csslint')
  254. // Lint Bootstrap
  255. grunt.loadNpmTasks('grunt-bootlint')
  256. // Concatenate JS files
  257. grunt.loadNpmTasks('grunt-contrib-concat')
  258. // Notify
  259. grunt.loadNpmTasks('grunt-notify')
  260. // Linting task
  261. grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint'])
  262. // JS task
  263. grunt.registerTask('js', ['concat', 'uglify'])
  264. // The default task (running 'grunt' in console) is 'watch'
  265. grunt.registerTask('default', ['watch'])
  266. }