123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 'use strict';
- exports.name = 'addAttributesToSVGElement';
- exports.type = 'visitor';
- exports.active = false;
- exports.description = 'adds attributes to an outer <svg> element';
- var ENOCLS = `Error in plugin "addAttributesToSVGElement": absent parameters.
- It should have a list of "attributes" or one "attribute".
- Config example:
- plugins: [
- {
- name: 'addAttributesToSVGElement',
- params: {
- attribute: "mySvg"
- }
- }
- ]
- plugins: [
- {
- name: 'addAttributesToSVGElement',
- params: {
- attributes: ["mySvg", "size-big"]
- }
- }
- ]
- plugins: [
- {
- name: 'addAttributesToSVGElement',
- params: {
- attributes: [
- {
- focusable: false
- },
- {
- 'data-image': icon
- }
- ]
- }
- }
- ]
- `;
- /**
- * Add attributes to an outer <svg> element. Example config:
- *
- * @author April Arcus
- *
- * @type {import('../lib/types').Plugin<{
- * attribute?: string | Record<string, null | string>,
- * attributes?: Array<string | Record<string, null | string>>
- * }>}
- */
- exports.fn = (root, params) => {
- if (!Array.isArray(params.attributes) && !params.attribute) {
- console.error(ENOCLS);
- return null;
- }
- const attributes = params.attributes || [params.attribute];
- return {
- element: {
- enter: (node, parentNode) => {
- if (node.name === 'svg' && parentNode.type === 'root') {
- for (const attribute of attributes) {
- if (typeof attribute === 'string') {
- if (node.attributes[attribute] == null) {
- // @ts-ignore disallow explicit nullable attribute value
- node.attributes[attribute] = undefined;
- }
- }
- if (typeof attribute === 'object') {
- for (const key of Object.keys(attribute)) {
- if (node.attributes[key] == null) {
- // @ts-ignore disallow explicit nullable attribute value
- node.attributes[key] = attribute[key];
- }
- }
- }
- }
- }
- },
- },
- };
- };
|