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