219 lines
6 KiB
JavaScript
219 lines
6 KiB
JavaScript
|
var fs = require('fs');
|
||
|
|
||
|
module.exports = function(grunt) {
|
||
|
grunt.loadNpmTasks('grunt-bower-task');
|
||
|
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||
|
grunt.loadNpmTasks('grunt-contrib-copy');
|
||
|
grunt.loadNpmTasks('grunt-contrib-less');
|
||
|
grunt.loadNpmTasks('grunt-replace');
|
||
|
|
||
|
grunt.registerTask('configure', [
|
||
|
'clean:pre',
|
||
|
'bower:install',
|
||
|
]);
|
||
|
|
||
|
grunt.registerTask('compile', [
|
||
|
'copy:less',
|
||
|
'copy:less_plugins',
|
||
|
'concat:less_theme_dependencies',
|
||
|
'concat:less_plugins',
|
||
|
'concat:js',
|
||
|
'less:uncompressed',
|
||
|
'clean_bootstrap2_css',
|
||
|
'replace',
|
||
|
'build_standalone',
|
||
|
'uglify',
|
||
|
'clean:post',
|
||
|
]);
|
||
|
|
||
|
grunt.registerTask('default', [
|
||
|
'configure',
|
||
|
'compile'
|
||
|
]);
|
||
|
|
||
|
grunt.registerTask('clean_bootstrap2_css', 'Cleans CSS rules ocurring before the header comment.', function() {
|
||
|
var file = 'dist/css/selectize.bootstrap2.css';
|
||
|
var source = fs.readFileSync(file, 'utf8');
|
||
|
grunt.file.write(file, source.replace(/^(.|\s)+?\/\*/m, '/*'));
|
||
|
grunt.log.writeln('Cleaned "' + file + '".');
|
||
|
});
|
||
|
|
||
|
grunt.registerTask('build_standalone', '', function() {
|
||
|
var files, i, n, source, name, path, modules = [];
|
||
|
|
||
|
// amd definitions must be changed to be not anonymous
|
||
|
// @see https://github.com/brianreavis/selectize.js/issues/89
|
||
|
files = [];
|
||
|
for (i = 0, n = files_js_dependencies.length; i < n; i++) {
|
||
|
path = files_js_dependencies[i];
|
||
|
name = path.match(/([^\/]+?).js$/)[1];
|
||
|
source = grunt.file.read(path).replace('define(factory);', 'define(\'' + name + '\', factory);');
|
||
|
modules.push(source);
|
||
|
}
|
||
|
|
||
|
path = 'dist/js/selectize.js';
|
||
|
source = grunt.file.read(path).replace(/define\((.*?)factory\);/, 'define(\'selectize\', $1factory);');
|
||
|
modules.push(source);
|
||
|
|
||
|
// write output
|
||
|
path = 'dist/js/standalone/selectize.js';
|
||
|
grunt.file.write(path, modules.join('\n\n'));
|
||
|
grunt.log.writeln('Built "' + path + '".');
|
||
|
});
|
||
|
|
||
|
var files_js = [
|
||
|
'src/contrib/*.js',
|
||
|
'src/*.js',
|
||
|
'!src/.wrapper.js',
|
||
|
'!src/defaults.js',
|
||
|
'!src/selectize.js',
|
||
|
'!src/selectize.jquery.js',
|
||
|
'src/selectize.js',
|
||
|
'src/defaults.js',
|
||
|
'src/selectize.jquery.js',
|
||
|
];
|
||
|
|
||
|
var files_js_dependencies = [
|
||
|
'bower_components/sifter/sifter.js',
|
||
|
'bower_components/microplugin/src/microplugin.js',
|
||
|
];
|
||
|
|
||
|
var less_imports = [];
|
||
|
var less_plugin_files = [];
|
||
|
|
||
|
// enumerate plugins
|
||
|
(function() {
|
||
|
var selector_plugins = grunt.option('plugins');
|
||
|
if (!selector_plugins) return;
|
||
|
|
||
|
if (selector_plugins.indexOf(',') !== -1) {
|
||
|
selector_plugins = '{' + selector_plugins.split(/\s*,\s*/).join(',') + '}';
|
||
|
}
|
||
|
|
||
|
// javascript
|
||
|
files_js.push('src/plugins/' + selector_plugins + '/*.js');
|
||
|
|
||
|
// less (css)
|
||
|
var matched_files = grunt.file.expand(['src/plugins/' + selector_plugins + '/plugin.less']);
|
||
|
for (var i = 0, n = matched_files.length; i < n; i++) {
|
||
|
var plugin_name = matched_files[i].match(/src\/plugins\/(.+?)\//)[1];
|
||
|
less_imports.push('@import "plugins/' + plugin_name + '";');
|
||
|
less_plugin_files.push({src: matched_files[i], dest: 'dist/less/plugins/' + plugin_name + '.less'});
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
grunt.initConfig({
|
||
|
pkg: grunt.file.readJSON('bower.json'),
|
||
|
bower: {
|
||
|
install: {
|
||
|
options: {
|
||
|
copy: false,
|
||
|
clean: false,
|
||
|
layout: 'byComponent',
|
||
|
action: 'install'
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
clean: {
|
||
|
pre: ['dist'],
|
||
|
post: ['**/*.tmp*']
|
||
|
},
|
||
|
copy: {
|
||
|
less: {
|
||
|
files: [{expand: true, flatten: true, src: ['src/less/*.less'], dest: 'dist/less'}]
|
||
|
},
|
||
|
less_plugins: {
|
||
|
files: less_plugin_files
|
||
|
}
|
||
|
},
|
||
|
replace: {
|
||
|
options: {prefix: '@@'},
|
||
|
main: {
|
||
|
options: {
|
||
|
variables: {
|
||
|
'version': '<%= pkg.version %>',
|
||
|
'js': '<%= grunt.file.read("dist/js/selectize.js").replace(/\\n/g, "\\n\\t") %>',
|
||
|
'css': '<%= grunt.file.read("dist/css/selectize.css") %>',
|
||
|
},
|
||
|
},
|
||
|
files: [
|
||
|
{src: ['src/.wrapper.js'], dest: 'dist/js/selectize.js'},
|
||
|
{src: ['src/less/.wrapper.css'], dest: 'dist/css/selectize.css'}
|
||
|
]
|
||
|
},
|
||
|
css_post: {
|
||
|
options: {
|
||
|
variables: {
|
||
|
'version': '<%= pkg.version %>'
|
||
|
},
|
||
|
},
|
||
|
files: [
|
||
|
{expand: true, flatten: false, src: ['dist/css/*.css'], dest: ''},
|
||
|
{expand: true, flatten: false, src: ['dist/less/*.less'], dest: ''},
|
||
|
{expand: true, flatten: false, src: ['dist/less/plugins/*.less'], dest: ''},
|
||
|
]
|
||
|
}
|
||
|
},
|
||
|
less: {
|
||
|
options: {},
|
||
|
uncompressed: {
|
||
|
files: {
|
||
|
'dist/css/selectize.css': ['dist/less/selectize.less'],
|
||
|
'dist/css/selectize.default.css': ['dist/less/selectize.default.less'],
|
||
|
'dist/css/selectize.legacy.css': ['dist/less/selectize.legacy.less'],
|
||
|
'dist/css/selectize.bootstrap2.css': ['dist/less/selectize.bootstrap2.tmp.less'],
|
||
|
'dist/css/selectize.bootstrap3.css': ['dist/less/selectize.bootstrap3.tmp.less']
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
concat: {
|
||
|
options: {
|
||
|
stripBanners: true,
|
||
|
separator: grunt.util.linefeed + grunt.util.linefeed
|
||
|
},
|
||
|
js: {
|
||
|
files: {
|
||
|
'dist/js/selectize.js': files_js,
|
||
|
}
|
||
|
},
|
||
|
less_plugins: {
|
||
|
options: {
|
||
|
banner: less_imports.join('\n') + grunt.util.linefeed + grunt.util.linefeed
|
||
|
},
|
||
|
files: {
|
||
|
'dist/less/selectize.less': ['dist/less/selectize.less']
|
||
|
}
|
||
|
},
|
||
|
less_theme_dependencies: {
|
||
|
options: {stripBanners: false},
|
||
|
files: {
|
||
|
'dist/less/selectize.bootstrap2.tmp.less': [
|
||
|
'bower_components/bootstrap2/less/variables.less',
|
||
|
'bower_components/bootstrap2/less/mixins.less',
|
||
|
'dist/less/selectize.bootstrap2.less'
|
||
|
],
|
||
|
'dist/less/selectize.bootstrap3.tmp.less': [
|
||
|
'bower_components/bootstrap3/less/variables.less',
|
||
|
'bower_components/bootstrap3/less/mixins/nav-divider.less',
|
||
|
'dist/less/selectize.bootstrap3.less'
|
||
|
]
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
uglify: {
|
||
|
main: {
|
||
|
options: {
|
||
|
'banner': '/*! selectize.js - v<%= pkg.version %> | https://github.com/brianreavis/selectize.js | Apache License (v2) */\n',
|
||
|
'report': 'gzip',
|
||
|
'ascii-only': true
|
||
|
},
|
||
|
files: {
|
||
|
'dist/js/selectize.min.js': ['dist/js/selectize.js'],
|
||
|
'dist/js/standalone/selectize.min.js': ['dist/js/standalone/selectize.js']
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
};
|