1
0
mirror of https://github.com/svg/svgo.git synced 2025-07-31 07:44:22 +03:00

Simplified mergePaths plugin even more

This commit is contained in:
GreLI
2015-02-28 11:56:53 +03:00
parent 62cfb364c4
commit 15ded2773e

View File

@ -4,6 +4,9 @@ exports.type = 'perItem';
exports.active = true; exports.active = true;
var path2js = require('./_path.js').path2js,
relative2absolute = require('./_path.js').relative2absolute;
/** /**
* Merge multiple Paths into one. * Merge multiple Paths into one.
* *
@ -14,59 +17,47 @@ exports.active = true;
*/ */
exports.fn = function(item) { exports.fn = function(item) {
if (item.isElem() && !item.isEmpty()) { if (!item.isElem() || item.isEmpty()) return;
var prevContentItem, var prevContentItem,
prevContentItemKeys = null; prevContentItemKeys = null;
item.content = item.content.filter(function(contentItem) { item.content = item.content.filter(function(contentItem) {
// merge only <path d="...z" /> if (prevContentItem &&
if (prevContentItem && prevContentItem.isElem('path') &&
prevContentItem.isElem('path') && prevContentItem.hasAttr('d') &&
prevContentItem.hasAttr('d') && contentItem.isElem('path') &&
contentItem.isElem('path') && contentItem.hasAttr('d')
contentItem.hasAttr('d') ) {
) {
if (prevContentItemKeys == null) { if (prevContentItemKeys == null) {
prevContentItemKeys = Object.keys(prevContentItem.attrs); prevContentItemKeys = Object.keys(prevContentItem.attrs);
} }
var contentItemKeys = Object.keys(contentItem.attrs); var contentItemAttrs = Object.keys(contentItem.attrs),
if (contentItemKeys.length > 1 || prevContentItemKeys.length > 1) { equalData = prevContentItemKeys.length == contentItemAttrs.length &&
if (contentItemKeys.length != prevContentItemKeys.length) { contentItemAttrs.every(function(key) {
prevContentItem = contentItem; return key == 'd' ||
prevContentItemKeys = null; prevContentItem.hasAttr(key) &&
return true; prevContentItem.attr(key).value == contentItem.attr(key).value;
} });
var equalData = contentItemKeys.every(function(key) { if (equalData) {
return key == 'd' || var prevPathJS = prevContentItem.pathJS;
prevContentItem.hasAttr(key) && if (prevContentItem.pathJS) {
prevContentItem.attr(key).value == contentItem.attr(key).value; prevPathJS.push.apply(prevPathJS, contentItem.pathJS);
});
if (!equalData) {
prevContentItem = contentItem;
prevContentItemKeys = null;
return true;
}
} }
prevContentItem.attr('d').value += contentItem.attr('d').value.replace(/m/i, 'M'); prevContentItem.attr('d').value += contentItem.attr('d').value.replace(/m/i, 'M');
var pathJS = prevContentItem.pathJS;
if (pathJS) {
pathJS.push.apply(pathJS, contentItem.pathJS);
}
return false; return false;
} }
}
prevContentItem = contentItem; prevContentItem = contentItem;
prevContentItemKeys = null; prevContentItemKeys = null;
return true; return true;
}); });
}
}; };