svg-path-simplify 0.3.6 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,236 +0,0 @@
1
- import { getMatrix, parseCSSTransform, parseTransform } from './svg-styles-getTransforms';
2
- import { attLookup } from './svg-styles-to-attributes-const';
3
-
4
- /*
5
- export function parseStyleProperty(propName='', value=''){
6
-
7
- let propObj = {}
8
- //console.log(propName, value);
9
-
10
- // check for numbers or units
11
- if(propName==='transform'){
12
-
13
- //let trans = parseCSSTransform()
14
-
15
- }
16
- else if(propName==='d'){
17
- propObj = {name:propName, value}
18
- }
19
-
20
- return propObj
21
-
22
- }
23
- */
24
-
25
-
26
- export function getElementProps(el, {
27
- removeNameSpaced = true,
28
- decimals = -1
29
- } = {}) {
30
-
31
- let nodeName = el.nodeName.toLowerCase();
32
- let attProps = getElAttributes(el)
33
- let cssProps = getElStyleProps(el)
34
-
35
-
36
- // normalize transform attributes
37
- if (attProps['transform']) {
38
-
39
- let transAtt = attProps['transform']
40
- let transArr = transAtt.match(/[a-z]+\([^)]*\)/gi);
41
-
42
-
43
- //console.log(`attProps['transform']`, transAtt);
44
-
45
-
46
- let transforms = [];
47
- transArr.forEach(trans => {
48
- let [prop, vals] = trans.split(/\(|\)/).filter(Boolean)
49
- //let prop = vals[0];
50
- vals = vals.split(/,| /).filter(Boolean).map(Number)
51
- console.log('trans', prop, vals);
52
-
53
- let cssTrans = '';
54
-
55
- // rotate has origin
56
- if (prop === 'rotate' && vals.length === 3) {
57
-
58
- cssTrans = `
59
- translate(${vals[1]}px, ${vals[2]}px)
60
- rotate(${vals[0]}deg)
61
- translate(${-vals[1]}px, ${-vals[2]}px)
62
- `
63
- /*
64
- transforms.push({ prop: 'translate', values: [vals[1], vals[2]] })
65
- transforms.push({ prop: 'rotate', values: [vals[0]] })
66
- transforms.push({ prop: 'translate', values: [-vals[1], -vals[2]] })
67
- */
68
- } else {
69
- cssTrans = `
70
- ${prop}(${vals[1]}px, ${vals[2]}px)
71
- rotate(${vals[0]}deg)
72
- translate(${-vals[1]}px, ${-vals[2]}px)
73
- `
74
-
75
-
76
- //transforms.push({ prop, values: [vals[0]] })
77
- }
78
- })
79
-
80
- console.log('transforms', transforms);
81
-
82
-
83
-
84
-
85
- }
86
-
87
- // merge properties
88
- let props = {
89
- ...attProps,
90
- ...cssProps
91
- }
92
-
93
-
94
- }
95
-
96
-
97
- export function svgStylesToAttributes(el, {
98
- removeNameSpaced = true,
99
- decimals = -1
100
- } = {}) {
101
-
102
- let nodeName = el.nodeName.toLowerCase();
103
- let attProps = getElAttributes(el)
104
- let cssProps = getElStyleProps(el)
105
-
106
- // normalize transform attributes
107
- /*
108
- if (attProps['transform']) {
109
- console.log(`attProps['transform']`, attProps['transform']);
110
- }
111
- */
112
-
113
- // merge properties
114
- let props = {
115
- ...attProps,
116
- ...cssProps
117
- }
118
-
119
- // filter out obsolete properties
120
- let propsFiltered = {}
121
-
122
- // parse CSS transforms
123
- let cssTrans = cssProps['transform']
124
-
125
- if (cssTrans) {
126
- let transStr = `${cssTrans}`
127
- let transformObj = parseCSSTransform(transStr)
128
- let matrix = getMatrix(transformObj)
129
-
130
- // apply as SVG matrix transform
131
- props['transform'] = `matrix(${Object.values(matrix).join(',')})`
132
- }
133
-
134
-
135
- // can't be replaced with attributes
136
- let cssOnlyProps = ['inline-size']
137
- let styleProps = [];
138
-
139
- for (let prop in props) {
140
-
141
- let value = props[prop];
142
-
143
- // CSS variable
144
- if (value && prop.startsWith('--') || cssOnlyProps.includes(prop) ||
145
- (!removeNameSpaced && prop.startsWith('-'))) {
146
- styleProps.push(`${prop}:${value}`)
147
- continue
148
- }
149
-
150
- // check if property is valid
151
- if (value && attLookup.atts[prop] &&
152
- (attLookup.atts[prop] === '*' ||
153
- attLookup.atts[prop].includes(nodeName) ||
154
- !removeNameSpaced && (prop.includes(':'))
155
- )
156
- ) {
157
- propsFiltered[prop] = value
158
- }
159
-
160
- // remove property
161
- el.removeAttribute(prop)
162
-
163
- }
164
-
165
- // apply filtered attributes
166
- for (let prop in propsFiltered) {
167
- let value = propsFiltered[prop]
168
- el.setAttribute(prop, value)
169
- }
170
-
171
- if (styleProps.length) {
172
- el.setAttribute('style', styleProps.join(';'));
173
- }
174
-
175
- //console.log('propsFiltered', propsFiltered);
176
-
177
- return propsFiltered;
178
-
179
- }
180
-
181
-
182
- function parseInlineStyle(styleAtt = '') {
183
-
184
- let props = {}
185
- if (!styleAtt) return props;
186
-
187
- let styleArr = styleAtt.split(';').filter(Boolean).map(prop => prop.trim());
188
- let l = styleArr.length
189
- if (!l) return props;
190
-
191
- for (let i = 0; l && i < l; i++) {
192
- let style = styleArr[i]
193
- let [prop, value] = style.split(':').filter(Boolean)
194
- props[prop] = value;
195
- //props.push(`${prop}:${value}`)
196
- }
197
-
198
- return props
199
- }
200
-
201
- export function getElStyleProps(el) {
202
- let styleAtt = el.getAttribute('style')
203
- let props = styleAtt ? parseInlineStyle(styleAtt) : {}
204
- return props
205
- }
206
-
207
- export function getElAttributes(el) {
208
- let props = {}
209
- let atts = [...el.attributes].map((att) => att.name);
210
- let l = atts.length;
211
- if (!l) return props;
212
-
213
- for (let i = 0; i < l; i++) {
214
- let att = atts[i];
215
- let value = el.getAttribute(att);
216
- props[att] = value
217
- }
218
-
219
- return props;
220
- }
221
-
222
-
223
- /*
224
- function roundValue(value = '', decimals = -1) {
225
- if (decimals < 0) return value;
226
- value = value.replace(/["]/g, '').trim()
227
- let valueNum = parseFloat(value);
228
- let valueHasNumber = !isNaN(valueNum);
229
- if (!valueHasNumber) return value;
230
-
231
- let unit = valueHasNumber ? getUnit(value) : '';
232
- if (valueHasNumber) value = `${valueNum.toFixed(decimals)}${unit}`;
233
- //console.log('rounded', value)
234
- return value;
235
- }
236
- */