| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 
							- 'use strict';
 
- const { detachNodeFromParent } = require('../lib/xast.js');
 
- const { editorNamespaces } = require('./_collections.js');
 
- exports.type = 'visitor';
 
- exports.name = 'removeEditorsNSData';
 
- exports.active = true;
 
- exports.description = 'removes editors namespaces, elements and attributes';
 
- /**
 
-  * Remove editors namespaces, elements and attributes.
 
-  *
 
-  * @example
 
-  * <svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd">
 
-  * <sodipodi:namedview/>
 
-  * <path sodipodi:nodetypes="cccc"/>
 
-  *
 
-  * @author Kir Belevich
 
-  *
 
-  * @type {import('../lib/types').Plugin<{
 
-  *   additionalNamespaces?: Array<string>
 
-  * }>}
 
-  */
 
- exports.fn = (_root, params) => {
 
-   let namespaces = editorNamespaces;
 
-   if (Array.isArray(params.additionalNamespaces)) {
 
-     namespaces = [...editorNamespaces, ...params.additionalNamespaces];
 
-   }
 
-   /**
 
-    * @type {Array<string>}
 
-    */
 
-   const prefixes = [];
 
-   return {
 
-     element: {
 
-       enter: (node, parentNode) => {
 
-         // collect namespace aliases from svg element
 
-         if (node.name === 'svg') {
 
-           for (const [name, value] of Object.entries(node.attributes)) {
 
-             if (name.startsWith('xmlns:') && namespaces.includes(value)) {
 
-               prefixes.push(name.slice('xmlns:'.length));
 
-               // <svg xmlns:sodipodi="">
 
-               delete node.attributes[name];
 
-             }
 
-           }
 
-         }
 
-         // remove editor attributes, for example
 
-         // <* sodipodi:*="">
 
-         for (const name of Object.keys(node.attributes)) {
 
-           if (name.includes(':')) {
 
-             const [prefix] = name.split(':');
 
-             if (prefixes.includes(prefix)) {
 
-               delete node.attributes[name];
 
-             }
 
-           }
 
-         }
 
-         // remove editor elements, for example
 
-         // <sodipodi:*>
 
-         if (node.name.includes(':')) {
 
-           const [prefix] = node.name.split(':');
 
-           if (prefixes.includes(prefix)) {
 
-             detachNodeFromParent(node, parentNode);
 
-           }
 
-         }
 
-       },
 
-     },
 
-   };
 
- };
 
 
  |