-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmergeScaleTransform.index.js
27 lines (25 loc) · 1.07 KB
/
mergeScaleTransform.index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { each, go, mapL, rangeL, reduce } from "fxjs/es";
import { $$createSVGTransformMatrix } from "../createSVGTransformMatrix/createSVGTransformMatrix.index.js";
import { $$getBaseTransformList } from "../getBaseTransformList/getBaseTransformList.index.js";
import { $$getSVG } from "../getSetSVG/getSetSVG.index.js";
import { $$isValidFxScaleSVGTransformList } from "../isValidFxScaleSVGTransformList/isValidFxScaleSVGTransformList.index.js";
export const $$mergeScaleTransform = ({ index = 1 } = {}) => (
$el,
$svg = $$getSVG()
) => {
const transform_list = $$getBaseTransformList($el);
if (!$$isValidFxScaleSVGTransformList({ index })(transform_list)) {
return $el;
}
const merged_transform = go(
rangeL(3),
mapL((i) => index - 1 + i),
mapL((i) => transform_list.getItem(i)),
mapL(({ matrix }) => matrix),
reduce((m1, m2) => m1.multiply(m2)),
(matrix) => $$createSVGTransformMatrix({ matrix })($svg)
);
each(() => transform_list.removeItem(index - 1), rangeL(3));
transform_list.insertItemBefore(merged_transform, index - 1);
return $el;
};