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