1 var fs = require('fs');
2 var path = require('path');
3 var _ = require('lodash');
5 module.exports = function(grunt) {
10 'css/videojs-icons.css': 'scss/videojs-icons.scss'
16 files: ['**/*.hbs', '**/*.js', './icons.json'],
22 grunt.registerTask('generate-font', function() {
23 var done = this.async();
25 let webfontsGenerator = require('webfonts-generator');
26 let iconConfig = require('../icons.json');
27 let svgRootDir = iconConfig['root-dir'];
28 let icons = iconConfig.icons;
30 let iconFiles = icons.map(function(icon) {
31 // If root-dir is specified for a specific icon, use that.
32 if (icon['root-dir']) {
33 return icon['root-dir'] + icon.svg;
36 // Otherwise, use the default root-dir.
37 return svgRootDir + icon.svg;
43 fontName: iconConfig['font-name'],
44 cssDest: 'scss/_icons.scss',
45 cssTemplate: './templates/scss.hbs',
46 htmlDest: 'index.html',
47 htmlTemplate: './templates/html.hbs',
49 rename: function(iconPath) {
50 let fileName = path.basename(iconPath);
52 let iconName = _.result(_.find(icons, function(icon) {
53 let svgName = path.basename(icon.svg);
55 return svgName === fileName;
60 types: ['svg', 'ttf', 'woff', 'eot']
72 grunt.registerTask('update-base64', function() {
73 let iconScssFile = './scss/_icons.scss';
75 ttf: './fonts/VideoJS.ttf',
76 woff: './fonts/VideoJS.woff'
79 let scssContents = fs.readFileSync(iconScssFile).toString();
81 Object.keys(fontFiles).forEach(function(font) {
82 let fontFile = fontFiles[font];
83 let fontContent = fs.readFileSync(fontFile);
85 let regex = new RegExp(`(url.*font-${font}.*base64,)([^\\s]+)(\\).*)`);
87 scssContents = scssContents.replace(regex, `$1${fontContent.toString('base64')}$3`);
90 fs.writeFileSync(iconScssFile, scssContents);
93 grunt.registerTask('default', ['generate-font', 'update-base64', 'sass']);