You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict';
const { detachNodeFromParent } = require('../lib/xast.js');
exports.name = 'removeElementsByAttr'; exports.type = 'visitor'; exports.active = false; exports.description = 'removes arbitrary elements by ID or className (disabled by default)';
/** * Remove arbitrary SVG elements by ID or className. * * @example id * > single: remove element with ID of `elementID` * --- * removeElementsByAttr: * id: 'elementID' * * > list: remove multiple elements by ID * --- * removeElementsByAttr: * id: * - 'elementID' * - 'anotherID' * * @example class * > single: remove all elements with class of `elementClass` * --- * removeElementsByAttr: * class: 'elementClass' * * > list: remove all elements with class of `elementClass` or `anotherClass` * --- * removeElementsByAttr: * class: * - 'elementClass' * - 'anotherClass' * * @author Eli Dupuis (@elidupuis) * * @type {import('../lib/types').Plugin<{ * id?: string | Array<string>, * class?: string | Array<string> * }>} */ exports.fn = (root, params) => { const ids = params.id == null ? [] : Array.isArray(params.id) ? params.id : [params.id]; const classes = params.class == null ? [] : Array.isArray(params.class) ? params.class : [params.class]; return { element: { enter: (node, parentNode) => { // remove element if it's `id` matches configured `id` params
if (node.attributes.id != null && ids.length !== 0) { if (ids.includes(node.attributes.id)) { detachNodeFromParent(node, parentNode); } } // remove element if it's `class` contains any of the configured `class` params
if (node.attributes.class && classes.length !== 0) { const classList = node.attributes.class.split(' '); for (const item of classes) { if (classList.includes(item)) { detachNodeFromParent(node, parentNode); break; } } } }, }, }; };
|