UNPKG

datatables.mark.js

Version:

A DataTables plugin for mark.js to highlight search terms in tables

184 lines (174 loc) 4.27 kB
/*!*************************************************** * datatables.mark.js * https://github.com/julmot/datatables.mark.js * Copyright (c) 2016–2020, Julian Kühnel * Released under the MIT license https://git.io/voRZ7 *****************************************************/ 'use strict'; const jitGrunt = require('jit-grunt'); module.exports = grunt => { // load grunt tasks jitGrunt(grunt, { usebanner: 'grunt-banner' }); // settings const mainFile = 'datatables.mark.js'; // read copyright header let fc = grunt.file.read(`src/${mainFile}`); let regex = /\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//gmi; const banner = fc.match(regex)[0]; grunt.log.writeln(banner['yellow']); // grunt configuration grunt.initConfig({ babel: { options: { compact: false, comments: false }, es5: { options: { presets: ['es2015'] }, files: [{ 'expand': true, 'cwd': 'build/', 'src': ['*.js'], 'dest': 'dist/' }] }, es6: { files: [{ 'expand': true, 'cwd': 'build/', 'src': ['*.js'], 'dest': 'dist/', 'ext': '.es6.js', 'extDot': 'last' }] }, // as uglify can not compress es6, use the babel workaround es6min: { options: { compact: true }, files: [{ 'expand': true, 'cwd': 'dist/', 'src': ['*.es6.js'], 'dest': 'dist/', 'ext': '.min.js', 'extDot': 'last' }] } }, clean: { build: ['build/*.js'], dist: ['dist/*.js'] }, eslint: { options: { configFile: '.eslintrc' }, target: ['src/**/*.js', 'test/**/*.js'] }, jsdoc: { dist: { src: [`src/${mainFile}`, 'README.md'], options: { destination: 'build/doc' } } }, karma: { options: { configFile: 'karma.conf.js' // shared config }, build: {}, dev: { singleRun: false, autoWatch: true, background: true } }, uglify: { dist: { options: { screwIE8: true, compress: true, reserveComments: false }, files: [{ 'expand': true, 'cwd': 'dist/', 'src': ['*.js', '!*.es6.js', '!*.es6.min.js'], 'dest': 'dist/', 'ext': '.min.js', 'extDot': 'last' }] } }, usebanner: { dist: { options: { position: 'top', banner: banner, linebreak: true }, files: { src: ['dist/*.js'] } } }, watch: { dist: { files: ['src/**', 'test/**', 'build/templates/**'], tasks: ['compile', 'karma:dev:run'] } } }); /** * Compile build templates and generate all of them in ES5, ES6, with * minification and without into ./dist */ grunt.registerTask('compile', () => { grunt.template.addDelimiters('jsBuildDelimiters', '//<%', '%>'); grunt.file.expand('build/templates/*.js').forEach(file => { const filename = file.replace(/^.*[\\/]/, ''); const tpl = grunt.file.read(file); const module = grunt.file.read(`src/${mainFile}`); const compiled = grunt.template.process(tpl, { 'delimiters': 'jsBuildDelimiters', 'data': { 'module': module } }); grunt.file.write(`build/${filename}`, compiled); }); grunt.task.run([ 'clean:dist', 'babel', 'uglify', 'usebanner', 'clean:build' ]); }); /** * Run tests on file changes */ grunt.registerTask('dev', ['karma:dev:start', 'watch']); /** * Run lint */ grunt.registerTask('lint', function() { grunt.task.run(['eslint']); }); /** * Run tests */ grunt.registerTask('test', function() { grunt.log.subhead( 'See the table below for test coverage or view \'build/coverage/\'' ); grunt.task.run(['compile', 'lint', 'karma:build']); }); /** * Run tests, generate dist files and JSDOC documentation */ grunt.registerTask('dist', ['test', 'jsdoc']); };