AdminLTE/Gruntfile.js

312 lines
10 KiB
JavaScript
Raw Normal View History

2015-09-19 20:29:39 +02:00
// AdminLTE Gruntfile
module.exports = function (grunt) { // jshint ignore:line
'use strict'
2015-04-16 01:07:57 +02:00
2015-02-01 22:25:09 +01:00
grunt.initConfig({
pkg : grunt.file.readJSON('package.json'),
watch : {
less : {
// Compiles less files upon saving
files: ['build/less/*.less'],
2017-07-08 19:31:59 +02:00
tasks: ['less:development', 'less:production', 'replace', 'notify:less']
},
js : {
// Compile js files upon saving
2017-07-08 19:45:57 +02:00
files: ['build/js/*.js'],
tasks: ['js', 'notify:js']
},
skins: {
// Compile any skin less files upon saving
files: ['build/less/skins/*.less'],
tasks: ['less:skins', 'less:minifiedSkins', 'notify:less']
}
2015-02-01 22:25:09 +01:00
},
// Notify end of tasks
notify: {
less: {
options: {
title : 'AdminLTE',
message: 'LESS finished running'
}
},
js : {
options: {
title : 'AdminLTE',
message: 'JS bundler finished running'
}
}
},
// 'less'-task configuration
2015-04-16 01:07:57 +02:00
// This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css
less : {
2015-04-16 01:07:57 +02:00
// Development not compressed
development : {
2015-02-01 22:25:09 +01:00
files: {
2015-07-12 15:46:20 +02:00
// compilation.css : source.less
'dist/css/AdminLTE.css' : 'build/less/AdminLTE.less',
2016-07-04 17:48:51 +02:00
// AdminLTE without plugins
'dist/css/alt/AdminLTE-without-plugins.css' : 'build/less/AdminLTE-without-plugins.less',
2016-07-04 17:48:51 +02:00
// Separate plugins
'dist/css/alt/AdminLTE-select2.css' : 'build/less/select2.less',
'dist/css/alt/AdminLTE-fullcalendar.css' : 'build/less/fullcalendar.less',
'dist/css/alt/AdminLTE-bootstrap-social.css': 'build/less/bootstrap-social.less'
2015-02-01 22:25:09 +01:00
}
},
// Production compressed version
production : {
2015-02-01 22:25:09 +01:00
options: {
compress: true
},
files : {
2015-02-01 22:25:09 +01:00
// compilation.css : source.less
'dist/css/AdminLTE.min.css' : 'build/less/AdminLTE.less',
2016-07-04 17:48:51 +02:00
// AdminLTE without plugins
'dist/css/alt/AdminLTE-without-plugins.min.css' : 'build/less/AdminLTE-without-plugins.less',
2016-07-04 17:48:51 +02:00
// Separate plugins
'dist/css/alt/AdminLTE-select2.min.css' : 'build/less/select2.less',
'dist/css/alt/AdminLTE-fullcalendar.min.css' : 'build/less/fullcalendar.less',
'dist/css/alt/AdminLTE-bootstrap-social.min.css': 'build/less/bootstrap-social.less'
}
},
// Non minified skin files
skins : {
files: {
'dist/css/skins/skin-blue.css' : 'build/less/skins/skin-blue.less',
'dist/css/skins/skin-black.css' : 'build/less/skins/skin-black.less',
'dist/css/skins/skin-yellow.css' : 'build/less/skins/skin-yellow.less',
'dist/css/skins/skin-green.css' : 'build/less/skins/skin-green.less',
'dist/css/skins/skin-red.css' : 'build/less/skins/skin-red.less',
'dist/css/skins/skin-purple.css' : 'build/less/skins/skin-purple.less',
'dist/css/skins/skin-blue-light.css' : 'build/less/skins/skin-blue-light.less',
'dist/css/skins/skin-black-light.css' : 'build/less/skins/skin-black-light.less',
'dist/css/skins/skin-yellow-light.css': 'build/less/skins/skin-yellow-light.less',
'dist/css/skins/skin-green-light.css' : 'build/less/skins/skin-green-light.less',
'dist/css/skins/skin-red-light.css' : 'build/less/skins/skin-red-light.less',
'dist/css/skins/skin-purple-light.css': 'build/less/skins/skin-purple-light.less',
'dist/css/skins/_all-skins.css' : 'build/less/skins/_all-skins.less'
}
},
// Skins minified
minifiedSkins: {
options: {
compress: true
},
files : {
'dist/css/skins/skin-blue.min.css' : 'build/less/skins/skin-blue.less',
'dist/css/skins/skin-black.min.css' : 'build/less/skins/skin-black.less',
'dist/css/skins/skin-yellow.min.css' : 'build/less/skins/skin-yellow.less',
'dist/css/skins/skin-green.min.css' : 'build/less/skins/skin-green.less',
'dist/css/skins/skin-red.min.css' : 'build/less/skins/skin-red.less',
'dist/css/skins/skin-purple.min.css' : 'build/less/skins/skin-purple.less',
'dist/css/skins/skin-blue-light.min.css' : 'build/less/skins/skin-blue-light.less',
'dist/css/skins/skin-black-light.min.css' : 'build/less/skins/skin-black-light.less',
'dist/css/skins/skin-yellow-light.min.css': 'build/less/skins/skin-yellow-light.less',
'dist/css/skins/skin-green-light.min.css' : 'build/less/skins/skin-green-light.less',
'dist/css/skins/skin-red-light.min.css' : 'build/less/skins/skin-red-light.less',
'dist/css/skins/skin-purple-light.min.css': 'build/less/skins/skin-purple-light.less',
'dist/css/skins/_all-skins.min.css' : 'build/less/skins/_all-skins.less'
2015-02-01 22:25:09 +01:00
}
}
2015-02-02 17:52:30 +01:00
},
2015-04-16 01:07:57 +02:00
// Uglify task info. Compress the js files.
2015-02-02 17:52:30 +01:00
uglify: {
options : {
mangle : true,
2015-02-02 19:38:02 +01:00
preserveComments: 'some'
2015-02-02 17:52:30 +01:00
},
production: {
2015-02-02 17:52:30 +01:00
files: {
'dist/js/adminlte.min.js': ['dist/js/adminlte.js']
2015-02-02 17:52:30 +01:00
}
}
},
// Concatenate JS Files
concat: {
options: {
separator: '\n\n',
banner : '/*! AdminLTE app.js\n'
+ '* ================\n'
+ '* Main JS application file for AdminLTE v2. This file\n'
+ '* should be included in all pages. It controls some layout\n'
+ '* options and implements exclusive AdminLTE plugins.\n'
+ '*\n'
+ '* @Author Almsaeed Studio\n'
+ '* @Support <https://www.almsaeedstudio.com>\n'
+ '* @Email <abdullah@almsaeedstudio.com>\n'
+ '* @version <%= pkg.version %>\n'
+ '* @repository <%= pkg.repository.url %>\n'
+ '* @license MIT <http://opensource.org/licenses/MIT>\n'
+ '*/\n\n'
+ '// Make sure jQuery has been loaded\n'
+ 'if (typeof jQuery === \'undefined\') {\n'
+ 'throw new Error(\'AdminLTE requires jQuery\')\n'
+ '}\n\n'
},
dist : {
src : [
2017-07-08 19:45:57 +02:00
'build/js/BoxRefresh.js',
'build/js/BoxWidget.js',
'build/js/ControlSidebar.js',
'build/js/DirectChat.js',
'build/js/Layout.js',
'build/js/PushMenu.js',
2017-03-04 18:13:04 +01:00
'build/js/TodoList.js',
2017-07-08 19:45:57 +02:00
'build/js/Tree.js'
],
dest: 'dist/js/adminlte.js'
}
},
2017-07-08 19:31:59 +02:00
// Replace image paths in AdminLTE without plugins
replace: {
withoutPlugins : {
src : ['dist/css/alt/AdminLTE-without-plugins.css'],
dest : 'dist/css/alt/AdminLTE-without-plugins.css',
replacements: [
{
from: '../img',
to : '../../img'
}
]
},
withoutPluginsMin: {
src : ['dist/css/alt/AdminLTE-without-plugins.min.css'],
dest : 'dist/css/alt/AdminLTE-without-plugins.min.css',
replacements: [
{
from: '../img',
to : '../../img'
}
]
}
},
2015-04-16 01:07:57 +02:00
// Build the documentation files
includes: {
build: {
src : ['*.html'], // Source files
dest : 'documentation/', // Destination directory
flatten: true,
cwd : 'documentation/build',
options: {
silent : true,
includePath: 'documentation/build/include'
2015-04-16 01:07:57 +02:00
}
}
},
// Optimize images
image: {
dynamic: {
files: [
{
expand: true,
cwd : 'build/img/',
src : ['**/*.{png,jpg,gif,svg,jpeg}'],
dest : 'dist/img/'
}
]
}
},
// Validate JS code
jshint: {
options: {
jshintrc: 'build/js/.jshintrc'
},
grunt : {
options: {
jshintrc: 'build/grunt/.jshintrc'
},
src : 'Gruntfile.js'
},
core : {
src: 'build/js/*.js'
},
demo : {
src: 'dist/js/demo.js'
},
pages : {
src: 'dist/js/pages/*.js'
}
},
jscs: {
options: {
config: 'build/js/.jscsrc'
},
core : {
src: '<%= jshint.core.src %>'
},
pages : {
src: '<%= jshint.pages.src %>'
}
},
2015-08-22 19:22:37 +02:00
// Validate CSS files
2015-07-25 21:51:57 +02:00
csslint: {
options: {
csslintrc: 'build/less/.csslintrc'
},
dist : [
2016-10-03 03:52:12 +02:00
'dist/css/AdminLTE.css'
2015-07-25 21:51:57 +02:00
]
},
2015-08-22 19:22:37 +02:00
// Validate Bootstrap HTML
bootlint: {
options: {
relaxerror: ['W005']
},
files : ['pages/**/*.html', '*.html']
2015-08-22 19:22:37 +02:00
},
// Delete images in build directory
// After compressing the images in the build/img dir, there is no need
// for them
clean: {
build: ['build/img/*']
2015-02-01 22:25:09 +01:00
}
})
2015-04-16 01:07:57 +02:00
// Load all grunt tasks
// LESS Compiler
grunt.loadNpmTasks('grunt-contrib-less')
2015-04-16 01:07:57 +02:00
// Watch File Changes
grunt.loadNpmTasks('grunt-contrib-watch')
2015-04-16 01:07:57 +02:00
// Compress JS Files
grunt.loadNpmTasks('grunt-contrib-uglify')
2015-04-16 01:07:57 +02:00
// Include Files Within HTML
grunt.loadNpmTasks('grunt-includes')
// Optimize images
grunt.loadNpmTasks('grunt-image')
// Validate JS code
grunt.loadNpmTasks('grunt-contrib-jshint')
grunt.loadNpmTasks('grunt-jscs')
// Delete not needed files
grunt.loadNpmTasks('grunt-contrib-clean')
2015-07-25 21:51:57 +02:00
// Lint CSS
grunt.loadNpmTasks('grunt-contrib-csslint')
2015-08-22 19:22:37 +02:00
// Lint Bootstrap
grunt.loadNpmTasks('grunt-bootlint')
// Concatenate JS files
grunt.loadNpmTasks('grunt-contrib-concat')
// Notify
grunt.loadNpmTasks('grunt-notify')
2017-07-08 19:31:59 +02:00
// Replace
grunt.loadNpmTasks('grunt-text-replace')
2015-08-22 19:22:37 +02:00
// Linting task
grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint'])
// JS task
grunt.registerTask('js', ['concat', 'uglify'])
2017-07-08 19:31:59 +02:00
// CSS Task
grunt.registerTask('css', ['less:development', 'less:production', 'replace'])
2015-04-16 01:07:57 +02:00
// The default task (running 'grunt' in console) is 'watch'
grunt.registerTask('default', ['watch'])
}