summaryrefslogtreecommitdiff
path: root/node_modules/svgo/plugins/removeScriptElement.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-12-21 22:46:53 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-12-21 22:46:53 +0800
commitf06956efd2dc4bf77244a9fcce2b883a00b925af (patch)
tree0123cb73ce67f1f4b17e1d6cbabff076ee44e31b /node_modules/svgo/plugins/removeScriptElement.js
parent8d980c13970c15b6d2312b6fc4ac51698dd0d220 (diff)
updated node modules
Diffstat (limited to 'node_modules/svgo/plugins/removeScriptElement.js')
-rw-r--r--node_modules/svgo/plugins/removeScriptElement.js49
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,
+ });
+ }
+ }
}
},
},