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.
		
		
		
		
		
			
		
			
				
					
					
						
							150 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							150 lines
						
					
					
						
							4.1 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var DEFAULT_SEPARATOR = ':'; | 
						|
 | 
						|
exports.type = 'perItem'; | 
						|
 | 
						|
exports.active = false; | 
						|
 | 
						|
exports.description = 'removes specified attributes'; | 
						|
 | 
						|
exports.params = { | 
						|
    elemSeparator: DEFAULT_SEPARATOR, | 
						|
    preserveCurrentColor: false, | 
						|
    attrs: [] | 
						|
}; | 
						|
 | 
						|
/** | 
						|
 * Remove attributes | 
						|
 * | 
						|
 * @param elemSeparator | 
						|
 *   format: string | 
						|
 * | 
						|
 * @param preserveCurrentColor | 
						|
 *   format: boolean | 
						|
 * | 
						|
 * @param attrs: | 
						|
 * | 
						|
 *   format: [ element* : attribute* : value* ] | 
						|
 * | 
						|
 *   element   : regexp (wrapped into ^...$), single * or omitted > all elements (must be present when value is used) | 
						|
 *   attribute : regexp (wrapped into ^...$) | 
						|
 *   value     : regexp (wrapped into ^...$), single * or omitted > all values | 
						|
 * | 
						|
 *   examples: | 
						|
 * | 
						|
 *     > basic: remove fill attribute | 
						|
 *     --- | 
						|
 *     removeAttrs: | 
						|
 *       attrs: 'fill' | 
						|
 * | 
						|
 *     > remove fill attribute on path element | 
						|
 *     --- | 
						|
 *       attrs: 'path:fill' | 
						|
 * | 
						|
 *     > remove fill attribute on path element where value is none | 
						|
 *     --- | 
						|
 *       attrs: 'path:fill:none' | 
						|
 * | 
						|
 * | 
						|
 *     > remove all fill and stroke attribute | 
						|
 *     --- | 
						|
 *       attrs: | 
						|
 *         - 'fill' | 
						|
 *         - 'stroke' | 
						|
 * | 
						|
 *     [is same as] | 
						|
 * | 
						|
 *       attrs: '(fill|stroke)' | 
						|
 * | 
						|
 *     [is same as] | 
						|
 * | 
						|
 *       attrs: '*:(fill|stroke)' | 
						|
 * | 
						|
 *     [is same as] | 
						|
 * | 
						|
 *       attrs: '.*:(fill|stroke)' | 
						|
 * | 
						|
 *     [is same as] | 
						|
 * | 
						|
 *       attrs: '.*:(fill|stroke):.*' | 
						|
 * | 
						|
 * | 
						|
 *     > remove all stroke related attributes | 
						|
 *     ---- | 
						|
 *     attrs: 'stroke.*' | 
						|
 * | 
						|
 * | 
						|
 * @param {Object} item current iteration item | 
						|
 * @param {Object} params plugin params | 
						|
 * @return {Boolean} if false, item will be filtered out | 
						|
 * | 
						|
 * @author Benny Schudel | 
						|
 */ | 
						|
exports.fn = function(item, params) { | 
						|
        // wrap into an array if params is not | 
						|
    if (!Array.isArray(params.attrs)) { | 
						|
        params.attrs = [params.attrs]; | 
						|
    } | 
						|
 | 
						|
    if (item.isElem()) { | 
						|
        var elemSeparator = typeof params.elemSeparator == 'string' ? params.elemSeparator : DEFAULT_SEPARATOR; | 
						|
        var preserveCurrentColor = typeof params.preserveCurrentColor == 'boolean' ? params.preserveCurrentColor : false; | 
						|
 | 
						|
            // prepare patterns | 
						|
        var patterns = params.attrs.map(function(pattern) { | 
						|
 | 
						|
                // if no element separators (:), assume it's attribute name, and apply to all elements *regardless of value* | 
						|
            if (pattern.indexOf(elemSeparator) === -1) { | 
						|
                pattern = ['.*', elemSeparator, pattern, elemSeparator, '.*'].join(''); | 
						|
 | 
						|
                // if only 1 separator, assume it's element and attribute name, and apply regardless of attribute value | 
						|
            } else if (pattern.split(elemSeparator).length < 3) { | 
						|
                pattern = [pattern, elemSeparator, '.*'].join(''); | 
						|
            } | 
						|
 | 
						|
                // create regexps for element, attribute name, and attribute value | 
						|
            return pattern.split(elemSeparator) | 
						|
                .map(function(value) { | 
						|
 | 
						|
                        // adjust single * to match anything | 
						|
                    if (value === '*') { value = '.*'; } | 
						|
 | 
						|
                    return new RegExp(['^', value, '$'].join(''), 'i'); | 
						|
                }); | 
						|
 | 
						|
        }); | 
						|
 | 
						|
            // loop patterns | 
						|
        patterns.forEach(function(pattern) { | 
						|
 | 
						|
                // matches element | 
						|
            if (pattern[0].test(item.elem)) { | 
						|
 | 
						|
                    // loop attributes | 
						|
                item.eachAttr(function(attr) { | 
						|
                    var name = attr.name; | 
						|
                    var value = attr.value; | 
						|
                    var isFillCurrentColor = preserveCurrentColor && name == 'fill' && value == 'currentColor'; | 
						|
                    var isStrokeCurrentColor = preserveCurrentColor && name == 'stroke' && value == 'currentColor'; | 
						|
 | 
						|
                    if (!(isFillCurrentColor || isStrokeCurrentColor)) { | 
						|
                        // matches attribute name | 
						|
                        if (pattern[1].test(name)) { | 
						|
 | 
						|
                            // matches attribute value | 
						|
                            if (pattern[2].test(attr.value)) { | 
						|
                                item.removeAttr(name); | 
						|
                            } | 
						|
                        } | 
						|
                    } | 
						|
 | 
						|
                }); | 
						|
 | 
						|
            } | 
						|
 | 
						|
        }); | 
						|
 | 
						|
    } | 
						|
 | 
						|
};
 | 
						|
 |