@raruto/leaflet-elevation 2.0.1 → 2.0.4
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.
- package/README.md +7 -4
- package/dist/leaflet-elevation.css +114 -137
- package/dist/leaflet-elevation.js +175 -232
- package/dist/leaflet-elevation.js.map +1 -1
- package/dist/leaflet-elevation.min.css +1 -1
- package/dist/leaflet-elevation.min.js +1 -1
- package/dist/leaflet-elevation.min.js.map +1 -1
- package/images/elevation-steelblue.svg +1 -1
- package/libs/fullpage.css +13 -0
- package/libs/leaflet-distance-marker.js +97 -92
- package/libs/leaflet-distance-marker.min.js +1 -1
- package/libs/leaflet-gpxgroup.js +1 -1
- package/libs/leaflet-gpxgroup.min.js +1 -1
- package/package.json +1 -1
- package/src/components/chart.js +82 -54
- package/src/components/d3.js +74 -17
- package/src/control.js +159 -218
- package/src/handlers/altitude.js +5 -2
- package/src/handlers/heart.js +2 -2
- package/src/index.css +114 -137
- package/src/options.js +9 -9
- package/src/utils.js +5 -5
package/src/index.css
CHANGED
|
@@ -11,56 +11,44 @@
|
|
|
11
11
|
/* prevent overlapping the .elevation-detached chart */
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
.elevation-
|
|
15
|
-
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
|
|
16
|
-
height: auto;
|
|
17
|
-
width: 100%;
|
|
18
|
-
position: relative;
|
|
19
|
-
z-index: 0;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.elevation-detached .elevation {
|
|
23
|
-
width: 100%;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.elevation-detached .background {
|
|
27
|
-
max-width: 100%;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.elevation-control.elevation .background {
|
|
14
|
+
.elevation-control .background {
|
|
31
15
|
background-color: var(--ele-bg, rgba(70, 130, 180, 0.2));
|
|
32
16
|
border-radius: 5px;
|
|
33
17
|
overflow: visible;
|
|
34
18
|
display: block;
|
|
35
19
|
touch-action: none;
|
|
36
20
|
user-select: none;
|
|
21
|
+
max-width: 100%;
|
|
37
22
|
}
|
|
38
23
|
|
|
39
|
-
.elevation-control
|
|
40
|
-
.elevation-control
|
|
24
|
+
.elevation-control .grid,
|
|
25
|
+
.elevation-control .area > foreignObject,
|
|
26
|
+
.elevation-control .axis,
|
|
27
|
+
.elevation-control .tooltip,
|
|
28
|
+
.height-focus.line {
|
|
41
29
|
pointer-events: none;
|
|
42
30
|
}
|
|
43
31
|
|
|
44
|
-
.elevation-control
|
|
45
|
-
.elevation-control
|
|
32
|
+
.elevation-control .axis line,
|
|
33
|
+
.elevation-control .axis path {
|
|
46
34
|
stroke: var(--ele-axis, #2D1130);
|
|
47
35
|
stroke-width: 1;
|
|
48
36
|
fill: none;
|
|
49
37
|
}
|
|
50
38
|
|
|
51
|
-
.elevation-control
|
|
39
|
+
.elevation-control .grid .tick line {
|
|
52
40
|
stroke: var(--ele-grid, #EEE);
|
|
53
41
|
stroke-width: 1px;
|
|
54
42
|
shape-rendering: crispEdges;
|
|
55
43
|
}
|
|
56
44
|
|
|
57
|
-
.elevation-control
|
|
45
|
+
.elevation-control .grid path {
|
|
58
46
|
stroke-width: 0;
|
|
59
|
-
pointer-events: none;
|
|
60
47
|
}
|
|
61
48
|
|
|
62
|
-
.elevation-control
|
|
63
|
-
.elevation-control
|
|
49
|
+
.elevation-control .axis text,
|
|
50
|
+
.elevation-control .legend text,
|
|
51
|
+
.elevation-control .point text {
|
|
64
52
|
fill: #000;
|
|
65
53
|
font-weight: 700;
|
|
66
54
|
paint-order: stroke fill;
|
|
@@ -68,181 +56,120 @@
|
|
|
68
56
|
stroke-width: 2px
|
|
69
57
|
}
|
|
70
58
|
|
|
71
|
-
.elevation-control
|
|
59
|
+
.elevation-control .y.axis text {
|
|
72
60
|
text-anchor: end;
|
|
73
61
|
}
|
|
74
62
|
|
|
75
|
-
.elevation-control
|
|
63
|
+
.elevation-control .area {
|
|
76
64
|
fill: var(--ele-area, #4682B4);
|
|
77
65
|
stroke: var(--ele-stroke, #000);
|
|
78
66
|
stroke-width: 1.2;
|
|
79
67
|
paint-order: stroke fill;
|
|
80
68
|
}
|
|
81
69
|
|
|
82
|
-
.elevation-
|
|
83
|
-
fill-opacity: var(--ele-alpha, 0.8);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.elevation-control.elevation .horizontal-drag-line {
|
|
87
|
-
stroke: transparent;
|
|
70
|
+
.elevation-control .horizontal-drag-line {
|
|
88
71
|
cursor: row-resize;
|
|
89
|
-
stroke
|
|
72
|
+
stroke: transparent;
|
|
90
73
|
stroke-dasharray: 5;
|
|
74
|
+
stroke-width: 1.1;
|
|
91
75
|
}
|
|
92
76
|
|
|
93
|
-
.elevation-control
|
|
77
|
+
.elevation-control .active .horizontal-drag-line {
|
|
94
78
|
stroke: #000;
|
|
95
79
|
}
|
|
96
80
|
|
|
97
|
-
.elevation-control
|
|
98
|
-
font-weight: 700;
|
|
81
|
+
.elevation-control .horizontal-drag-label {
|
|
99
82
|
fill: #000;
|
|
83
|
+
font-weight: 700;
|
|
100
84
|
paint-order: stroke;
|
|
101
85
|
stroke: #FFF;
|
|
102
86
|
stroke-width: 2px;
|
|
103
|
-
pointer-events: none;
|
|
104
87
|
}
|
|
105
88
|
|
|
106
|
-
.elevation-control
|
|
107
|
-
cursor: row-resize;
|
|
89
|
+
.elevation-control .ruler {
|
|
108
90
|
color: #000;
|
|
91
|
+
cursor: row-resize;
|
|
109
92
|
}
|
|
110
93
|
|
|
111
|
-
.elevation-control
|
|
94
|
+
.elevation-control .mouse-focus-line {
|
|
112
95
|
stroke: #000;
|
|
113
96
|
stroke-width: 1;
|
|
114
|
-
pointer-events: none;
|
|
115
97
|
}
|
|
116
98
|
|
|
117
|
-
.elevation-control
|
|
99
|
+
.elevation-control .mouse-focus-label-rect {
|
|
118
100
|
fill: #000;
|
|
119
101
|
fill-opacity: 0.75;
|
|
120
|
-
pointer-events: none;
|
|
121
102
|
stroke-width: 1;
|
|
122
103
|
stroke: #444;
|
|
123
104
|
}
|
|
124
105
|
|
|
125
|
-
.elevation-control
|
|
106
|
+
.elevation-control .mouse-focus-label-text {
|
|
126
107
|
fill: #FFF;
|
|
127
|
-
pointer-events: none;
|
|
128
108
|
font-size: 10px;
|
|
129
109
|
}
|
|
130
110
|
|
|
131
|
-
.elevation-control
|
|
111
|
+
.elevation-control .brush .overlay {
|
|
132
112
|
cursor: unset;
|
|
133
113
|
}
|
|
134
114
|
|
|
135
|
-
.elevation-control
|
|
115
|
+
.elevation-control .brush .selection {
|
|
136
116
|
fill: var(--ele-brush, rgba(23, 74, 117, 0.4));
|
|
137
117
|
stroke: none;
|
|
138
118
|
fill-opacity: unset;
|
|
139
119
|
}
|
|
140
120
|
|
|
141
|
-
.elevation-control.elevation .elevation-toggle {
|
|
142
|
-
cursor: pointer;
|
|
143
|
-
box-shadow: 0 1px 7px rgba(0, 0, 0, 0.4);
|
|
144
|
-
border-radius: 5px;
|
|
145
|
-
width: 36px;
|
|
146
|
-
height: 36px;
|
|
147
|
-
background-color: #F8F8F9;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
121
|
.elevation-summary {
|
|
151
122
|
font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;
|
|
152
123
|
font-size: 12px;
|
|
153
|
-
margin: 0 auto;
|
|
124
|
+
margin: var(--ele-sum-margin, 0 auto);
|
|
125
|
+
text-shadow: var(--ele-sum-shadow, 1px 0 0 #FFF, -1px 0 0 #FFF, 0 1px 0 #FFF, 0 -1px 0 #FFF, 1px 1px #FFF, -1px -1px 0 #FFF, 1px -1px 0 #FFF, -1px 1px 0 #FFF);
|
|
154
126
|
}
|
|
155
127
|
|
|
156
|
-
.
|
|
157
|
-
|
|
158
|
-
1.5px 0 0 #FFF,
|
|
159
|
-
-1.5px 0 0 #FFF,
|
|
160
|
-
0 1.5px 0 #FFF,
|
|
161
|
-
0 -1.5px 0 #FFF,
|
|
162
|
-
1px 1px #FFF,
|
|
163
|
-
-1px -1px 0 #FFF,
|
|
164
|
-
1px -1px 0 #FFF,
|
|
165
|
-
-1px 1px 0 #FFF;
|
|
128
|
+
.elevation-summary>span:not(:last-child):after {
|
|
129
|
+
content: var(--ele-sum-sep, '');
|
|
166
130
|
}
|
|
167
131
|
|
|
168
|
-
.
|
|
169
|
-
margin: 0 45px;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.elevation-summary.multiline-summary {
|
|
173
|
-
margin-right: 30px;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.elevation-detached .elevation-summary.multiline-summary {
|
|
177
|
-
margin-bottom: 12px;
|
|
178
|
-
margin-top: 12px;
|
|
179
|
-
line-height: 2;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.elevation-summary.inline-summary>span:not(:last-child):after {
|
|
183
|
-
content: "\0020\2014\0020";
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
.elevation-summary.multiline-summary>span {
|
|
132
|
+
.multiline-summary>span {
|
|
187
133
|
display: block;
|
|
188
134
|
}
|
|
189
135
|
|
|
190
|
-
.
|
|
136
|
+
.multiline-summary .download {
|
|
191
137
|
float: right;
|
|
192
|
-
margin-top: -
|
|
138
|
+
margin-top: -3em;
|
|
139
|
+
margin-right: 2em;
|
|
193
140
|
font-weight: bold;
|
|
194
141
|
font-size: 1.2em;
|
|
195
142
|
}
|
|
196
143
|
|
|
197
|
-
.elevation-detached .elevation-summary.multiline-summary .download {
|
|
198
|
-
margin-top: -3.5em;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
144
|
.elevation-summary .summaryvalue {
|
|
202
145
|
font-weight: bold;
|
|
203
146
|
}
|
|
204
147
|
|
|
205
|
-
.elevation-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
.elevation-control.elevation-collapsed .elevation-toggle {
|
|
211
|
-
display: block;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.elevation-control.elevation .elevation-toggle-icon {
|
|
215
|
-
background: var(--ele-icon, url(../images/elevation-lime.svg)) no-repeat center center;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.elevation-control.elevation.elevation-expanded .elevation-toggle-icon.close-button {
|
|
219
|
-
background: transparent;
|
|
220
|
-
position: absolute;
|
|
148
|
+
.elevation-toggle-icon {
|
|
149
|
+
background: var(--ele-toggle-bg, var(--ele-icon, url(../images/elevation-lime.svg)) no-repeat center center);
|
|
150
|
+
background-color: #fff;
|
|
221
151
|
right: 5px;
|
|
222
152
|
top: 5px;
|
|
223
|
-
height:
|
|
224
|
-
width:
|
|
153
|
+
height: var(--ele-toggle-size, 36px);
|
|
154
|
+
width: var(--ele-toggle-size, 36px);
|
|
155
|
+
cursor: pointer;
|
|
156
|
+
box-shadow: 0 1px 7px rgba(0, 0, 0, 0.4);
|
|
157
|
+
border-radius: 5px;
|
|
158
|
+
display: inline-block;
|
|
159
|
+
position: var(--ele-toggle-pos, relative);
|
|
225
160
|
}
|
|
226
161
|
|
|
227
|
-
.elevation-
|
|
162
|
+
.elevation-toggle-icon:before {
|
|
228
163
|
content: '\2716';
|
|
229
|
-
display:
|
|
164
|
+
display: var(--ele-close-btn, none);
|
|
230
165
|
color: #000;
|
|
231
|
-
|
|
232
|
-
left: 0;
|
|
233
|
-
right: 0;
|
|
234
|
-
top: 0;
|
|
235
|
-
bottom: 0;
|
|
166
|
+
width: 100%;
|
|
236
167
|
line-height: 20px;
|
|
237
168
|
text-align: center;
|
|
238
169
|
font-weight: bold;
|
|
239
170
|
font-size: 15px;
|
|
240
171
|
}
|
|
241
172
|
|
|
242
|
-
.elevation-control.elevation g.area > foreignObject {
|
|
243
|
-
pointer-events: none;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
173
|
.leaflet-elevation-pane .height-focus,
|
|
247
174
|
.leaflet-overlay-pane .height-focus {
|
|
248
175
|
stroke: #000;
|
|
@@ -251,7 +178,6 @@
|
|
|
251
178
|
|
|
252
179
|
.leaflet-elevation-pane .height-focus.line,
|
|
253
180
|
.leaflet-overlay-pane .height-focus.line {
|
|
254
|
-
pointer-events: none;
|
|
255
181
|
stroke-width: 2;
|
|
256
182
|
}
|
|
257
183
|
|
|
@@ -271,22 +197,73 @@
|
|
|
271
197
|
width: 100%;
|
|
272
198
|
height: 100%;
|
|
273
199
|
display: inline-block;
|
|
200
|
+
background: var(--ele-marker) no-repeat center center / contain;
|
|
274
201
|
}
|
|
275
202
|
|
|
276
|
-
.elevation-
|
|
277
|
-
|
|
203
|
+
.elevation-polyline {
|
|
204
|
+
stroke: var(--ele-poly, var(--ele-area, #000));
|
|
205
|
+
filter: drop-shadow(1px 1px 0 #FFF) drop-shadow(-1px -1px 0 #FFF) drop-shadow(1px -1px 0 #FFF) drop-shadow(-1px 1px 0 #FFF);
|
|
278
206
|
}
|
|
279
207
|
|
|
280
|
-
|
|
281
|
-
|
|
208
|
+
/* CHART STATES /////////////////////////////////////////////////// */
|
|
209
|
+
|
|
210
|
+
.elevation-detached {
|
|
211
|
+
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
|
|
212
|
+
height: auto;
|
|
213
|
+
width: 100%;
|
|
214
|
+
position: relative;
|
|
215
|
+
z-index: 0;
|
|
282
216
|
}
|
|
283
217
|
|
|
284
|
-
.elevation-
|
|
285
|
-
|
|
286
|
-
|
|
218
|
+
.elevation-detached .area {
|
|
219
|
+
fill-opacity: var(--ele-alpha, 0.8);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.elevation-detached.elevation-collapsed .elevation-summary {
|
|
223
|
+
display: block;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.elevation-detached.elevation-collapsed .elevation-toggle-icon {
|
|
227
|
+
top: 5px;
|
|
228
|
+
right: 9px;
|
|
229
|
+
bottom: 5px;
|
|
230
|
+
margin: auto;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.elevation-control.elevation-collapsed > * {
|
|
234
|
+
display: none;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.elevation-control.elevation-collapsed > .elevation-toggle-icon {
|
|
238
|
+
display: inline-block;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.elevation-detached {
|
|
242
|
+
--ele-sum-margin: 12px 35px;
|
|
243
|
+
--ele-sum-shadow: none;
|
|
244
|
+
--ele-toggle-pos: absolute;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.elevation-expanded {
|
|
248
|
+
--ele-close-btn: inline-block;
|
|
249
|
+
--ele-toggle-bg: transparent;
|
|
250
|
+
--ele-toggle-pos: absolute;
|
|
251
|
+
--ele-toggle-size: 20px;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.inline-summary {
|
|
255
|
+
--ele-sum-sep: "\0020\2014\0020";
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.elevation-waypoint-icon {
|
|
259
|
+
--ele-marker: url(../images/elevation-pushpin.svg);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.elevation-position-icon {
|
|
263
|
+
--ele-marker: url(../images/elevation-position.svg);
|
|
287
264
|
}
|
|
288
265
|
|
|
289
|
-
/* LIME THEME
|
|
266
|
+
/* LIME THEME ///////////////////////////////////////////////////// */
|
|
290
267
|
.lime-theme {
|
|
291
268
|
--ele-bg: rgba(156, 194, 34, 0.2);
|
|
292
269
|
--ele-axis: #566B13;
|
|
@@ -305,7 +282,7 @@
|
|
|
305
282
|
--ele-icon: url(../images/elevation-steelblue.svg);
|
|
306
283
|
}
|
|
307
284
|
|
|
308
|
-
/* PURPLE THEME
|
|
285
|
+
/* PURPLE THEME /////////////////////////////////////////////////// */
|
|
309
286
|
.purple-theme {
|
|
310
287
|
--ele-bg: rgba(115, 44, 123, 0.2);
|
|
311
288
|
--ele-area: #732C7B;
|
|
@@ -313,17 +290,17 @@
|
|
|
313
290
|
--ele-icon: url(../images/elevation-purple.svg);
|
|
314
291
|
}
|
|
315
292
|
|
|
316
|
-
/* YELLOW THEME
|
|
293
|
+
/* YELLOW THEME /////////////////////////////////////////////////// */
|
|
317
294
|
.yellow-theme {
|
|
318
295
|
--ele-area: #FF0;
|
|
319
296
|
}
|
|
320
297
|
|
|
321
|
-
/* RED THEME
|
|
298
|
+
/* RED THEME ////////////////////////////////////////////////////// */
|
|
322
299
|
.red-theme {
|
|
323
300
|
--ele-area: #F00;
|
|
324
301
|
}
|
|
325
302
|
|
|
326
|
-
/* MAGENTA THEME
|
|
303
|
+
/* MAGENTA THEME ////////////////////////////////////////////////// */
|
|
327
304
|
.magenta-theme {
|
|
328
305
|
--ele-bg: rgba(255, 255, 255, 0.47);
|
|
329
306
|
--ele-area: #FF005E;
|
|
@@ -337,7 +314,7 @@
|
|
|
337
314
|
--ele-circle: #fff;
|
|
338
315
|
}
|
|
339
316
|
|
|
340
|
-
.elevation-detached
|
|
317
|
+
.elevation-detached.lightblue-theme .area {
|
|
341
318
|
stroke: #3366CC;
|
|
342
319
|
}
|
|
343
320
|
|
package/src/options.js
CHANGED
|
@@ -2,10 +2,11 @@ import * as _ from './utils';
|
|
|
2
2
|
|
|
3
3
|
export var Options = {
|
|
4
4
|
autofitBounds: true,
|
|
5
|
-
autohide:
|
|
5
|
+
autohide: false,
|
|
6
6
|
autohideMarker: true,
|
|
7
7
|
almostover: true,
|
|
8
8
|
altitude: true,
|
|
9
|
+
closeBtn: true,
|
|
9
10
|
collapsed: false,
|
|
10
11
|
detached: true,
|
|
11
12
|
distance: true,
|
|
@@ -66,7 +67,13 @@ export var Options = {
|
|
|
66
67
|
zFollow: false,
|
|
67
68
|
zooming: !L.Browser.Mobile,
|
|
68
69
|
|
|
69
|
-
// Quite uncommon and undocumented options
|
|
70
|
+
// Quite uncommon and undocumented options
|
|
71
|
+
margins: { top: 30, right: 30, bottom: 30, left: 40 },
|
|
72
|
+
height: (screen.height * 0.3) || 200,
|
|
73
|
+
width: (screen.width * 0.6) || 600,
|
|
74
|
+
xTicks: undefined,
|
|
75
|
+
yTicks: undefined,
|
|
76
|
+
|
|
70
77
|
decimalsX: 2,
|
|
71
78
|
decimalsY: 0,
|
|
72
79
|
forceAxisBounds: false,
|
|
@@ -74,11 +81,4 @@ export var Options = {
|
|
|
74
81
|
skipNullZCoords: false,
|
|
75
82
|
yAxisMax: undefined,
|
|
76
83
|
yAxisMin: undefined,
|
|
77
|
-
|
|
78
|
-
// Probably no longer functional as expected (internally overwritten)
|
|
79
|
-
margins: { top: 30, right: 30, bottom: 30, left: 40 },
|
|
80
|
-
height: 200,
|
|
81
|
-
width: 600,
|
|
82
|
-
xTicks: undefined,
|
|
83
|
-
yTicks: undefined,
|
|
84
84
|
};
|
package/src/utils.js
CHANGED
|
@@ -88,11 +88,11 @@ export function formatTime(t) {
|
|
|
88
88
|
* Loop and extract GPX Extensions handled by "@tmcw/toGeoJSON" (eg. "coordinateProperties" > "times")
|
|
89
89
|
*/
|
|
90
90
|
export function coordPropsToMeta(coordProps, name, parser) {
|
|
91
|
-
return coordProps && (({props, point, id}) => {
|
|
91
|
+
return coordProps && (({props, point, id, isMulti }) => {
|
|
92
92
|
if (props) {
|
|
93
93
|
for (const key of coordProps) {
|
|
94
94
|
if (key in props) {
|
|
95
|
-
point.meta[name] = (parser || parseInt).call(this, props[key], id);
|
|
95
|
+
point.meta[name] = (parser || parseInt).call(this, (isMulti ? props[key][isMulti] : props[key]), id);
|
|
96
96
|
break;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -139,9 +139,9 @@ export const iSum = (iVal, sum) => iVal + (sum || 0);
|
|
|
139
139
|
/**
|
|
140
140
|
* Alias for some leaflet core functions
|
|
141
141
|
*/
|
|
142
|
-
export const { on, off }
|
|
143
|
-
export const { throttle } = L.Util;
|
|
144
|
-
export const { hasClass }
|
|
142
|
+
export const { on, off } = L.DomEvent;
|
|
143
|
+
export const { throttle, wrapNum } = L.Util;
|
|
144
|
+
export const { hasClass } = L.DomUtil;
|
|
145
145
|
|
|
146
146
|
/**
|
|
147
147
|
* Limit floating point precision
|