You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

188 lines
6.7 KiB

const sass = require('node-sass'), tildeImporter = require('grunt-sass-tilde-importer');
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
banner: '/*@preserve\n' +
' * Tempus Dominus Bootstrap4 v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * Copyright 2016-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
' * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)\n' +
' */\n',
jqueryCheck: 'if (typeof jQuery === \'undefined\') {\n' +
' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires jQuery. jQuery must be included before Tempus Dominus Bootstrap4\\\'s JavaScript.\');\n' +
'}\n',
jqueryVersionCheck: '+function ($) {\n' +
' var version = $.fn.jquery.split(\' \')[0].split(\'.\');\n' +
' if ((version[0] < 2 && version[1] < 9) || (version[0] === 1 && version[1] === 9 && version[2] < 1) || (version[0] >= 4)) {\n' +
' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires at least jQuery v3.0.0 but less than v4.0.0\');\n' +
' }\n' +
'}(jQuery);\n\n',
momentCheck: 'if (typeof moment === \'undefined\') {\n' +
' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires moment.js. Moment.js must be included before Tempus Dominus Bootstrap4\\\'s JavaScript.\');\n' +
'}\n',
momentVersionCheck: 'var version = moment.version.split(\'.\')\n' +
'if ((version[0] <= 2 && version[1] < 17) || (version[0] >= 3)) {\n' +
' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires at least moment.js v2.17.0 but less than v3.0.0\');\n' +
'}\n',
uglify: {
target: {
files: {
'build/js/<%= pkg.name %>.min.js': 'build/js/<%= pkg.name %>.js'
}
},
options: {
mangle: true,
compress: {
dead_code: false // eslint-disable-line
},
output: {
ascii_only: true // eslint-disable-line
},
report: 'min',
preserveComments: 'some'
}
},
eslint: {
options: {
configFile: 'eslintrc.json'
},
target: ['Gruntfile.js', 'src/js/*.js', 'test/*.js']
},
babel: {
dev: {
options: {
sourceMap: false,
compact: false
},
files: {
'build/js/<%= pkg.name %>.js': 'src/js/<%= pkg.name %>.js'
}
},
dist: {
options: {
compact: false,
'presets': [
[
'es2015',
{
'modules': false,
'loose': true
}
]
],
'plugins': [
'transform-es2015-modules-strip'
]
},
files: {
'build/js/<%= pkg.name %>.js': 'build/js/<%= pkg.name %>.js'
}
}
},
concat: {
options: {
// Custom function to remove all export and import statements
process: function (src) {
return src.replace(/^(export|import).*/gm, '');
}
},
bootstrap: {
src: [
'node_modules/tempusdominus-core/src/js/tempusdominus-core.js',
'src/js/<%= pkg.name %>.js'
],
dest: 'build/js/<%= pkg.name %>.js'
}
},
sass: {
production: {
options: {
cleancss: true,
compress: true,
implementation: sass,
importer: tildeImporter
},
files: {
'build/css/<%= pkg.name %>.min.css': 'src/sass/<%= pkg.name %>-build.scss'
}
},
development: {
options: {
importer: tildeImporter,
implementation: sass
},
files: {
'build/css/<%= pkg.name %>.css': 'src/sass/<%= pkg.name %>-build.scss'
}
}
},
stamp: {
bootstrap: {
options: {
banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>\n<%= momentCheck %>\n<%= momentVersionCheck %>\n+function () {\n',
footer: '\n}();'
},
files: {
src: '<%= concat.bootstrap.dest %>'
}
},
css: {
options: {
banner: '<%= banner %>'
},
files: {
src: 'build/css/*.css'
}
}
},
watch: {
src: {
files: '<%= concat.bootstrap.src %>',
tasks: ['default']
}
},
mkdocs: {
dist: {
src: '.',
options: {
clean: true
}
}
}
});
grunt.loadTasks('tasks');
grunt.loadNpmTasks('grunt-mkdocs');
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', 'build:js');
grunt.registerTask('build:travis', [
'build:js', 'build:style'//,
// tests
//'env:paris', 'connect', 'jasmine'
]);
// Task to be run when building
grunt.registerTask('build:js', ['babel:dev', 'concat', 'eslint', 'babel:dist', 'stamp:bootstrap', 'uglify', 'copy']);
grunt.registerTask('build:style', ['sass', 'stamp:css', 'copy']);
grunt.registerTask('copy', 'Generate docs', function () {
grunt.file.copy('build/js/tempusdominus-bootstrap-4.js', 'src/docs/theme/js/tempusdominus-bootstrap-4.js');
grunt.file.copy('build/css/tempusdominus-bootstrap-4.css', 'src/docs/theme/css/tempusdominus-bootstrap-4.css');
});
grunt.registerTask('docs', ['copy', 'mkdocs']);
grunt.registerTask('release', function (version) {
if (!version || version.split('.').length !== 3) {
grunt.fail.fatal('malformed version. Use grunt release:1.2.3');
}
grunt.task.run([
'bump_version:' + version,
'build:travis',
'docs'
]);
});
};