aboutsummaryrefslogtreecommitdiff
path: root/node_modules/svgo/plugins/mergePaths.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/svgo/plugins/mergePaths.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/svgo/plugins/mergePaths.js')
-rw-r--r--node_modules/svgo/plugins/mergePaths.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/node_modules/svgo/plugins/mergePaths.js b/node_modules/svgo/plugins/mergePaths.js
new file mode 100644
index 00000000..63cf56e8
--- /dev/null
+++ b/node_modules/svgo/plugins/mergePaths.js
@@ -0,0 +1,71 @@
+'use strict';
+
+exports.type = 'perItem';
+
+exports.active = true;
+
+exports.description = 'merges multiple paths in one if possible';
+
+exports.params = {
+ collapseRepeated: true,
+ leadingZero: true,
+ negativeExtraSpace: true
+};
+
+var path2js = require('./_path.js').path2js,
+ js2path = require('./_path.js').js2path,
+ intersects = require('./_path.js').intersects;
+
+/**
+ * Merge multiple Paths into one.
+ *
+ * @param {Object} item current iteration item
+ * @return {Boolean} if false, item will be filtered out
+ *
+ * @author Kir Belevich, Lev Solntsev
+ */
+exports.fn = function(item, params) {
+
+ if (!item.isElem() || item.isEmpty()) return;
+
+ var prevContentItem = null,
+ prevContentItemKeys = null;
+
+ item.content = item.content.filter(function(contentItem) {
+
+ if (prevContentItem &&
+ prevContentItem.isElem('path') &&
+ prevContentItem.isEmpty() &&
+ prevContentItem.hasAttr('d') &&
+ contentItem.isElem('path') &&
+ contentItem.isEmpty() &&
+ contentItem.hasAttr('d')
+ ) {
+
+ if (!prevContentItemKeys) {
+ prevContentItemKeys = Object.keys(prevContentItem.attrs);
+ }
+
+ var contentItemAttrs = Object.keys(contentItem.attrs),
+ equalData = prevContentItemKeys.length == contentItemAttrs.length &&
+ contentItemAttrs.every(function(key) {
+ return key == 'd' ||
+ prevContentItem.hasAttr(key) &&
+ prevContentItem.attr(key).value == contentItem.attr(key).value;
+ }),
+ prevPathJS = path2js(prevContentItem),
+ curPathJS = path2js(contentItem);
+
+ if (equalData && !intersects(prevPathJS, curPathJS)) {
+ js2path(prevContentItem, prevPathJS.concat(curPathJS), params);
+ return false;
+ }
+ }
+
+ prevContentItem = contentItem;
+ prevContentItemKeys = null;
+ return true;
+
+ });
+
+};