summaryrefslogtreecommitdiff
path: root/node_modules/svgo/plugins/removeAttributesBySelector.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/svgo/plugins/removeAttributesBySelector.js
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/svgo/plugins/removeAttributesBySelector.js')
-rw-r--r--node_modules/svgo/plugins/removeAttributesBySelector.js97
1 files changed, 97 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/removeAttributesBySelector.js b/node_modules/svgo/plugins/removeAttributesBySelector.js
new file mode 100644
index 00000000..09db8a8d
--- /dev/null
+++ b/node_modules/svgo/plugins/removeAttributesBySelector.js
@@ -0,0 +1,97 @@
+'use strict';
+
+const { querySelectorAll } = require('../lib/xast.js');
+
+exports.name = 'removeAttributesBySelector';
+exports.description =
+ 'removes attributes of elements that match a css selector';
+
+/**
+ * Removes attributes of elements that match a css selector.
+ *
+ * @example
+ * <caption>A selector removing a single attribute</caption>
+ * plugins: [
+ * {
+ * name: "removeAttributesBySelector",
+ * params: {
+ * selector: "[fill='#00ff00']"
+ * attributes: "fill"
+ * }
+ * }
+ * ]
+ *
+ * <rect x="0" y="0" width="100" height="100" fill="#00ff00" stroke="#00ff00"/>
+ * ↓
+ * <rect x="0" y="0" width="100" height="100" stroke="#00ff00"/>
+ *
+ * <caption>A selector removing multiple attributes</caption>
+ * plugins: [
+ * {
+ * name: "removeAttributesBySelector",
+ * params: {
+ * selector: "[fill='#00ff00']",
+ * attributes: [
+ * "fill",
+ * "stroke"
+ * ]
+ * }
+ * }
+ * ]
+ *
+ * <rect x="0" y="0" width="100" height="100" fill="#00ff00" stroke="#00ff00"/>
+ * ↓
+ * <rect x="0" y="0" width="100" height="100"/>
+ *
+ * <caption>Multiple selectors removing attributes</caption>
+ * plugins: [
+ * {
+ * name: "removeAttributesBySelector",
+ * params: {
+ * selectors: [
+ * {
+ * selector: "[fill='#00ff00']",
+ * attributes: "fill"
+ * },
+ * {
+ * selector: "#remove",
+ * attributes: [
+ * "stroke",
+ * "id"
+ * ]
+ * }
+ * ]
+ * }
+ * }
+ * ]
+ *
+ * <rect x="0" y="0" width="100" height="100" fill="#00ff00" stroke="#00ff00"/>
+ * ↓
+ * <rect x="0" y="0" width="100" height="100"/>
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors|MDN CSS Selectors
+ *
+ * @author Bradley Mease
+ *
+ * @type {import('./plugins-types').Plugin<'removeAttributesBySelector'>}
+ */
+exports.fn = (root, params) => {
+ const selectors = Array.isArray(params.selectors)
+ ? params.selectors
+ : [params];
+ for (const { selector, attributes } of selectors) {
+ const nodes = querySelectorAll(root, selector);
+ for (const node of nodes) {
+ if (node.type === 'element') {
+ if (Array.isArray(attributes)) {
+ for (const name of attributes) {
+ delete node.attributes[name];
+ }
+ } else {
+ delete node.attributes[attributes];
+ }
+ }
+ }
+ }
+ return {};
+};