Add lint tasks and update less and js tasks

pull/1498/head
Abdullah Almsaeed 2017-02-25 14:53:27 -05:00
parent 3c672fe9aa
commit 9f870d0fad
1 changed files with 158 additions and 76 deletions

View File

@ -1,101 +1,158 @@
// AdminLTE Gruntfile // AdminLTE Gruntfile
module.exports = function (grunt) { module.exports = function (grunt) { // jshint ignore:line
'use strict'; 'use strict';
grunt.initConfig({ grunt.initConfig({
pkg : grunt.file.readJSON('package.json'),
watch: { watch: {
// If any .less file changes in directory "build/less/" run the "less"-task. less : {
files: ["build/less/*.less", "build/less/skins/*.less", "dist/js/app.js"], // Compiles less files upon saving
tasks: ["less", "uglify"] files: ['build/less/*.less'],
tasks: ['less:development', 'less:production']
}, },
// "less"-task configuration js : {
// This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css // Compile js files upon saving
less: { files: ['build/js/*.js', 'dist/js/app.js'],
// Development not compressed tasks: ['js']
development: {
options: {
// Whether to compress or not
compress: false
}, },
files: { skins: {
// compilation.css : source.less // Compile any skin less files upon saving
"dist/css/AdminLTE.css": "build/less/AdminLTE.less", files: ['build/less/skins/*.less'],
// AdminLTE without plugins tasks: ['less:skins', 'less:minifiedSkins']
"dist/css/alt/AdminLTE-without-plugins.css": "build/less/AdminLTE-without-plugins.less",
// 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",
//Non minified skin 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"
} }
}, },
// Production compresses version // 'less'-task configuration
production: { // This task will compile all less files upon saving to create both AdminLTE.css and AdminLTE.min.css
less : {
// Development not compressed
development : {
files: {
// compilation.css : source.less
'dist/css/AdminLTE.css' : 'build/less/AdminLTE.less',
// AdminLTE without plugins
'dist/css/alt/AdminLTE-without-plugins.css' : 'build/less/AdminLTE-without-plugins.less',
// 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'
}
},
// Production compressed version
production : {
options: { options: {
// Whether to compress or not
compress: true compress: true
}, },
files: { files : {
// compilation.css : source.less // compilation.css : source.less
"dist/css/AdminLTE.min.css": "build/less/AdminLTE.less", 'dist/css/AdminLTE.min.css' : 'build/less/AdminLTE.less',
// AdminLTE without plugins // AdminLTE without plugins
"dist/css/alt/AdminLTE-without-plugins.min.css": "build/less/AdminLTE-without-plugins.less", 'dist/css/alt/AdminLTE-without-plugins.min.css' : 'build/less/AdminLTE-without-plugins.less',
// Separate plugins // Separate plugins
"dist/css/alt/AdminLTE-select2.min.css": "build/less/select2.less", '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-fullcalendar.min.css' : 'build/less/fullcalendar.less',
"dist/css/alt/AdminLTE-bootstrap-social.min.css": "build/less/bootstrap-social.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 // Skins minified
"dist/css/skins/skin-blue.min.css": "build/less/skins/skin-blue.less", minifiedSkins: {
"dist/css/skins/skin-black.min.css": "build/less/skins/skin-black.less", options: {
"dist/css/skins/skin-yellow.min.css": "build/less/skins/skin-yellow.less", compress: true
"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", files : {
"dist/css/skins/skin-purple.min.css": "build/less/skins/skin-purple.less", 'dist/css/skins/skin-blue.min.css' : 'build/less/skins/skin-blue.less',
"dist/css/skins/skin-blue-light.min.css": "build/less/skins/skin-blue-light.less", 'dist/css/skins/skin-black.min.css' : 'build/less/skins/skin-black.less',
"dist/css/skins/skin-black-light.min.css": "build/less/skins/skin-black-light.less", 'dist/css/skins/skin-yellow.min.css' : 'build/less/skins/skin-yellow.less',
"dist/css/skins/skin-yellow-light.min.css": "build/less/skins/skin-yellow-light.less", 'dist/css/skins/skin-green.min.css' : 'build/less/skins/skin-green.less',
"dist/css/skins/skin-green-light.min.css": "build/less/skins/skin-green-light.less", 'dist/css/skins/skin-red.min.css' : 'build/less/skins/skin-red.less',
"dist/css/skins/skin-red-light.min.css": "build/less/skins/skin-red-light.less", 'dist/css/skins/skin-purple.min.css' : 'build/less/skins/skin-purple.less',
"dist/css/skins/skin-purple-light.min.css": "build/less/skins/skin-purple-light.less", 'dist/css/skins/skin-blue-light.min.css' : 'build/less/skins/skin-blue-light.less',
"dist/css/skins/_all-skins.min.css": "build/less/skins/_all-skins.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'
} }
} }
}, },
// Uglify task info. Compress the js files. // Uglify task info. Compress the js files.
uglify: { uglify: {
options: { options : {
mangle: true, mangle : true,
preserveComments: 'some' preserveComments: 'some'
}, },
my_target: { production: {
files: { files: {
'dist/js/app.min.js': ['dist/js/app.js'] 'dist/js/app.min.js' : ['dist/js/app.js'],
'dist/js/adminlte.min.js': ['dist/js/adminlte.js']
} }
} }
}, },
// 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 : [
'build/js/Layout.js',
'build/js/PushMenu.js',
'build/js/Tree.js',
'build/js/ControlSidebar.js',
'build/js/BoxWidget.js',
'build/js/TodoList.js'
],
dest: 'dist/js/adminlte.js'
}
},
// Build the documentation files // Build the documentation files
includes: { includes: {
build: { build: {
src: ['*.html'], // Source files src : ['*.html'], // Source files
dest: 'documentation/', // Destination directory dest : 'documentation/', // Destination directory
flatten: true, flatten: true,
cwd: 'documentation/build', cwd : 'documentation/build',
options: { options: {
silent: true, silent : true,
includePath: 'documentation/build/include' includePath: 'documentation/build/include'
} }
} }
@ -104,37 +161,57 @@ module.exports = function (grunt) {
// Optimize images // Optimize images
image: { image: {
dynamic: { dynamic: {
files: [{ files: [
{
expand: true, expand: true,
cwd: 'build/img/', cwd : 'build/img/',
src: ['**/*.{png,jpg,gif,svg,jpeg}'], src : ['**/*.{png,jpg,gif,svg,jpeg}'],
dest: 'dist/img/' dest : 'dist/img/'
}] }
]
} }
}, },
// Validate JS code // Validate JS code
jshint: { jshint: {
options: { options: {
jshintrc: '.jshintrc' jshintrc: 'build/js/.jshintrc'
}, },
core: { grunt : {
src: 'dist/js/app.js' options: {
jshintrc: 'build/grunt/.jshintrc'
}, },
demo: { src : 'Gruntfile.js'
},
core : {
src: 'build/js/*.js'
},
demo : {
src: 'dist/js/demo.js' src: 'dist/js/demo.js'
}, },
pages: { pages : {
src: 'dist/js/pages/*.js' src: 'dist/js/pages/*.js'
} }
}, },
jscs: {
options: {
config: 'build/js/.jscsrc'
},
core : {
src: '<%= jshint.core.src %>'
},
pages : {
src: '<%= jshint.pages.src %>'
}
},
// Validate CSS files // Validate CSS files
csslint: { csslint: {
options: { options: {
csslintrc: 'build/less/.csslintrc' csslintrc: 'build/less/.csslintrc'
}, },
dist: [ dist : [
'dist/css/AdminLTE.css' 'dist/css/AdminLTE.css'
] ]
}, },
@ -144,14 +221,14 @@ module.exports = function (grunt) {
options: { options: {
relaxerror: ['W005'] relaxerror: ['W005']
}, },
files: ['pages/**/*.html', '*.html'] files : ['pages/**/*.html', '*.html']
}, },
// Delete images in build directory // Delete images in build directory
// After compressing the images in the build/img dir, there is no need // After compressing the images in the build/img dir, there is no need
// for them // for them
clean: { clean: {
build: ["build/img/*"] build: ['build/img/*']
} }
}); });
@ -169,16 +246,21 @@ module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-image'); grunt.loadNpmTasks('grunt-image');
// Validate JS code // Validate JS code
grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-jscs');
// Delete not needed files // Delete not needed files
grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-clean');
// Lint CSS // Lint CSS
grunt.loadNpmTasks('grunt-contrib-csslint'); grunt.loadNpmTasks('grunt-contrib-csslint');
// Lint Bootstrap // Lint Bootstrap
grunt.loadNpmTasks('grunt-bootlint'); grunt.loadNpmTasks('grunt-bootlint');
// Concatenate JS files
grunt.loadNpmTasks('grunt-contrib-concat');
// Linting task // Linting task
grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint']); grunt.registerTask('lint', ['jshint', 'csslint', 'bootlint']);
// JS task
grunt.registerTask('js', ['concat', 'uglify']);
// The default task (running "grunt" in console) is "watch" // The default task (running 'grunt' in console) is 'watch'
grunt.registerTask('default', ['watch']); grunt.registerTask('default', ['watch']);
}; };