summaryrefslogtreecommitdiff
path: root/node_modules/svgo/plugins/addAttributesToSVGElement.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/svgo/plugins/addAttributesToSVGElement.js')
-rw-r--r--node_modules/svgo/plugins/addAttributesToSVGElement.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/addAttributesToSVGElement.js b/node_modules/svgo/plugins/addAttributesToSVGElement.js
new file mode 100644
index 00000000..845cb056
--- /dev/null
+++ b/node_modules/svgo/plugins/addAttributesToSVGElement.js
@@ -0,0 +1,82 @@
+'use strict';
+
+exports.name = 'addAttributesToSVGElement';
+exports.description = 'adds attributes to an outer <svg> element';
+
+var ENOCLS = `Error in plugin "addAttributesToSVGElement": absent parameters.
+It should have a list of "attributes" or one "attribute".
+Config example:
+
+plugins: [
+ {
+ name: 'addAttributesToSVGElement',
+ params: {
+ attribute: "mySvg"
+ }
+ }
+]
+
+plugins: [
+ {
+ name: 'addAttributesToSVGElement',
+ params: {
+ attributes: ["mySvg", "size-big"]
+ }
+ }
+]
+
+plugins: [
+ {
+ name: 'addAttributesToSVGElement',
+ params: {
+ attributes: [
+ {
+ focusable: false
+ },
+ {
+ 'data-image': icon
+ }
+ ]
+ }
+ }
+]
+`;
+
+/**
+ * Add attributes to an outer <svg> element. Example config:
+ *
+ * @author April Arcus
+ *
+ * @type {import('./plugins-types').Plugin<'addAttributesToSVGElement'>}
+ */
+exports.fn = (root, params) => {
+ if (!Array.isArray(params.attributes) && !params.attribute) {
+ console.error(ENOCLS);
+ return null;
+ }
+ const attributes = params.attributes || [params.attribute];
+ return {
+ element: {
+ enter: (node, parentNode) => {
+ if (node.name === 'svg' && parentNode.type === 'root') {
+ for (const attribute of attributes) {
+ if (typeof attribute === 'string') {
+ if (node.attributes[attribute] == null) {
+ // @ts-ignore disallow explicit nullable attribute value
+ node.attributes[attribute] = undefined;
+ }
+ }
+ if (typeof attribute === 'object') {
+ for (const key of Object.keys(attribute)) {
+ if (node.attributes[key] == null) {
+ // @ts-ignore disallow explicit nullable attribute value
+ node.attributes[key] = attribute[key];
+ }
+ }
+ }
+ }
+ }
+ },
+ },
+ };
+};