| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 | 'use strict';exports.type = 'perItem';exports.active = true;exports.description = 'removes hidden elements (zero sized, with absent attributes)';exports.params = {    isHidden: true,    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) {        // Removes hidden elements        // https://www.w3schools.com/cssref/pr_class_visibility.asp        if (            params.isHidden &&            item.hasAttr('visibility', 'hidden')        ) return false;        // 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;    }};
 |