aboutsummaryrefslogtreecommitdiff
path: root/node_modules/svgo/plugins/removeHiddenElems.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/svgo/plugins/removeHiddenElems.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/svgo/plugins/removeHiddenElems.js')
-rw-r--r--node_modules/svgo/plugins/removeHiddenElems.js218
1 files changed, 218 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/removeHiddenElems.js b/node_modules/svgo/plugins/removeHiddenElems.js
new file mode 100644
index 00000000..231a2bdf
--- /dev/null
+++ b/node_modules/svgo/plugins/removeHiddenElems.js
@@ -0,0 +1,218 @@
+'use strict';
+
+exports.type = 'perItem';
+
+exports.active = true;
+
+exports.description = 'removes hidden elements (zero sized, with absent attributes)';
+
+exports.params = {
+ displayNone: true,
+ opacity0: true,
+ circleR0: true,
+ ellipseRX0: true,
+ ellipseRY0: true,
+ rectWidth0: true,
+ rectHeight0: true,
+ patternWidth0: true,
+ patternHeight0: true,
+ imageWidth0: true,
+ imageHeight0: true,
+ pathEmptyD: true,
+ polylineEmptyPoints: true,
+ polygonEmptyPoints: true
+};
+
+var regValidPath = /M\s*(?:[-+]?(?:\d*\.\d+|\d+(?:\.|(?!\.)))([eE][-+]?\d+)?(?!\d)\s*,?\s*){2}\D*\d/i;
+
+/**
+ * Remove hidden elements with disabled rendering:
+ * - display="none"
+ * - opacity="0"
+ * - circle with zero radius
+ * - ellipse with zero x-axis or y-axis radius
+ * - rectangle with zero width or height
+ * - pattern with zero width or height
+ * - image with zero width or height
+ * - path with empty data
+ * - polyline with empty points
+ * - polygon with empty points
+ *
+ * @param {Object} item current iteration item
+ * @param {Object} params plugin params
+ * @return {Boolean} if false, item will be filtered out
+ *
+ * @author Kir Belevich
+ */
+exports.fn = function(item, params) {
+
+ if (item.elem) {
+
+ // display="none"
+ //
+ // http://www.w3.org/TR/SVG/painting.html#DisplayProperty
+ // "A value of display: none indicates that the given element
+ // and its children shall not be rendered directly"
+ if (
+ params.displayNone &&
+ item.hasAttr('display', 'none')
+ ) return false;
+
+ // opacity="0"
+ //
+ // http://www.w3.org/TR/SVG/masking.html#ObjectAndGroupOpacityProperties
+ if (
+ params.opacity0 &&
+ item.hasAttr('opacity', '0')
+ ) return false;
+
+ // Circles with zero radius
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#CircleElementRAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <circle r="0">
+ if (
+ params.circleR0 &&
+ item.isElem('circle') &&
+ item.isEmpty() &&
+ item.hasAttr('r', '0')
+ ) return false;
+
+ // Ellipse with zero x-axis radius
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#EllipseElementRXAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <ellipse rx="0">
+ if (
+ params.ellipseRX0 &&
+ item.isElem('ellipse') &&
+ item.isEmpty() &&
+ item.hasAttr('rx', '0')
+ ) return false;
+
+ // Ellipse with zero y-axis radius
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#EllipseElementRYAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <ellipse ry="0">
+ if (
+ params.ellipseRY0 &&
+ item.isElem('ellipse') &&
+ item.isEmpty() &&
+ item.hasAttr('ry', '0')
+ ) return false;
+
+ // Rectangle with zero width
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#RectElementWidthAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <rect width="0">
+ if (
+ params.rectWidth0 &&
+ item.isElem('rect') &&
+ item.isEmpty() &&
+ item.hasAttr('width', '0')
+ ) return false;
+
+ // Rectangle with zero height
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#RectElementHeightAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <rect height="0">
+ if (
+ params.rectHeight0 &&
+ params.rectWidth0 &&
+ item.isElem('rect') &&
+ item.isEmpty() &&
+ item.hasAttr('height', '0')
+ ) return false;
+
+ // Pattern with zero width
+ //
+ // http://www.w3.org/TR/SVG/pservers.html#PatternElementWidthAttribute
+ // "A value of zero disables rendering of the element (i.e., no paint is applied)"
+ //
+ // <pattern width="0">
+ if (
+ params.patternWidth0 &&
+ item.isElem('pattern') &&
+ item.hasAttr('width', '0')
+ ) return false;
+
+ // Pattern with zero height
+ //
+ // http://www.w3.org/TR/SVG/pservers.html#PatternElementHeightAttribute
+ // "A value of zero disables rendering of the element (i.e., no paint is applied)"
+ //
+ // <pattern height="0">
+ if (
+ params.patternHeight0 &&
+ item.isElem('pattern') &&
+ item.hasAttr('height', '0')
+ ) return false;
+
+ // Image with zero width
+ //
+ // http://www.w3.org/TR/SVG/struct.html#ImageElementWidthAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <image width="0">
+ if (
+ params.imageWidth0 &&
+ item.isElem('image') &&
+ item.hasAttr('width', '0')
+ ) return false;
+
+ // Image with zero height
+ //
+ // http://www.w3.org/TR/SVG/struct.html#ImageElementHeightAttribute
+ // "A value of zero disables rendering of the element"
+ //
+ // <image height="0">
+ if (
+ params.imageHeight0 &&
+ item.isElem('image') &&
+ item.hasAttr('height', '0')
+ ) return false;
+
+ // Path with empty data
+ //
+ // http://www.w3.org/TR/SVG/paths.html#DAttribute
+ //
+ // <path d=""/>
+ if (
+ params.pathEmptyD &&
+ item.isElem('path') &&
+ (!item.hasAttr('d') || !regValidPath.test(item.attr('d').value))
+ ) return false;
+
+ // Polyline with empty points
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#PolylineElementPointsAttribute
+ //
+ // <polyline points="">
+ if (
+ params.polylineEmptyPoints &&
+ item.isElem('polyline') &&
+ !item.hasAttr('points')
+ ) return false;
+
+ // Polygon with empty points
+ //
+ // http://www.w3.org/TR/SVG/shapes.html#PolygonElementPointsAttribute
+ //
+ // <polygon points="">
+ if (
+ params.polygonEmptyPoints &&
+ item.isElem('polygon') &&
+ !item.hasAttr('points')
+ ) return false;
+
+ }
+
+};