UNPKG

2.06 kBJavaScriptView Raw
1'use strict';
2
3exports.type = 'perItem';
4
5exports.active = true;
6
7exports.description = 'merges multiple paths in one if possible';
8
9exports.params = {
10 collapseRepeated: true,
11 leadingZero: true,
12 negativeExtraSpace: true
13};
14
15var path2js = require('./_path.js').path2js,
16 js2path = require('./_path.js').js2path,
17 intersects = require('./_path.js').intersects;
18
19/**
20 * Merge multiple Paths into one.
21 *
22 * @param {Object} item current iteration item
23 * @return {Boolean} if false, item will be filtered out
24 *
25 * @author Kir Belevich, Lev Solntsev
26 */
27exports.fn = function(item, params) {
28
29 if (!item.isElem() || item.isEmpty()) return;
30
31 var prevContentItem = null,
32 prevContentItemKeys = null;
33
34 item.content = item.content.filter(function(contentItem) {
35
36 if (prevContentItem &&
37 prevContentItem.isElem('path') &&
38 prevContentItem.isEmpty() &&
39 prevContentItem.hasAttr('d') &&
40 contentItem.isElem('path') &&
41 contentItem.isEmpty() &&
42 contentItem.hasAttr('d')
43 ) {
44
45 if (!prevContentItemKeys) {
46 prevContentItemKeys = Object.keys(prevContentItem.attrs);
47 }
48
49 var contentItemAttrs = Object.keys(contentItem.attrs),
50 equalData = prevContentItemKeys.length == contentItemAttrs.length &&
51 contentItemAttrs.every(function(key) {
52 return key == 'd' ||
53 prevContentItem.hasAttr(key) &&
54 prevContentItem.attr(key).value == contentItem.attr(key).value;
55 }),
56 prevPathJS = path2js(prevContentItem),
57 curPathJS = path2js(contentItem);
58
59 if (equalData && !intersects(prevPathJS, curPathJS)) {
60 js2path(prevContentItem, prevPathJS.concat(curPathJS), params);
61 return false;
62 }
63 }
64
65 prevContentItem = contentItem;
66 prevContentItemKeys = null;
67 return true;
68
69 });
70
71};