You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							225 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							225 lines
						
					
					
						
							6.5 KiB
						
					
					
				'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; | 
						|
 | 
						|
    } | 
						|
 | 
						|
};
 | 
						|
 |