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:
@ -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;
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user