123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 'use strict';
- exports.name = 'addClassesToSVGElement';
- exports.type = 'visitor';
- exports.active = false;
- exports.description = 'adds classnames to an outer <svg> element';
- var ENOCLS = `Error in plugin "addClassesToSVGElement": absent parameters.
- It should have a list of classes in "classNames" or one "className".
- Config example:
- plugins: [
- {
- name: "addClassesToSVGElement",
- params: {
- className: "mySvg"
- }
- }
- ]
- plugins: [
- {
- name: "addClassesToSVGElement",
- params: {
- classNames: ["mySvg", "size-big"]
- }
- }
- ]
- `;
- /**
- * Add classnames to an outer <svg> element. Example config:
- *
- * plugins: [
- * {
- * name: "addClassesToSVGElement",
- * params: {
- * className: "mySvg"
- * }
- * }
- * ]
- *
- * plugins: [
- * {
- * name: "addClassesToSVGElement",
- * params: {
- * classNames: ["mySvg", "size-big"]
- * }
- * }
- * ]
- *
- * @author April Arcus
- *
- * @type {import('../lib/types').Plugin<{
- * className?: string,
- * classNames?: Array<string>
- * }>}
- */
- exports.fn = (root, params) => {
- if (
- !(Array.isArray(params.classNames) && params.classNames.some(String)) &&
- !params.className
- ) {
- console.error(ENOCLS);
- return null;
- }
- const classNames = params.classNames || [params.className];
- return {
- element: {
- enter: (node, parentNode) => {
- if (node.name === 'svg' && parentNode.type === 'root') {
- const classList = new Set(
- node.attributes.class == null
- ? null
- : node.attributes.class.split(' ')
- );
- for (const className of classNames) {
- if (className != null) {
- classList.add(className);
- }
- }
- node.attributes.class = Array.from(classList).join(' ');
- }
- },
- },
- };
- };
|