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