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.
		
		
		
		
		
			
		
			
				
					
					
						
							84 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							84 lines
						
					
					
						
							2.2 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
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 http://www.w3.org/TR/SVG/filters.html#EnableBackgroundProperty | 
						|
 * | 
						|
 * @example | 
						|
 * <svg width="100" height="50" enable-background="new 0 0 100 50"> | 
						|
 *             ⬇ | 
						|
 * <svg width="100" height="50"> | 
						|
 * | 
						|
 * @param {Object} item current iteration item | 
						|
 * @return {Boolean} if false, item will be filtered out | 
						|
 * | 
						|
 * @author Kir Belevich | 
						|
 */ | 
						|
exports.fn = function(data) { | 
						|
 | 
						|
    var regEnableBackground = /^new\s0\s0\s([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)\s([\-+]?\d*\.?\d+([eE][\-+]?\d+)?)$/, | 
						|
        hasFilter = false, | 
						|
        elems = ['svg', 'mask', 'pattern']; | 
						|
 | 
						|
    function checkEnableBackground(item) { | 
						|
        if ( | 
						|
            item.isElem(elems) && | 
						|
            item.hasAttr('enable-background') && | 
						|
            item.hasAttr('width') && | 
						|
            item.hasAttr('height') | 
						|
        ) { | 
						|
 | 
						|
            var match = item.attr('enable-background').value.match(regEnableBackground); | 
						|
 | 
						|
            if (match) { | 
						|
                if ( | 
						|
                    item.attr('width').value === match[1] && | 
						|
                    item.attr('height').value === match[3] | 
						|
                ) { | 
						|
                    if (item.isElem('svg')) { | 
						|
                        item.removeAttr('enable-background'); | 
						|
                    } else { | 
						|
                        item.attr('enable-background').value = 'new'; | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
 | 
						|
        } | 
						|
    } | 
						|
 | 
						|
    function checkForFilter(item) { | 
						|
        if (item.isElem('filter')) { | 
						|
            hasFilter = true; | 
						|
        } | 
						|
    } | 
						|
 | 
						|
    function monkeys(items, fn) { | 
						|
        items.content.forEach(function(item) { | 
						|
            fn(item); | 
						|
 | 
						|
            if (item.content) { | 
						|
                monkeys(item, fn); | 
						|
            } | 
						|
        }); | 
						|
        return items; | 
						|
    } | 
						|
 | 
						|
    var firstStep = monkeys(data, function(item) { | 
						|
        checkEnableBackground(item); | 
						|
        if (!hasFilter) { | 
						|
            checkForFilter(item); | 
						|
        } | 
						|
    }); | 
						|
 | 
						|
    return hasFilter ? firstStep : monkeys(firstStep, function(item) { | 
						|
            //we don't need 'enable-background' if we have no filters | 
						|
            item.removeAttr('enable-background'); | 
						|
        }); | 
						|
};
 | 
						|
 |