0
0
Fork 0
mirror of https://github.com/salesagility/SuiteCRM.git synced 2025-02-19 03:53:55 +00:00
salesagility_SuiteCRM/include/javascript/jstree/gruntfile.js
2017-04-13 16:22:25 +01:00

241 lines
7.2 KiB
JavaScript

/*global module:false, require:false, __dirname:false*/
module.exports = function(grunt) {
grunt.util.linefeed = "\n";
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options : {
separator : "\n"
},
dist: {
src: ['src/<%= pkg.name %>.js', 'src/<%= pkg.name %>.*.js', 'src/vakata-jstree.js'],
dest: 'dist/<%= pkg.name %>.js'
}
},
copy: {
libs : {
files : [
{ expand: true, cwd : 'libs/', src: ['*'], dest: 'dist/libs/' }
]
},
docs : {
files : [
{ expand: true, cwd : 'dist/', src: ['**/*'], dest: 'docs/assets/dist/' }
]
}
},
uglify: {
options: {
banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> - (<%= _.pluck(pkg.licenses, "type").join(", ") %>) */\n',
preserveComments: false,
//sourceMap: "dist/jstree.min.map",
//sourceMappingURL: "jstree.min.map",
report: "min",
beautify: {
ascii_only: true
},
compress: {
hoist_funs: false,
loops: false,
unused: false
}
},
dist: {
src: ['<%= concat.dist.dest %>'],
dest: 'dist/<%= pkg.name %>.min.js'
}
},
qunit: {
files: ['test/unit/**/*.html']
},
jshint: {
options: {
'curly' : true,
'eqeqeq' : true,
'latedef' : true,
'newcap' : true,
'noarg' : true,
'sub' : true,
'undef' : true,
'boss' : true,
'eqnull' : true,
'browser' : true,
'trailing' : true,
'globals' : {
'console' : true,
'jQuery' : true,
'browser' : true,
'XSLTProcessor' : true,
'ActiveXObject' : true
}
},
beforeconcat: ['src/<%= pkg.name %>.js', 'src/<%= pkg.name %>.*.js'],
afterconcat: ['dist/<%= pkg.name %>.js']
},
dox: {
files: {
src: ['src/*.js'],
dest: 'docs'
}
},
amd : {
files: {
src: ['dist/jstree.js'],
dest: 'dist/jstree.js'
}
},
less: {
production: {
options : {
cleancss : true,
compress : true
},
files: {
"dist/themes/default/style.min.css" : "src/themes/default/style.less",
"dist/themes/default-dark/style.min.css" : "src/themes/default-dark/style.less"
}
},
development: {
files: {
"src/themes/default/style.css" : "src/themes/default/style.less",
"dist/themes/default/style.css" : "src/themes/default/style.less",
"src/themes/default-dark/style.css" : "src/themes/default-dark/style.less",
"dist/themes/default-dark/style.css" : "src/themes/default-dark/style.less"
}
}
},
watch: {
js : {
files: ['src/**/*.js'],
tasks: ['js'],
options : {
atBegin : true
}
},
css : {
files: ['src/**/*.less','src/**/*.png','src/**/*.gif'],
tasks: ['css'],
options : {
atBegin : true
}
},
},
resemble: {
options: {
screenshotRoot: 'test/visual/screenshots/',
url: 'http://127.0.0.1/jstree/test/visual/',
gm: false
},
desktop: {
options: {
width: 1280,
},
src: ['desktop'],
dest: 'desktop',
},
mobile: {
options: {
width: 360,
},
src: ['mobile'],
dest: 'mobile'
}
},
imagemin: {
dynamic: {
options: { // Target options
optimizationLevel: 7,
pngquant : true
},
files: [{
expand: true, // Enable dynamic expansion
cwd: 'src/themes/default/', // Src matches are relative to this path
src: ['**/*.{png,jpg,gif}'], // Actual patterns to match
dest: 'dist/themes/default/' // Destination path prefix
},{
expand: true, // Enable dynamic expansion
cwd: 'src/themes/default-dark/', // Src matches are relative to this path
src: ['**/*.{png,jpg,gif}'], // Actual patterns to match
dest: 'dist/themes/default-dark/' // Destination path prefix
}]
}
},
replace: {
files: {
src: ['dist/*.js', 'bower.json', 'component.json', 'jstree.jquery.json'],
overwrite: true,
replacements: [
{
from: '{{VERSION}}',
to: "<%= pkg.version %>"
},
{
from: /"version": "[^"]+"/g,
to: "\"version\": \"<%= pkg.version %>\""
},
]
}
}
});
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-resemble-cli');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-imagemin');
grunt.loadNpmTasks('grunt-text-replace');
grunt.registerMultiTask('amd', 'Clean up AMD', function () {
var s, d;
this.files.forEach(function (f) {
s = f.src;
d = f.dest;
});
grunt.file.copy(s, d, {
process: function (contents) {
contents = contents.replace(/\s*if\(\$\.jstree\.plugins\.[a-z]+\)\s*\{\s*return;\s*\}/ig, '');
contents = contents.replace(/\/\*globals[^\/]+\//ig, '');
//contents = contents.replace(/\(function \(factory[\s\S]*?undefined/mig, '(function ($, undefined');
//contents = contents.replace(/\}\)\);/g, '}(jQuery));');
contents = contents.replace(/\(function \(factory[\s\S]*?undefined\s*\)[^\n]+/mig, '');
contents = contents.replace(/\}\)\);/g, '');
contents = contents.replace(/\s*("|')use strict("|');/g, '');
contents = contents.replace(/\s*return \$\.fn\.jstree;/g, '');
return grunt.file.read('src/intro.js') + contents + grunt.file.read('src/outro.js');
}
});
});
grunt.registerMultiTask('dox', 'Generate dox output ', function() {
var exec = require('child_process').exec,
path = require('path'),
done = this.async(),
doxPath = path.resolve(__dirname),
formatter = [doxPath, 'node_modules', '.bin', 'dox'].join(path.sep);
exec(formatter + ' < "dist/jstree.js" > "docs/jstree.json"', {maxBuffer: 5000*1024}, function(error, stout, sterr){
if (error) {
grunt.log.error(formatter);
grunt.log.error("WARN: "+ error);
}
if (!error) {
grunt.log.writeln('dist/jstree.js doxxed.');
done();
}
});
});
grunt.util.linefeed = "\n";
// Default task.
grunt.registerTask('default', ['jshint:beforeconcat','concat','amd','jshint:afterconcat','copy:libs','uglify','less','imagemin','replace','copy:docs','qunit','resemble','dox']);
grunt.registerTask('js', ['concat','amd','uglify']);
grunt.registerTask('css', ['copy','less']);
};