minifyStyles.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. 'use strict';
  2. exports.type = 'perItem';
  3. exports.active = true;
  4. exports.params = {
  5. svgo: {}
  6. };
  7. exports.description = 'minifies existing styles in svg';
  8. var csso = require('csso');
  9. /**
  10. * Minifies styles (<style> element + style attribute) using svgo
  11. *
  12. * @param {Object} item current iteration item
  13. * @return {Boolean} if false, item will be filtered out
  14. *
  15. * @author strarsis <strarsis@gmail.com>
  16. */
  17. exports.fn = function(item, svgoOptions) {
  18. if(item.elem) {
  19. if(item.isElem('style') && !item.isEmpty()) {
  20. var styleCss = item.content[0].text || item.content[0].cdata || [],
  21. DATA = styleCss.indexOf('>') >= 0 || styleCss.indexOf('<') >= 0 ? 'cdata' : 'text';
  22. if(styleCss.length > 0) {
  23. var styleCssMinified = csso.minify(styleCss, svgoOptions);
  24. item.content[0][DATA] = styleCssMinified.css;
  25. }
  26. }
  27. if(item.hasAttr('style')) {
  28. var itemCss = item.attr('style').value;
  29. if(itemCss.length > 0) {
  30. var itemCssMinified = csso.minifyBlock(itemCss, svgoOptions);
  31. item.attr('style').value = itemCssMinified.css;
  32. }
  33. }
  34. }
  35. return item;
  36. };