text: /*!
   * Bootstrap Grunt task for generating raw-files.min.js for the Customizer
   * http://getbootstrap.com
   * Copyright 2014-2015 Twitter, Inc.
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
   */
  
  'use strict';
  
  var fs = require('fs');
  var btoa = require('btoa');
  var glob = require('glob');
  
  function getFiles(type) {
    var files = {};
    var recursive = type === 'less';
    var globExpr = recursive ? '/**/*' : '/*';
    glob.sync(type + globExpr)
      .filter(function (path) {
        return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path);
      })
      .forEach(function (fullPath) {
        var relativePath = fullPath.replace(/^[^/]+\//, '');
        files[relativePath] = type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8');
      });
    return 'var __' + type + ' = ' + JSON.stringify(files) + '\n';
  }
  
  module.exports = function generateRawFilesJs(grunt, banner) {
    if (!banner) {
      banner = '';
    }
    var dirs = ['js', 'less', 'fonts'];
    var files = banner + dirs.map(getFiles).reduce(function (combined, file) {
      return combined + file;
    }, '');
    var rawFilesJs = 'docs/assets/js/raw-files.min.js';
    try {
      fs.writeFileSync(rawFilesJs, files);
    } catch (err) {
      grunt.fail.warn(err);
    }
    grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.');
  };
  