| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 'use strict';exports.type = 'perItem';exports.active = true;exports.description = 'removes useless stroke and fill attributes';exports.params = {    stroke: true,    fill: true,    removeNone: false,    hasStyleOrScript: false};var shape = require('./_collections').elemsGroups.shape,    regStrokeProps = /^stroke/,    regFillProps = /^fill-/,    styleOrScript = ['style', 'script'];/** * Remove useless stroke and fill attrs. * * @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.isElem(styleOrScript)) {        params.hasStyleOrScript = true;    }    if (!params.hasStyleOrScript && item.isElem(shape) && !item.computedAttr('id')) {        var stroke = params.stroke && item.computedAttr('stroke'),            fill = params.fill && !item.computedAttr('fill', 'none');        // remove stroke*        if (            params.stroke &&            (!stroke ||                stroke == 'none' ||                item.computedAttr('stroke-opacity', '0') ||                item.computedAttr('stroke-width', '0')            )        ) {            var parentStroke = item.parentNode.computedAttr('stroke'),                declineStroke = parentStroke && parentStroke != 'none';            item.eachAttr(function(attr) {                if (regStrokeProps.test(attr.name)) {                    item.removeAttr(attr.name);                }            });            if (declineStroke) item.addAttr({                name: 'stroke',                value: 'none',                prefix: '',                local: 'stroke'            });        }        // remove fill*        if (            params.fill &&            (!fill || item.computedAttr('fill-opacity', '0'))        ) {            item.eachAttr(function(attr) {                if (regFillProps.test(attr.name)) {                    item.removeAttr(attr.name);                }            });            if (fill) {                if (item.hasAttr('fill'))                    item.attr('fill').value = 'none';                else                    item.addAttr({                        name: 'fill',                        value: 'none',                        prefix: '',                        local: 'fill'                    });            }        }        if (params.removeNone &&             (!stroke || item.hasAttr('stroke') && item.attr('stroke').value=='none') &&            (!fill || item.hasAttr('fill') && item.attr('fill').value=='none')) {            return false;        }    }};
 |