Files
react-native-devtools-frontend/node_modules/svgo/plugins/cleanupEnableBackground.js
T
Tim van der Lippe 706ec965fb Add packages to optimize svgs dynamically
These packages will be used to dynamically optimize SVG images
during the build.

R=jacktfranklin@chromium.org

Bug: 1216402
Change-Id: I04e95aa7d79c9d67beaf8a7861182c52b16b7d0f
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2939992
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
2021-06-04 13:32:16 +00:00

74 lines
1.9 KiB
JavaScript

'use strict';
const { traverse } = require('../lib/xast.js');
exports.type = 'full';
exports.active = true;
exports.description =
'remove or cleanup enable-background attribute when possible';
/**
* Remove or cleanup enable-background attr which coincides with a width/height box.
*
* @see https://www.w3.org/TR/SVG11/filters.html#EnableBackgroundProperty
*
* @example
* <svg width="100" height="50" enable-background="new 0 0 100 50">
* ⬇
* <svg width="100" height="50">
*
* @param {Object} root current iteration item
* @return {Boolean} if false, item will be filtered out
*
* @author Kir Belevich
*/
exports.fn = function (root) {
const regEnableBackground = /^new\s0\s0\s([-+]?\d*\.?\d+([eE][-+]?\d+)?)\s([-+]?\d*\.?\d+([eE][-+]?\d+)?)$/;
let hasFilter = false;
const elems = ['svg', 'mask', 'pattern'];
traverse(root, (node) => {
if (node.type === 'element') {
if (
elems.includes(node.name) &&
node.attributes['enable-background'] != null &&
node.attributes.width != null &&
node.attributes.height != null
) {
const match = node.attributes['enable-background'].match(
regEnableBackground
);
if (match) {
if (
node.attributes.width === match[1] &&
node.attributes.height === match[3]
) {
if (node.name === 'svg') {
delete node.attributes['enable-background'];
} else {
node.attributes['enable-background'] = 'new';
}
}
}
}
if (node.name === 'filter') {
hasFilter = true;
}
}
});
if (hasFilter === false) {
traverse(root, (node) => {
if (node.type === 'element') {
//we don't need 'enable-background' if we have no filters
delete node.attributes['enable-background'];
}
});
}
return root;
};