addClassesToSVGElement.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict';
  2. exports.type = 'full';
  3. exports.active = false;
  4. exports.description = 'adds classnames to an outer <svg> element';
  5. var ENOCLS = 'Error in plugin "addClassesToSVGElement": absent parameters.\n\
  6. It should have a list of classes in "classNames" or one "className".\n\
  7. Config example:\n\n\
  8. \
  9. plugins:\n\
  10. - addClassesToSVGElement:\n\
  11. className: "mySvg"\n\n\
  12. \
  13. plugins:\n\
  14. - addClassesToSVGElement:\n\
  15. classNames: ["mySvg", "size-big"]\n';
  16. /**
  17. * Add classnames to an outer <svg> element. Example config:
  18. *
  19. * plugins:
  20. * - addClassesToSVGElement:
  21. * className: 'mySvg'
  22. *
  23. * plugins:
  24. * - addClassesToSVGElement:
  25. * classNames: ['mySvg', 'size-big']
  26. *
  27. * @author April Arcus
  28. */
  29. exports.fn = function(data, params) {
  30. if (!params || !(Array.isArray(params.classNames) && params.classNames.some(String) || params.className)) {
  31. console.error(ENOCLS);
  32. return data;
  33. }
  34. var classNames = params.classNames || [ params.className ],
  35. svg = data.content[0];
  36. if (svg.isElem('svg')) {
  37. if (svg.hasAttr('class')) {
  38. var classes = svg.attr('class').value.split(' ');
  39. classNames.forEach(function(className){
  40. if (classes.indexOf(className) < 0) {
  41. classes.push(className);
  42. }
  43. });
  44. svg.attr('class').value = classes.join(' ');
  45. } else {
  46. svg.addAttr({
  47. name: 'class',
  48. value: classNames.join(' '),
  49. prefix: '',
  50. local: 'class'
  51. });
  52. }
  53. }
  54. return data;
  55. };