|
|
'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;
}
};
|