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.
78 lines
2.1 KiB
78 lines
2.1 KiB
'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; |
|
} |
|
} |
|
} |
|
}, |
|
}, |
|
}; |
|
};
|
|
|