diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-12-21 22:46:53 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-12-21 22:46:53 +0800 |
| commit | f06956efd2dc4bf77244a9fcce2b883a00b925af (patch) | |
| tree | 0123cb73ce67f1f4b17e1d6cbabff076ee44e31b /node_modules/svgo/plugins/removeScriptElement.js | |
| parent | 8d980c13970c15b6d2312b6fc4ac51698dd0d220 (diff) | |
updated node modules
Diffstat (limited to 'node_modules/svgo/plugins/removeScriptElement.js')
| -rw-r--r-- | node_modules/svgo/plugins/removeScriptElement.js | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/node_modules/svgo/plugins/removeScriptElement.js b/node_modules/svgo/plugins/removeScriptElement.js index 0e42de4c..80fcea3b 100644 --- a/node_modules/svgo/plugins/removeScriptElement.js +++ b/node_modules/svgo/plugins/removeScriptElement.js @@ -1,17 +1,26 @@ 'use strict'; const { detachNodeFromParent } = require('../lib/xast.js'); +const { attrsGroups } = require('./_collections.js'); exports.name = 'removeScriptElement'; -exports.description = 'removes <script> elements (disabled by default)'; +exports.description = 'removes scripts (disabled by default)'; + +/** Union of all event attributes. */ +const eventAttrs = [ + ...attrsGroups.animationEvent, + ...attrsGroups.documentEvent, + ...attrsGroups.documentElementEvent, + ...attrsGroups.globalEvent, + ...attrsGroups.graphicalEvent, +]; /** - * Remove <script>. + * Remove scripts. * * https://www.w3.org/TR/SVG11/script.html * * @author Patrick Klingemann - * * @type {import('./plugins-types').Plugin<'removeScriptElement'>} */ exports.fn = () => { @@ -20,6 +29,40 @@ exports.fn = () => { enter: (node, parentNode) => { if (node.name === 'script') { detachNodeFromParent(node, parentNode); + return; + } + + for (const attr of eventAttrs) { + if (node.attributes[attr] != null) { + delete node.attributes[attr]; + } + } + }, + exit: (node, parentNode) => { + if (node.name !== 'a') { + return; + } + + for (const attr of Object.keys(node.attributes)) { + if (attr === 'href' || attr.endsWith(':href')) { + if ( + node.attributes[attr] == null || + !node.attributes[attr].trimStart().startsWith('javascript:') + ) { + continue; + } + + const index = parentNode.children.indexOf(node); + parentNode.children.splice(index, 1, ...node.children); + + // TODO remove legacy parentNode in v4 + for (const child of node.children) { + Object.defineProperty(child, 'parentNode', { + writable: true, + value: parentNode, + }); + } + } } }, }, |
