PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` '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.type === 'element') { 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.name)) { // loop attributes for (const [name, value] of Object.entries(item.attributes)) { 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(value)) { delete item.attributes[name]; } } } } } }); } };