88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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];
 | |
|                 }
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|     },
 | |
|   };
 | |
| };
 |