generate-web-fonts.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. const fs = require('fs');
  2. const glob = require('glob');
  3. const webfontsGenerator = require('@vusion/webfonts-generator');
  4. const mkdirp = require('mkdirp');
  5. const formats = ['woff'];
  6. const mimeTypes = {
  7. eot: 'application/vnd.ms-fontobject',
  8. svg: 'image/svg+xml',
  9. ttf: 'application/x-font-ttf',
  10. woff: 'application/font-woff',
  11. woff2: 'font/woff2'
  12. };
  13. // find names of themes with an icons folder
  14. const themes = glob.sync('ag-theme-*/icons')
  15. .map(item => item.replace('ag-theme-', '').replace('/icons', ''));
  16. const generate = (theme) => {
  17. const fontName = theme === 'base'
  18. ? 'agGridClassic'
  19. : ('agGrid' + theme[0].toUpperCase() + theme.substring(1));
  20. const themeFolder = `ag-theme-${theme}`;
  21. const destFolder = `${themeFolder}/sass/`;
  22. console.log(`Generating webFont for ${theme} theme into ${destFolder}`)
  23. webfontsGenerator(
  24. {
  25. files: glob.sync(`${themeFolder}/icons/*.svg`),
  26. writeFiles: false,
  27. scssFile: true,
  28. fontName: fontName,
  29. fontHeight: 1000,
  30. templateOptions: {
  31. classPrefix: 'ag-icon-',
  32. baseSelector: '.ag-icon',
  33. theme
  34. },
  35. types: formats,
  36. fixedWidth: false,
  37. dest: destFolder,
  38. cssTemplate: './scss-template.hbs',
  39. },
  40. (err, res) => {
  41. if (err) {
  42. console.log(err);
  43. process.exit();
  44. }
  45. var urls = {};
  46. for (var i in formats) {
  47. var format = formats[i];
  48. urls[format] = 'data:' + mimeTypes[format] + ';charset=utf-8;base64,' + Buffer.from(res[format]).toString('base64');
  49. }
  50. const scssContents = res.generateCss(urls);
  51. mkdirp.sync(destFolder);
  52. fs.writeFileSync(`${destFolder}/_ag-theme-${theme}-font-vars.scss`, scssContents);
  53. }
  54. );
  55. }
  56. const theme = process.argv[2];
  57. if (!theme) {
  58. themes.forEach(generate);
  59. } else {
  60. if (themes.includes(theme)) {
  61. generate(theme);
  62. } else {
  63. console.error(`No such theme '${theme}', try one of: ${themes.join(', ')}.`);
  64. }
  65. }