@raruto/leaflet-elevation 2.0.3 → 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 CHANGED
@@ -197,10 +197,10 @@ There are multiple options to achieve this:
197
197
  * check out [this example](https://raruto.github.io/leaflet-elevation/examples/leaflet-elevation_custom-theme.html)
198
198
  * Or add the following lines for custom colors.
199
199
  ```css
200
- .elevation-control.elevation .area {
200
+ .elevation-control .area {
201
201
  fill: red;
202
202
  }
203
- .elevation-control.elevation .background {
203
+ .elevation-control .background {
204
204
  background-color: white;
205
205
  ```
206
206
  </details>
@@ -244,7 +244,7 @@ var map = L.map('map', {
244
244
  - https://walkaholic.me/map
245
245
 
246
246
  </details>
247
-
247
+
248
248
  _Related: [Leaflet-UI presets](https://github.com/raruto/leaflet-ui), [QGIS Integration](https://github.com/faunalia/trackprofile2web)_
249
249
 
250
250
  ---
@@ -260,3 +260,5 @@ _Related: [Leaflet-UI presets](https://github.com/raruto/leaflet-ui), [QGIS Inte
260
260
  **Contributors:** [MrMufflon](https://github.com/MrMufflon/Leaflet.Elevation), [HostedDinner](https://github.com/HostedDinner/Leaflet.Elevation), [ADoroszlai](http://ADoroszlai.github.io/joebed/), [Raruto](https://github.com/Raruto/leaflet-elevation)
261
261
 
262
262
  ---
263
+
264
+ Check out [CONTRIBUTING.md](.github/CONTRIBUTING.md) file for more information on supporting the development of this library.
@@ -11,57 +11,44 @@
11
11
  /* prevent overlapping the .elevation-detached chart */
12
12
  }
13
13
 
14
- .elevation-detached {
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.elevation .axis .tick,
40
- .elevation-control.elevation .axis .domain {
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.elevation .axis line,
45
- .elevation-control.elevation .axis path {
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.elevation .grid .tick line {
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.elevation .grid path {
45
+ .elevation-control .grid path {
58
46
  stroke-width: 0;
59
- pointer-events: none;
60
47
  }
61
48
 
62
- .elevation-control.elevation .axis text,
63
- .elevation-control.elevation .legend text,
64
- .elevation-control.elevation .point text {
49
+ .elevation-control .axis text,
50
+ .elevation-control .legend text,
51
+ .elevation-control .point text {
65
52
  fill: #000;
66
53
  font-weight: 700;
67
54
  paint-order: stroke fill;
@@ -69,181 +56,120 @@
69
56
  stroke-width: 2px
70
57
  }
71
58
 
72
- .elevation-control.elevation .y.axis text {
59
+ .elevation-control .y.axis text {
73
60
  text-anchor: end;
74
61
  }
75
62
 
76
- .elevation-control.elevation .area {
63
+ .elevation-control .area {
77
64
  fill: var(--ele-area, #4682B4);
78
65
  stroke: var(--ele-stroke, #000);
79
66
  stroke-width: 1.2;
80
67
  paint-order: stroke fill;
81
68
  }
82
69
 
83
- .elevation-detached .elevation-control.elevation .area {
84
- fill-opacity: var(--ele-alpha, 0.8);
85
- }
86
-
87
- .elevation-control.elevation .horizontal-drag-line {
88
- stroke: transparent;
70
+ .elevation-control .horizontal-drag-line {
89
71
  cursor: row-resize;
90
- stroke-width: 1.1;
72
+ stroke: transparent;
91
73
  stroke-dasharray: 5;
74
+ stroke-width: 1.1;
92
75
  }
93
76
 
94
- .elevation-control.elevation .active .horizontal-drag-line {
77
+ .elevation-control .active .horizontal-drag-line {
95
78
  stroke: #000;
96
79
  }
97
80
 
98
- .elevation-control.elevation .horizontal-drag-label {
99
- font-weight: 700;
81
+ .elevation-control .horizontal-drag-label {
100
82
  fill: #000;
83
+ font-weight: 700;
101
84
  paint-order: stroke;
102
85
  stroke: #FFF;
103
86
  stroke-width: 2px;
104
- pointer-events: none;
105
87
  }
106
88
 
107
- .elevation-control.elevation .ruler {
108
- cursor: row-resize;
89
+ .elevation-control .ruler {
109
90
  color: #000;
91
+ cursor: row-resize;
110
92
  }
111
93
 
112
- .elevation-control.elevation .mouse-focus-line {
94
+ .elevation-control .mouse-focus-line {
113
95
  stroke: #000;
114
96
  stroke-width: 1;
115
- pointer-events: none;
116
97
  }
117
98
 
118
- .elevation-control.elevation .mouse-focus-label-rect {
99
+ .elevation-control .mouse-focus-label-rect {
119
100
  fill: #000;
120
101
  fill-opacity: 0.75;
121
- pointer-events: none;
122
102
  stroke-width: 1;
123
103
  stroke: #444;
124
104
  }
125
105
 
126
- .elevation-control.elevation .mouse-focus-label-text {
106
+ .elevation-control .mouse-focus-label-text {
127
107
  fill: #FFF;
128
- pointer-events: none;
129
108
  font-size: 10px;
130
109
  }
131
110
 
132
- .elevation-control.elevation .brush .overlay {
111
+ .elevation-control .brush .overlay {
133
112
  cursor: unset;
134
113
  }
135
114
 
136
- .elevation-control.elevation .brush .selection {
115
+ .elevation-control .brush .selection {
137
116
  fill: var(--ele-brush, rgba(23, 74, 117, 0.4));
138
117
  stroke: none;
139
118
  fill-opacity: unset;
140
119
  }
141
120
 
142
- .elevation-control.elevation .elevation-toggle {
143
- cursor: pointer;
144
- box-shadow: 0 1px 7px rgba(0, 0, 0, 0.4);
145
- border-radius: 5px;
146
- width: 36px;
147
- height: 36px;
148
- background-color: #F8F8F9;
149
- }
150
-
151
121
  .elevation-summary {
152
122
  font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif;
153
123
  font-size: 12px;
154
- 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);
155
126
  }
156
127
 
157
- .leaflet-control-container .elevation-summary {
158
- text-shadow:
159
- 1.5px 0 0 #FFF,
160
- -1.5px 0 0 #FFF,
161
- 0 1.5px 0 #FFF,
162
- 0 -1.5px 0 #FFF,
163
- 1px 1px #FFF,
164
- -1px -1px 0 #FFF,
165
- 1px -1px 0 #FFF,
166
- -1px 1px 0 #FFF;
128
+ .elevation-summary>span:not(:last-child):after {
129
+ content: var(--ele-sum-sep, '');
167
130
  }
168
131
 
169
- .elevation-detached .elevation-summary {
170
- margin: 0 45px;
171
- }
172
-
173
- .elevation-summary.multiline-summary {
174
- margin-right: 30px;
175
- }
176
-
177
- .elevation-detached .elevation-summary.multiline-summary {
178
- margin-bottom: 12px;
179
- margin-top: 12px;
180
- line-height: 2;
181
- }
182
-
183
- .elevation-summary.inline-summary>span:not(:last-child):after {
184
- content: "\0020\2014\0020";
185
- }
186
-
187
- .elevation-summary.multiline-summary>span {
132
+ .multiline-summary>span {
188
133
  display: block;
189
134
  }
190
135
 
191
- .elevation-summary.multiline-summary .download {
136
+ .multiline-summary .download {
192
137
  float: right;
193
- margin-top: -2.5em;
138
+ margin-top: -3em;
139
+ margin-right: 2em;
194
140
  font-weight: bold;
195
141
  font-size: 1.2em;
196
142
  }
197
143
 
198
- .elevation-detached .elevation-summary.multiline-summary .download {
199
- margin-top: -3.5em;
200
- }
201
-
202
144
  .elevation-summary .summaryvalue {
203
145
  font-weight: bold;
204
146
  }
205
147
 
206
- .elevation-control.elevation-collapsed .background,
207
- .elevation-control.elevation-collapsed .elevation-summary {
208
- display: none;
209
- }
210
-
211
- .elevation-control.elevation-collapsed .elevation-toggle {
212
- display: block;
213
- }
214
-
215
- .elevation-control.elevation .elevation-toggle-icon {
216
- background: var(--ele-icon, url(../images/elevation-lime.svg)) no-repeat center center;
217
- }
218
-
219
- .elevation-control.elevation.elevation-expanded .elevation-toggle-icon.close-button {
220
- background: transparent;
221
- 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;
222
151
  right: 5px;
223
152
  top: 5px;
224
- height: 20px;
225
- width: 20px;
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);
226
160
  }
227
161
 
228
- .elevation-control.elevation.elevation-expanded .elevation-toggle-icon.close-button:before {
162
+ .elevation-toggle-icon:before {
229
163
  content: '\2716';
230
- display: inline-block;
164
+ display: var(--ele-close-btn, none);
231
165
  color: #000;
232
- position: absolute;
233
- left: 0;
234
- right: 0;
235
- top: 0;
236
- bottom: 0;
166
+ width: 100%;
237
167
  line-height: 20px;
238
168
  text-align: center;
239
169
  font-weight: bold;
240
170
  font-size: 15px;
241
171
  }
242
172
 
243
- .elevation-control.elevation g.area > foreignObject {
244
- pointer-events: none;
245
- }
246
-
247
173
  .leaflet-elevation-pane .height-focus,
248
174
  .leaflet-overlay-pane .height-focus {
249
175
  stroke: #000;
@@ -252,7 +178,6 @@
252
178
 
253
179
  .leaflet-elevation-pane .height-focus.line,
254
180
  .leaflet-overlay-pane .height-focus.line {
255
- pointer-events: none;
256
181
  stroke-width: 2;
257
182
  }
258
183
 
@@ -272,22 +197,73 @@
272
197
  width: 100%;
273
198
  height: 100%;
274
199
  display: inline-block;
200
+ background: var(--ele-marker) no-repeat center center / contain;
275
201
  }
276
202
 
277
- .elevation-waypoint-icon:before {
278
- background: url(../images/elevation-pushpin.svg) no-repeat center center / contain;
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);
279
206
  }
280
207
 
281
- .elevation-position-icon:before {
282
- background: url(../images/elevation-position.svg) no-repeat center center / contain;
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;
283
216
  }
284
217
 
285
- .elevation-polyline {
286
- stroke: var(--ele-poly, var(--ele-area, #000));
287
- 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);
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);
288
264
  }
289
265
 
290
- /* LIME THEME //////////////////////////////////////////////// */
266
+ /* LIME THEME ///////////////////////////////////////////////////// */
291
267
 
292
268
  .lime-theme {
293
269
  --ele-bg: rgba(156, 194, 34, 0.2);
@@ -308,7 +284,7 @@
308
284
  --ele-icon: url(../images/elevation-steelblue.svg);
309
285
  }
310
286
 
311
- /* PURPLE THEME //////////////////////////////////////////////// */
287
+ /* PURPLE THEME /////////////////////////////////////////////////// */
312
288
 
313
289
  .purple-theme {
314
290
  --ele-bg: rgba(115, 44, 123, 0.2);
@@ -317,19 +293,19 @@
317
293
  --ele-icon: url(../images/elevation-purple.svg);
318
294
  }
319
295
 
320
- /* YELLOW THEME //////////////////////////////////////////////// */
296
+ /* YELLOW THEME /////////////////////////////////////////////////// */
321
297
 
322
298
  .yellow-theme {
323
299
  --ele-area: #FF0;
324
300
  }
325
301
 
326
- /* RED THEME //////////////////////////////////////////////// */
302
+ /* RED THEME ////////////////////////////////////////////////////// */
327
303
 
328
304
  .red-theme {
329
305
  --ele-area: #F00;
330
306
  }
331
307
 
332
- /* MAGENTA THEME //////////////////////////////////////////////// */
308
+ /* MAGENTA THEME ////////////////////////////////////////////////// */
333
309
 
334
310
  .magenta-theme {
335
311
  --ele-bg: rgba(255, 255, 255, 0.47);
@@ -345,7 +321,7 @@
345
321
  --ele-circle: #fff;
346
322
  }
347
323
 
348
- .elevation-detached .lightblue-theme.elevation-control.elevation .area {
324
+ .elevation-detached.lightblue-theme .area {
349
325
  stroke: #3366CC;
350
326
  }
351
327
 
@@ -245,10 +245,11 @@
245
245
 
246
246
  var Options = {
247
247
  autofitBounds: true,
248
- autohide: !L.Browser.mobile,
248
+ autohide: false,
249
249
  autohideMarker: true,
250
250
  almostover: true,
251
251
  altitude: true,
252
+ closeBtn: true,
252
253
  collapsed: false,
253
254
  detached: true,
254
255
  distance: true,
@@ -309,7 +310,13 @@
309
310
  zFollow: false,
310
311
  zooming: !L.Browser.Mobile,
311
312
 
312
- // Quite uncommon and undocumented options (quite useless)
313
+ // Quite uncommon and undocumented options
314
+ margins: { top: 30, right: 30, bottom: 30, left: 40 },
315
+ height: (screen.height * 0.3) || 200,
316
+ width: (screen.width * 0.6) || 600,
317
+ xTicks: undefined,
318
+ yTicks: undefined,
319
+
313
320
  decimalsX: 2,
314
321
  decimalsY: 0,
315
322
  forceAxisBounds: false,
@@ -317,13 +324,6 @@
317
324
  skipNullZCoords: false,
318
325
  yAxisMax: undefined,
319
326
  yAxisMin: undefined,
320
-
321
- // Probably no longer functional as expected (internally overwritten)
322
- margins: { top: 30, right: 30, bottom: 30, left: 40 },
323
- height: 200,
324
- width: 600,
325
- xTicks: undefined,
326
- yTicks: undefined,
327
327
  };
328
328
 
329
329
  const Elevation = L.Control.Elevation = L.Control.extend({
@@ -331,8 +331,8 @@
331
331
  includes: L.Evented ? L.Evented.prototype : L.Mixin.Events,
332
332
 
333
333
  options: Options,
334
- __mileFactor: 0.621371, // 1 km = (0.621371 mi)
335
- __footFactor: 3.28084, // 1 m = (3.28084 ft)
334
+ __mileFactor: 0.621371, // 1 km = (0.621371 mi)
335
+ __footFactor: 3.28084, // 1 m = (3.28084 ft)
336
336
  __D3: 'https://unpkg.com/d3@6.5.0/dist/d3.min.js',
337
337
  __TOGEOJSON: 'https://unpkg.com/@tmcw/togeojson@4.6.0/dist/togeojson.umd.js',
338
338
  __LGEOMUTIL: 'https://unpkg.com/leaflet-geometryutil@0.9.3/src/leaflet.geometryutil.js',
@@ -361,9 +361,9 @@
361
361
  */
362
362
  addTo: function(map) {
363
363
  if (this.options.detached) {
364
- let eleDiv = this._initElevationDiv();
365
- if (!eleDiv.isConnected) insert(map.getContainer(), eleDiv, 'afterend');
366
- append(eleDiv, this.onAdd(map));
364
+ let parent = select(this.options.elevationDiv);
365
+ let eleDiv = this.onAdd(map);
366
+ parent ? append(parent, eleDiv) : insert(map.getContainer(), eleDiv, 'afterend');
367
367
  } else {
368
368
  L.Control.prototype.addTo.call(this, map);
369
369
  }
@@ -545,7 +545,9 @@
545
545
  onAdd: function(map) {
546
546
  this._map = map;
547
547
 
548
- let container = this._container = create("div", "elevation-control elevation " + this.options.theme + " " + (this.options.detached ? '' : 'leaflet-control'));
548
+ let container = this._container = create("div", "elevation-control " + this.options.theme + " " + (this.options.detached ? 'elevation-detached' : 'leaflet-control'), this.options.detached ? { id: 'elevation-' + randomId() } : {});
549
+
550
+ if (!this.eleDiv) this.eleDiv = container;
549
551
 
550
552
  let modules = [
551
553
  "Distance",
@@ -737,21 +739,6 @@
737
739
  }
738
740
  },
739
741
 
740
- /**
741
- * Adds the control to the given "detached" div.
742
- */
743
- _initElevationDiv: function() {
744
- let eleDiv = select(this.options.elevationDiv);
745
- if (!eleDiv) {
746
- this.options.elevationDiv = '#elevation-div_' + randomId();
747
- eleDiv = create('div', 'leaflet-control elevation elevation-div', { id: this.options.elevationDiv.substr(1) });
748
- }
749
- if (this.options.detached) {
750
- replaceClass(eleDiv, 'leaflet-control', 'elevation-detached');
751
- }
752
- return this.eleDiv = eleDiv;
753
- },
754
-
755
742
  /**
756
743
  * Initialize "L.AlmostOver" and "L.DistanceMarkers"
757
744
  */
@@ -770,6 +757,7 @@
770
757
  } else if (control.options.polyline) {
771
758
  layer.addTo(map);
772
759
  }
760
+ map.invalidateSize();
773
761
  } else {
774
762
  console.warn("Undefined elevation map object"); }
775
763
  },
@@ -795,7 +783,7 @@
795
783
  let oldProto = L.Canvas.prototype._fillStroke;
796
784
  let control = this;
797
785
 
798
- let theme = this.options.theme.replace('-theme', '');
786
+ let theme = this.options.theme.split(' ')[0].replace('-theme', '');
799
787
  let color = Colors[theme] || {};
800
788
 
801
789
  L.Canvas.include({
@@ -980,23 +968,19 @@
980
968
  .disableScrollPropagation(container);
981
969
  }
982
970
 
983
- if (!this.options.detached) {
984
- let link = this._button = create('a', "elevation-toggle elevation-toggle-icon" + (this.options.autohide ? "" : " close-button"), { href: '#', title: L._('Elevation') }, container);
971
+ this.options.collapsed ? this._collapse() : this._expand();
985
972
 
986
- if (this.options.collapsed) {
987
- this._collapse();
988
- if (this.options.autohide) {
989
- on(container, 'mouseover', this._expand, this);
990
- on(container, 'mouseout', this._collapse, this);
991
- } else {
992
- on(link, 'click', L.DomEvent.stop);
993
- on(link, 'click', this._toggle, this);
994
- }
995
-
996
- on(link, 'focus', this._toggle, this);
973
+ if (this.options.autohide) {
974
+ on(container, 'mouseover', this._expand, this);
975
+ on(container, 'mouseout', this._collapse, this);
976
+ this._map.on('click', this._collapse, this);
977
+ }
997
978
 
998
- this._map.on('click', this._collapse, this);
999
- }
979
+ if (this.options.closeBtn) {
980
+ let link = this._button = create('a', "elevation-toggle-icon", { href: '#', title: L._('Elevation'), }, container);
981
+ on(link, 'click', L.DomEvent.stop);
982
+ on(link, 'click', this._toggle, this);
983
+ on(link, 'focus', this._toggle, this);
1000
984
  }
1001
985
  },
1002
986