Select Git revision
Gruntfile.js
Forked from
Digital Experience Group / UNL_Search
57 commits behind the upstream repository.
Gruntfile.js 4.58 KiB
var every = require('lodash/collection/every');
var fs = require('fs');
const sass = require('node-sass');
module.exports = function (grunt) {
var lessDir = 'www/less';
var lessVendorDir = lessDir + '/lib';
var sassDir = 'www/scss';
// var sassVendorDir = sassDir + '/mixins';
var cssDir = 'www/css';
var jsDir = 'www/js';
var cssFiles = [
'search',
'search-google',
];
var jsFiles = [
jsDir + '/search.js',
];
//TODO Update or remove for 5.0?
var wdnMixinLibBaseUrl = 'https://raw.githubusercontent.com/unl/wdntemplates/4.1/wdn/templates_4.1/less/_mixins/';
var wdnMixins = [
'breakpoints.less',
'colors.less',
'fonts.less',
];
var allMixinsExist = every(wdnMixins, function(value) {
return fs.existsSync(lessVendorDir + '/' + value);
});
// TODO: Import DCF and UNLedu 5.0 mixins and variables
// var dcfMixinLibBaseUrl = 'https://raw.githubusercontent.com/d-c-n/dcf/master/assets/dist/scss/mixins/';
// var dcfMixins = [
// '_mixins.backgrounds.scss',
// '_mixins.margins.scss',
// '_mixins.padding.scss',
// '_mixins.typography.scss'
// ];
// var allMixinsExist = every(dcfMixins, function(value) {
// return fs.existsSync(sassVendorDir + '/' + value);
// });
var lessFiles = {};
cssFiles.forEach(function(file) {
lessFiles[cssDir + '/' + file + '.css'] = lessDir + '/' + file + '.less';
});
var sassFiles = {};
cssFiles.forEach(function(file) {
sassFiles[cssDir + '/' + file + '-5.0.css'] = sassDir + '/' + file + '.scss';
});
var builtJsFiles = {};
builtJsFiles[jsDir + '/search.min.js'] = jsFiles;
var autoprefixPlugin = new (require('less-plugin-autoprefix'))({browsers: ["last 2 versions"]});
var cleanCssPlugin = new (require('less-plugin-clean-css'))();
// load all grunt tasks matching the ['grunt-*', '@*/grunt-*'] patterns
require('load-grunt-tasks')(grunt);
grunt.initConfig({
'curl-dir': {
'less-libs': {
src: wdnMixins.map(function(file) {
return wdnMixinLibBaseUrl + file;
}),
dest: lessVendorDir
}
// 'dcf-mixins': {
// src: dcfMixins.map(function(file) {
// return dcfMixinLibBaseUrl + file;
// }),
// dest: sassVendorDir
// }
// TODO: add UNLedu 5.0 mixins
},
less: {
all: {
files: lessFiles,
options: {
paths: [lessDir],
plugins: [
autoprefixPlugin,
cleanCssPlugin
]
}
}
},
sass: {
all: {
files: sassFiles,
options: {
implementation: sass,
sourceMap: true
// includePaths: [
// __dirname+'/node_modules/modularscale-sass/stylesheets'
// ]
}
},
},
postcss: {
options: {
processors: [
require('autoprefixer'),
require('cssnano')() // TODO: advanced config of cssnano
],
map: true
},
dist: {
src: cssDir + '/*.css'
}
},
uglify: {
options: {
sourceMap: true
},
all: {
files: builtJsFiles
}
},
requirejs: {
all: {
options: {
appDir: 'www/js/embed-src/',
baseUrl: './',
dir: 'www/js/embed/',
optimize: 'uglify2',
logLevel: 2,
preserveLicenseComments: false,
generateSourceMaps: true,
paths: {
'requireLib': 'require'
},
map: {
"*": {
css: 'require-css/css'
}
},
modules: [
{
name: 'all',
create: true,
include: ['requireLib', 'require-css/css', 'ga', 'main'],
exclude: ['require-css/normalize']
}
]
}
}
},
clean: {
lessCss: Object.keys(lessFiles).concat(lessVendorDir),
// css: Object.keys(sassFiles).concat(sassVendorDir),
sassCss: Object.keys(sassFiles),
js: Object.keys(builtJsFiles).concat(jsDir + '/**/*.map')
},
watch: {
less: {
files: lessDir + '/**/*.less',
tasks: ['less']
},
sass: {
files: sassDir + '/**/*.scss',
tasks: ['sass', 'postcss']
}
}
});
// establish grunt default
var defaultTasks = ['less', 'sass', 'postcss', 'uglify', 'requirejs'];
var localTasks = defaultTasks.slice();
if (!allMixinsExist) {
defaultTasks.unshift('curl-dir');
}
grunt.registerTask('default', defaultTasks);
grunt.registerTask('all-local', localTasks);
// legacy targets from Makefile
grunt.registerTask('all', ['default']);
grunt.registerTask('js', ['uglify']);
};