Skip to content
Snippets Groups Projects
Select Git revision
  • optimize-images
  • 5.0
  • master default protected
  • 4.1
4 results

Gruntfile.js

Blame
  • 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']);
    };