diff --git a/assets/js/leaflet.elevation.js b/assets/js/leaflet.elevation.js
deleted file mode 100644
index 1b0bf91..0000000
--- a/assets/js/leaflet.elevation.js
+++ /dev/null
@@ -1,1660 +0,0 @@
-/*
- * Copyright (c) 2019, GPL-3.0+ Project, altrdev
- *
- * This file is free software: you may copy, redistribute and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 2 of the License, or (at your
- * option) any later version.
- *
- * This file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright (c) 2019, GPL-3.0+ Project, Raruto
- *
- * This file is free software: you may copy, redistribute and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 2 of the License, or (at your
- * option) any later version.
- *
- * This file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright (c) 2013-2016, MIT License, Felix “MrMufflon” Bache
- *
- * Permission to use, copy, modify, and/or distribute this software
- * for any purpose with or without fee is hereby granted, provided
- * that the above copyright notice and this permission notice appear
- * in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-L.Control.Elevation = L.Control.extend({
-
- includes: L.Evented ? L.Evented.prototype : L.Mixin.Events,
-
- options: {
- autohide: true,
- autohideMarker: true,
- collapsed: false,
- controlButton: {
- iconCssClass: "elevation-toggle-icon",
- title: "Elevation"
- },
- detached: true,
- distanceFactor: 1,
- downloadLink: 'link',
- elevationDiv: "#elevation-div",
- followMarker: true,
- forceAxisBounds: false,
- gpxOptions: {
- async: true,
- marker_options: {
- startIconUrl: null,
- endIconUrl: null,
- shadowUrl: null,
- wptIcons: {
- '': L.divIcon({
- className: 'elevation-waypoint-marker',
- html: '',
- iconSize: [30, 30],
- iconAnchor: [8, 30],
- })
- },
- },
- polyline_options: {
- className: '',
- color: '#566B13',
- opacity: 0.75,
- weight: 5,
- lineCap: 'round'
- },
- },
- height: 200,
- heightFactor: 1,
- hoverNumber: {
- decimalsX: 2,
- decimalsY: 0,
- formatter: undefined
- },
- imperial: false,
- interpolation: "curveLinear",
- lazyLoadJS: true,
- legend: true,
- loadData: {
- defer: false,
- lazy: false,
- },
- marker: 'elevation-line',
- markerIcon: L.divIcon({
- className: 'elevation-position-marker',
- html: '',
- iconSize: [32, 32],
- iconAnchor: [16, 16],
- }),
- placeholder: false,
- position: "topright",
- reverseCoords: false,
- skipNullZCoords: false,
- theme: "lightblue-theme",
- margins: {
- top: 10,
- right: 20,
- bottom: 30,
- left: 50
- },
- responsive: true,
- summary: 'inline',
- width: 600,
- xLabel: "km",
- xTicks: undefined,
- yAxisMax: undefined,
- yAxisMin: undefined,
- yLabel: "m",
- yTicks: undefined,
- zFollow: 13,
- },
- __mileFactor: 0.621371,
- __footFactor: 3.28084,
-
- /*
- * Add data to the diagram either from GPX or GeoJSON and update the axis domain and data
- */
- addData: function(d, layer) {
- this._addData(d);
-
- if (this._container) {
- this._applyData();
- }
- if ((typeof layer === "undefined" || layer === null) && d.on) {
- layer = d;
- }
- if (layer) {
- if (layer._path) {
- L.DomUtil.addClass(layer._path, 'elevation-polyline ' + this.options.theme);
- }
- layer
- .on("mousemove", this._mousemoveLayerHandler, this)
- .on("mouseout", this._mouseoutHandler, this);
- }
-
- this.track_info = this.track_info || {};
- this.track_info.distance = this._distance;
- this.track_info.elevation_max = this._maxElevation;
- this.track_info.elevation_min = this._minElevation;
-
- this._layers = this._layers || {};
- this._layers[L.Util.stamp(layer)] = layer;
-
- var evt = {
- data: d,
- layer: layer,
- track_info: this.track_info,
- };
- if (this.fire) this.fire("eledata_added", evt, true);
- if (this._map) this._map.fire("eledata_added", evt, true);
- },
-
- addTo: function(map) {
- if (this.options.detached) {
- this._addToChartDiv(map);
- } else {
- L.Control.prototype.addTo.call(this, map);
- }
- return this;
- },
-
- /*
- * Reset data and display
- */
- clear: function() {
-
- this._clearPath();
- this._clearChart();
- this._clearData();
-
- if (this.fire) this.fire("eledata_clear");
- if (this._map) this._map.fire("eledata_clear");
- },
-
- disableDragging: function() {
- this._draggingEnabled = false;
- this._resetDrag();
- },
-
- enableDragging: function() {
- this._draggingEnabled = true;
- },
-
- fitBounds: function(bounds) {
- bounds = bounds || this._fullExtent;
- if (this._map && bounds) this._map.fitBounds(bounds);
- },
-
- getZFollow: function() {
- return this._zFollow;
- },
-
- hide: function() {
- this._container.style.display = "none";
- },
-
- initialize: function(options) {
- this.options.autohide = typeof options.autohide !== "undefined" ? options.autohide : !L.Browser.mobile;
-
- // Aliases.
- if (typeof options.detachedView !== "undefined") this.options.detached = options.detachedView;
- if (typeof options.responsiveView !== "undefined") this.options.responsive = options.responsiveView;
- if (typeof options.showTrackInfo !== "undefined") this.options.summary = options.showTrackInfo;
- if (typeof options.summaryType !== "undefined") this.options.summary = options.summaryType;
- if (typeof options.autohidePositionMarker !== "undefined") this.options.autohideMarker = options.autohidePositionMarker;
- if (typeof options.followPositionMarker !== "undefined") this.options.followMarker = options.followPositionMarker;
- if (typeof options.useLeafletMarker !== "undefined") this.options.marker = options.useLeafletMarker ? 'position-marker' : 'elevation-line';
- if (typeof options.leafletMarkerIcon !== "undefined") this.options.markerIcon = options.leafletMarkerIcon;
- if (typeof options.download !== "undefined") this.options.downloadLink = options.download;
-
- // L.Util.setOptions(this, options);
- this.options = this._deepMerge({}, this.options, options);
-
- this._draggingEnabled = !L.Browser.mobile;
- this._chartEnabled = true;
-
- if (options.imperial) {
- this._distanceFactor = this.__mileFactor;
- this._heightFactor = this.__footFactor;
- this._xLabel = "mi";
- this._yLabel = "ft";
- } else {
- this._distanceFactor = this.options.distanceFactor;
- this._heightFactor = this.options.heightFactor;
- this._xLabel = this.options.xLabel;
- this._yLabel = this.options.yLabel;
- }
-
- this._zFollow = this.options.zFollow;
-
- if (this.options.followMarker) this._setMapView = L.Util.throttle(this._setMapView, 300, this);
- if (this.options.placeholder) this.options.loadData.lazy = this.options.loadData.defer = true;
- },
-
- /**
- * Alias for loadData
- */
- load: function(data, opts) {
- this.loadData(data, opts);
- },
-
- /**
- * Alias for addTo
- */
- loadChart: function(map) {
- this.addTo(map);
- },
-
- loadData: function(data, opts) {
- opts = L.extend({}, this.options.loadData, opts);
- if (opts.defer) {
- this.loadDefer(data, opts);
- } else if (opts.lazy) {
- this.loadLazy(data, opts);
- } else if (this._isXMLDoc(data)) {
- this.loadGPX(data);
- } else if (this._isJSONDoc(data)) {
- this.loadGeoJSON(data);
- } else {
- this.loadFile(data);
- }
- },
-
- loadDefer: function(data, opts) {
- opts = L.extend({}, this.options.loadData, opts);
- opts.defer = false;
- if (document.readyState !== 'complete') window.addEventListener("load", L.bind(this.loadData, this, data, opts), { once: true });
- else this.loadData(data, opts)
- },
-
- loadFile: function(url) {
- this._downloadURL = url; // TODO: handle multiple urls?
- try {
- var xhr = new XMLHttpRequest();
- xhr.responseType = "text";
- xhr.open('GET', url);
- xhr.onload = function() {
- if (xhr.status !== 200) {
- throw "Error " + xhr.status + " while fetching remote file: " + url;
- } else {
- this.loadData(xhr.response, { lazy: false, defer: false });
- }
- }.bind(this);
- xhr.send();
- } catch (e) {
- console.warn(e);
- }
- },
-
- loadGeoJSON: function(data) {
- if (typeof data === "string") {
- data = JSON.parse(data);
- }
-
- this.layer = this.geojson = L.geoJson(data, {
- style: function(feature) {
- return {
- color: '#566B13',
- className: 'elevation-polyline ' + this.options.theme,
- };
- }.bind(this),
- onEachFeature: function(feature, layer) {
- this.addData(feature, layer);
-
- this.track_info = this.track_info || {};
- this.track_info.type = "geojson";
- this.track_info.name = data.name;
- this.track_info.distance = this._distance;
- this.track_info.elevation_max = this._maxElevation;
- this.track_info.elevation_min = this._minElevation;
-
- }.bind(this),
- });
- if (this._map) {
- this._map.once('layeradd', function(e) {
- this.fitBounds(this.layer.getBounds());
- var evt = {
- data: data,
- layer: this.layer,
- name: this.track_info.name,
- track_info: this.track_info,
- };
- if (this.fire) this.fire("eledata_loaded", evt, true);
- if (this._map) this._map.fire("eledata_loaded", evt, true);
- }, this);
-
- this.layer.addTo(this._map);
- } else {
- console.warn("Undefined elevation map object");
- }
- },
-
- loadGPX: function(data) {
- var callback = function(data) {
- this.options.gpxOptions.polyline_options.className += 'elevation-polyline ' + this.options.theme;
-
- this.layer = this.gpx = new L.GPX(data, this.options.gpxOptions);
-
- this.layer.on('loaded', function(e) {
- this.fitBounds(e.target.getBounds());
- }, this);
- this.layer.on('addpoint', function(e) {
-
- if(e.point_type === "start" || e.point_type === "end") {
- e.point.setZIndexOffset(10000);
- }
- if (e.point._popup) {
- e.point._popup.options.className = 'elevation-popup';
- e.point._popup._content = decodeURI(e.point._popup._content);
- }
- if (e.point._popup && e.point._popup._content) {
- e.point.bindTooltip(e.point._popup._content, { direction: 'top', sticky: true, opacity: 1, className: 'elevation-tooltip' }).openTooltip();
- }
- });
- this.layer.once("addline", function(e) {
- this.addData(e.line /*, this.layer*/ );
-
- this.track_info = this.track_info || {};
- this.track_info.type = "gpx";
- this.track_info.name = this.layer.get_name();
- this.track_info.distance = this._distance;
- this.track_info.elevation_max = this._maxElevation;
- this.track_info.elevation_min = this._minElevation;
-
- var evt = {
- data: data,
- layer: this.layer,
- name: this.track_info.name,
- track_info: this.track_info,
- };
-
- if (this.fire) this.fire("eledata_loaded", evt, true);
- if (this._map) this._map.fire("eledata_loaded", evt, true);
- }, this);
-
- if (this._map) {
- this.layer.addTo(this._map);
- } else {
- console.warn("Undefined elevation map object");
- }
- }.bind(this, data);
- if (typeof L.GPX !== 'function' && this.options.lazyLoadJS) {
- L.Control.Elevation._gpxLazyLoader = this._lazyLoadJS('https://cdnjs.cloudflare.com/ajax/libs/leaflet-gpx/1.5.0/gpx.js', L.Control.Elevation._gpxLazyLoader);
- L.Control.Elevation._gpxLazyLoader.then(callback);
- } else {
- callback.call();
- }
- },
-
- loadLazy: function(data, opts) {
- opts = L.extend({}, this.options.loadData, opts);
- opts.lazy = false;
- let ticking = false;
- let scrollFn = L.bind(function(data) {
- if (!ticking) {
- L.Util.requestAnimFrame(function() {
- if (this._isVisible(this.placeholder)) {
- window.removeEventListener('scroll', scrollFn);
- this.loadData(data, opts);
- this.once('eledata_loaded', function() {
- if (this.placeholder && this.placeholder.parentNode) {
- this.placeholder.parentNode.removeChild(this.placeholder);
- }
- }, this)
- }
- ticking = false;
- }, this);
- ticking = true;
- }
- }, this, data);
- window.addEventListener('scroll', scrollFn);
- if (this.placeholder) this.placeholder.addEventListener('mouseenter', scrollFn, { once: true });
- scrollFn();
- },
-
- onAdd: function(map) {
- this._map = map;
-
- var container = this._container = L.DomUtil.create("div", "elevation-control elevation");
-
- if (!this.options.detached) {
- L.DomUtil.addClass(container, 'leaflet-control');
- }
-
- if (this.options.theme) {
- L.DomUtil.addClass(container, this.options.theme); // append theme to control
- }
-
- if (this.options.placeholder && !this._data) {
- this.placeholder = L.DomUtil.create('img', 'elevation-placeholder');
- if (typeof this.options.placeholder === 'string') {
- this.placeholder.src = this.options.placeholder;
- this.placeholder.alt = '';
- } else {
- for (let i in this.options.placeholder) { this.placeholder.setAttribute(i, this.options.placeholder[i]); }
- }
- container.insertBefore(this.placeholder, container.firstChild);
- }
-
- var callback = function(map, container) {
- this._initToggle(container);
- this._initChart(container);
-
- this._applyData();
-
- this._map.on('zoom viewreset zoomanim', this._hidePositionMarker, this);
- this._map.on('resize', this._resetView, this);
- this._map.on('resize', this._resizeChart, this);
- this._map.on('mousedown', this._resetDrag, this);
-
- this._map.on('eledata_loaded', this._updateSummary, this);
-
- L.DomEvent.on(this._map._container, 'mousewheel', this._resetDrag, this);
- L.DomEvent.on(this._map._container, 'touchstart', this._resetDrag, this);
-
- }.bind(this, map, container);
- if (typeof d3 !== 'object' && this.options.lazyLoadJS) {
- L.Control.Elevation._d3LazyLoader = this._lazyLoadJS('https://unpkg.com/d3@4.13.0/build/d3.min.js', L.Control.Elevation._d3LazyLoader);
- L.Control.Elevation._d3LazyLoader.then(callback);
- } else {
- callback.call();
- }
- return container;
- },
-
- onRemove: function(map) {
- this._container = null;
- },
-
- redraw: function() {
- this._resizeChart();
- },
-
- setZFollow: function(zoom) {
- this._zFollow = zoom;
- },
-
- show: function() {
- this._container.style.display = "block";
- },
-
- /*
- * Parsing data either from GPX or GeoJSON and update the diagram data
- */
- _addData: function(d) {
- var geom = d && d.geometry && d.geometry;
- var i;
-
- if (geom) {
- switch (geom.type) {
- case 'LineString':
- this._addGeoJSONData(geom.coordinates);
- break;
-
- case 'MultiLineString':
- for (i = 0; i < geom.coordinates.length; i++) {
- this._addGeoJSONData(geom.coordinates[i]);
- }
- break;
-
- default:
- console.warn('Unsopperted GeoJSON feature geometry type:' + geom.type);
- }
- }
-
- var feat = d && d.type === "FeatureCollection";
- if (feat) {
- for (i = 0; i < d.features.length; i++) {
- this._addData(d.features[i]);
- }
- }
-
- if (d && d._latlngs) {
- this._addGPXdata(d._latlngs);
- }
- },
-
- /*
- * Parsing of GeoJSON data lines and their elevation in z-coordinate
- */
- _addGeoJSONData: function(coords) {
- if (coords) {
- for (var i = 0; i < coords.length; i++) {
- this._addPoint(coords[i][1], coords[i][0], coords[i][2]);
- }
- }
- },
-
- /*
- * Parsing function for GPX data and their elevation in z-coordinate
- */
- _addGPXdata: function(coords) {
- if (coords) {
- for (var i = 0; i < coords.length; i++) {
- this._addPoint(coords[i].lat, coords[i].lng, coords[i].meta.ele);
- }
- }
- },
-
- _addPoint: function(x, y, z) {
- if (this.options.reverseCoords) {
- var tmp = x;
- x = y;
- y = tmp;
- }
-
- var data = this._data || [];
- var eleMax = this._maxElevation || -Infinity;
- var eleMin = this._minElevation || +Infinity;
- var dist = this._distance || 0;
-
- var curr = new L.LatLng(x, y);
- var prev = data.length ? data[data.length - 1].latlng : curr;
-
- var delta = curr.distanceTo(prev) * this._distanceFactor;
-
- dist = dist + Math.round(delta / 1000 * 100000) / 100000;
-
- // check and fix missing elevation data on last added point
- if (!this.options.skipNullZCoords && data.length > 0) {
- var prevZ = data[data.length - 1].z;
- if (isNaN(prevZ)) {
- var lastZ = this._lastValidZ;
- var currZ = z * this._heightFactor;
- if (!isNaN(lastZ) && !isNaN(currZ)) {
- prevZ = (lastZ + currZ) / 2;
- } else if (!isNaN(lastZ)) {
- prevZ = lastZ;
- } else if (!isNaN(currZ)) {
- prevZ = currZ;
- }
- if (!isNaN(prevZ)) data[data.length - 1].z = prevZ;
- else data.splice(data.length - 1, 1);
- }
- }
-
- z = z * this._heightFactor;
-
- // skip point if it has not elevation
- if (!isNaN(z)) {
- eleMax = eleMax < z ? z : eleMax;
- eleMin = eleMin > z ? z : eleMin;
- this._lastValidZ = z;
- }
-
- data.push({
- dist: dist,
- x: x,
- y: y,
- z: z,
- latlng: curr
- });
-
- this._data = data;
- this._distance = dist;
- this._maxElevation = eleMax;
- this._minElevation = eleMin;
- },
-
- _addToChartDiv: function(map) {
- this._appendElevationDiv(map._container).appendChild(this.onAdd(map));
- },
-
- _appendChart: function(svg) {
- var g = svg
- .append("g")
- .attr("transform", "translate(" + this.options.margins.left + "," + this.options.margins.top + ")");
-
- this._appendGrid(g);
- this._appendAreaPath(g);
- this._appendAxis(g);
- this._appendFocusRect(g);
- this._appendMouseFocusG(g);
- this._appendLegend(g);
- },
-
- _appendElevationDiv: function(container) {
- var eleDiv = document.querySelector(this.options.elevationDiv);
- if (!eleDiv) {
- eleDiv = L.DomUtil.create('div', 'leaflet-control elevation elevation-div');
- this.options.elevationDiv = '#elevation-div_' + Math.random().toString(36).substr(2, 9);
- eleDiv.id = this.options.elevationDiv.substr(1);
- container.parentNode.insertBefore(eleDiv, container.nextSibling); // insert after end of container.
- }
- if (this.options.detached) {
- L.DomUtil.addClass(eleDiv, 'elevation-detached');
- L.DomUtil.removeClass(eleDiv, 'leaflet-control');
- }
- this.eleDiv = eleDiv;
- return this.eleDiv;
- },
-
- _appendXaxis: function(axis) {
- axis
- .append("g")
- .attr("class", "x axis")
- .attr("transform", "translate(0," + this._height() + ")")
- .call(
- d3
- .axisBottom()
- .scale(this._x)
- .ticks(this.options.xTicks)
- )
- .append("text")
- .attr("x", this._width() + 6)
- .attr("y", 30)
- .text(this._xLabel);
- },
-
- _appendXGrid: function(grid) {
- grid.append("g")
- .attr("class", "x grid")
- .attr("transform", "translate(0," + this._height() + ")")
- .call(
- d3
- .axisBottom()
- .scale(this._x)
- .ticks(this.options.xTicks)
- .tickSize(-this._height())
- .tickFormat("")
- );
-
- },
-
- _appendYaxis: function(axis) {
- axis
- .append("g")
- .attr("class", "y axis")
- .call(
- d3
- .axisLeft()
- .scale(this._y)
- .ticks(this.options.yTicks)
- )
- .append("text")
- .attr("x", -30)
- .attr("y", -5)
- .text(this._yLabel);
- },
-
- _appendYGrid: function(grid) {
- grid.append("g")
- .attr("class", "y grid")
- .call(
- d3
- .axisLeft()
- .scale(this._y)
- .ticks(this.options.yTicks)
- .tickSize(-this._width())
- .tickFormat("")
- );
- },
-
- _appendAreaPath: function(g) {
- this._areapath = g.append("path")
- .attr("class", "area");
- },
-
- _appendAxis: function(g) {
- this._axis = g.append("g")
- .attr("class", "axis");
- this._appendXaxis(this._axis);
- this._appendYaxis(this._axis);
- },
-
- _appendFocusRect: function(g) {
- var focusRect = this._focusRect = g.append("rect")
- .attr("width", this._width())
- .attr("height", this._height())
- .style("fill", "none")
- .style("stroke", "none")
- .style("pointer-events", "all");
-
- if (L.Browser.mobile) {
- focusRect
- .on("touchmove.drag", this._dragHandler.bind(this))
- .on("touchstart.drag", this._dragStartHandler.bind(this))
- .on("touchstart.focus", this._mousemoveHandler.bind(this))
- .on("touchmove.focus", this._mousemoveHandler.bind(this));
- L.DomEvent.on(this._container, 'touchend', this._dragEndHandler, this);
- }
-
- focusRect
- .on("mousemove.drag", this._dragHandler.bind(this))
- .on("mousedown.drag", this._dragStartHandler.bind(this))
- .on("mouseenter.focus", this._mouseenterHandler.bind(this))
- .on("mousemove.focus", this._mousemoveHandler.bind(this))
- .on("mouseout.focus", this._mouseoutHandler.bind(this));
- L.DomEvent.on(this._container, 'mouseup', this._dragEndHandler, this);
- },
-
- _appendGrid: function(g) {
- this._grid = g.append("g")
- .attr("class", "grid");
- this._appendXGrid(this._grid);
- this._appendYGrid(this._grid);
- },
-
- _appendMouseFocusG: function(g) {
- var focusG = this._focusG = g.append("g")
- .attr("class", "mouse-focus-group");
-
- this._mousefocus = focusG.append('svg:line')
- .attr('class', 'mouse-focus-line')
- .attr('x2', '0')
- .attr('y2', '0')
- .attr('x1', '0')
- .attr('y1', '0');
-
- this._focuslabelrect = focusG.append("rect")
- .attr('class', 'mouse-focus-label')
- .attr("x", 0)
- .attr("y", 0)
- .attr("width", 0)
- .attr("height", 0)
- .attr("rx", 3)
- .attr("ry", 3);
-
- this._focuslabeltext = focusG.append("svg:text")
- .attr("class", "mouse-focus-label-text");
- this._focuslabelY = this._focuslabeltext.append("svg:tspan")
- .attr("class", "mouse-focus-label-y")
- .attr("dy", "-1em");
- this._focuslabelX = this._focuslabeltext.append("svg:tspan")
- .attr("class", "mouse-focus-label-x")
- .attr("dy", "2em");
- },
-
- _appendLegend: function(g) {
- if (!this.options.legend) return;
-
- var legend = this._legend = g.append('g')
- .attr("class", "legend");
-
- var altitude = this._altitudeLegend = this._legend.append('g')
- .attr("class", "legend-altitude");
-
- altitude.append("rect")
- .attr("class", "area")
- .attr("x", (this._width() / 2) - 50)
- .attr("y", this._height() + this.options.margins.bottom - 17)
- .attr("width", 50)
- .attr("height", 5)
- .attr("opacity", 0.75);
-
- altitude.append('text')
- .text('Altitude')
- .attr("x", (this._width() / 2) + 5)
- .attr("font-size", 10)
- .style("text-decoration-thickness", "2px")
- .style("font-weight", "700")
- .attr('y', this._height() + this.options.margins.bottom - 11);
-
- },
-
- _appendPositionMarker: function(pane) {
- var theme = this.options.theme;
- var heightG = pane.select("g");
-
- this._mouseHeightFocus = heightG.append('svg:line')
- .attr("class", theme + " height-focus line")
- .attr("x2", 0)
- .attr("y2", 0)
- .attr("x1", 0)
- .attr("y1", 0);
-
- this._pointG = heightG.append("g");
- this._pointG.append("svg:circle")
- .attr("class", theme + " height-focus circle-lower")
- .attr("r", 6)
- .attr("cx", 0)
- .attr("cy", 0);
-
- this._mouseHeightFocusLabel = heightG.append("svg:text")
- .attr("class", theme + " height-focus-label")
- .style("pointer-events", "none");
- },
-
- _applyData: function() {
- if (!this._data) return;
-
- var xdomain = d3.extent(this._data, function(d) {
- return d.dist;
- });
- var ydomain = d3.extent(this._data, function(d) {
- return d.z;
- });
- var opts = this.options;
-
- if (opts.yAxisMin !== undefined && (opts.yAxisMin < ydomain[0] || opts.forceAxisBounds)) {
- ydomain[0] = opts.yAxisMin;
- }
- if (opts.yAxisMax !== undefined && (opts.yAxisMax > ydomain[1] || opts.forceAxisBounds)) {
- ydomain[1] = opts.yAxisMax;
- }
-
- this._x.domain(xdomain);
- this._y.domain(ydomain);
- this._areapath.datum(this._data)
- .attr("d", this._area);
- this._updateAxis();
-
- this._fullExtent = this._calculateFullExtent(this._data);
- },
-
- /*
- * Calculates the full extent of the data array
- */
- _calculateFullExtent: function(data) {
- if (!data || data.length < 1) {
- throw new Error("no data in parameters");
- }
-
- var ext = new L.latLngBounds(data[0].latlng, data[0].latlng);
-
- data.forEach(function(item) {
- ext.extend(item.latlng);
- });
-
- return ext;
- },
-
- _clearChart: function() {
- this._resetDrag();
- if (this._areapath) {
- // workaround for 'Error: Problem parsing d=""' in Webkit when empty data
- // https://groups.google.com/d/msg/d3-js/7rFxpXKXFhI/HzIO_NPeDuMJ
- //this._areapath.datum(this._data).attr("d", this._area);
- this._areapath.attr("d", "M0 0");
-
- this._x.domain([0, 1]);
- this._y.domain([0, 1]);
- this._updateAxis();
- }
- if (this._altitudeLegend) {
- this._altitudeLegend.select('text').style("text-decoration-line", "line-through");
- }
- },
-
- /*
- * Reset data
- */
- _clearData: function() {
- this._data = null;
- this._distance = null;
- this._maxElevation = null;
- this._minElevation = null;
- this.track_info = null;
- this._layers = null;
- // if (this.layer) {
- // this.layer.removeFrom(this._map);
- // }
- },
-
- _clearPath: function() {
- this._hidePositionMarker();
- for (var id in this._layers) {
- L.DomUtil.removeClass(this._layers[id]._path, "elevation-polyline");
- L.DomUtil.removeClass(this._layers[id]._path, this.options.theme);
- }
- },
-
- _collapse: function() {
- if (this._container) {
- L.DomUtil.removeClass(this._container, 'elevation-expanded');
- L.DomUtil.addClass(this._container, 'elevation-collapsed');
- }
- },
-
- _deepMerge: function(target, ...sources) {
- if (!sources.length) return target;
- const source = sources.shift();
- if (this._isObject(target) && this._isObject(source)) {
- for (const key in source) {
- if (this._isObject(source[key])) {
- if (!target[key]) Object.assign(target, {
- [key]: {}
- });
- this._deepMerge(target[key], source[key]);
- } else {
- Object.assign(target, {
- [key]: source[key]
- });
- }
- }
- }
- return this._deepMerge(target, ...sources);
- },
-
- _saveFile: function(fileUrl) {
- var d = document,
- a = d.createElement('a'),
- b = d.body;
- a.href = fileUrl;
- a.target = '_new';
- a.download = ""; // fileName
- a.style.display = 'none';
- b.appendChild(a);
- a.click();
- b.removeChild(a);
- },
-
- _dragHandler: function() {
- //we don't want map events to occur here
- d3.event.preventDefault();
- d3.event.stopPropagation();
-
- this._gotDragged = true;
- this._drawDragRectangle();
- },
-
- /*
- * Handles end of drag operations. Zooms the map to the selected items extent.
- */
- _dragEndHandler: function() {
- if (!this._dragStartCoords || !this._dragCurrentCoords || !this._gotDragged) {
- this._dragStartCoords = null;
- this._gotDragged = false;
- if (this._draggingEnabled) this._resetDrag();
- // autotoggle chart data on single click
- /*if (this._chartEnabled) {
- this._clearChart();
- this._clearPath();
- this._chartEnabled = false;
- } else {
- this._resizeChart();
- this._chartEnabled = true;
- }*/
- return;
- }
-
- var item1 = this._findItemForX(this._dragStartCoords[0]),
- item2 = this._findItemForX(this._dragCurrentCoords[0]);
-
- if (item1 == item2) return;
-
- this._hidePositionMarker();
-
- this._fitSection(item1, item2);
-
- this._dragStartCoords = null;
- this._gotDragged = false;
-
- var evt = {
- data: {
- dragstart: this._data[item1],
- dragend: this._data[item2]
- }
- };
- if (this.fire) this.fire("elechart_dragged", evt, true);
- if (this._map) this._map.fire("elechart_dragged", evt, true);
- },
-
- _dragStartHandler: function() {
- d3.event.preventDefault();
- d3.event.stopPropagation();
-
- this._gotDragged = false;
- this._dragStartCoords = d3.mouse(this._focusRect.node());
- },
-
- /*
- * Draws the currently dragged rectangle over the chart.
- */
- _drawDragRectangle: function() {
- if (!this._dragStartCoords || !this._draggingEnabled) {
- return;
- }
-
- var dragEndCoords = this._dragCurrentCoords = d3.mouse(this._focusRect.node());
-
- var x1 = Math.min(this._dragStartCoords[0], dragEndCoords[0]),
- x2 = Math.max(this._dragStartCoords[0], dragEndCoords[0]);
-
- if (!this._dragRectangle && !this._dragRectangleG) {
- var g = d3.select(this._container).select("svg").select("g");
-
- this._dragRectangleG = g.insert("g", ".mouse-focus-group");
-
- this._dragRectangle = this._dragRectangleG.append("rect")
- .attr("width", x2 - x1)
- .attr("height", this._height())
- .attr("x", x1)
- .attr('class', 'mouse-drag')
- .style("pointer-events", "none");
- } else {
- this._dragRectangle.attr("width", x2 - x1)
- .attr("x", x1);
- }
- },
-
- _expand: function() {
- if (this._container) {
- L.DomUtil.removeClass(this._container, 'elevation-collapsed');
- L.DomUtil.addClass(this._container, 'elevation-expanded');
- }
- },
-
- /*
- * Finds an item with the smallest delta in distance to the given latlng coords
- */
- _findItemForLatLng: function(latlng) {
- var result = null,
- d = Infinity;
- this._data.forEach(function(item) {
- var dist = latlng.distanceTo(item.latlng);
- if (dist < d) {
- d = dist;
- result = item;
- }
- });
- return result;
- },
-
- /*
- * Finds a data entry for a given x-coordinate of the diagram
- */
- _findItemForX: function(x) {
- var bisect = d3.bisector(function(d) {
- return d.dist;
- }).left;
- var xinvert = this._x.invert(x);
- return bisect(this._data, xinvert);
- },
-
- /**
- * Make the map fit the route section between given indexes.
- */
- _fitSection: function(index1, index2) {
- var start = Math.min(index1, index2);
- var end = Math.max(index1, index2);
- var ext = this._calculateFullExtent(this._data.slice(start, end));
- this.fitBounds(ext);
- },
-
- /*
- * Fromatting funciton using the given decimals and seperator
- */
- _formatter: function(num, dec, sep) {
- var res;
- if (dec === 0) {
- res = Math.round(num) + "";
- } else {
- res = L.Util.formatNum(num, dec) + "";
- }
- var numbers = res.split(".");
- if (numbers[1]) {
- var d = dec - numbers[1].length;
- for (; d > 0; d--) {
- numbers[1] += "0";
- }
- res = numbers.join(sep || ".");
- }
- return res;
- },
-
- _height: function() {
- var opts = this.options;
- return opts.height - opts.margins.top - opts.margins.bottom;
- },
-
- /*
- * Hides the position/height indicator marker drawn onto the map
- */
- _hidePositionMarker: function() {
- if (!this.options.autohideMarker) {
- return;
- }
-
- this._selectedItem = null;
-
- if (this._marker) {
- if (this._map) this._map.removeLayer(this._marker);
- this._marker = null;
- }
- if (this._mouseHeightFocus) {
- this._mouseHeightFocus.style("visibility", "hidden");
- this._mouseHeightFocusLabel.style("visibility", "hidden");
- }
- if (this._pointG) {
- this._pointG.style("visibility", "hidden");
- }
- if (this._focusG) {
- this._focusG.style("visibility", "hidden");
- }
- },
-
- _initChart: function() {
- var opts = this.options;
- opts.xTicks = opts.xTicks || Math.round(this._width() / 75);
- opts.yTicks = opts.yTicks || Math.round(this._height() / 30);
- opts.hoverNumber.formatter = opts.hoverNumber.formatter || this._formatter;
-
- if (opts.responsive) {
- if (opts.detached) {
- var offWi = this.eleDiv.offsetWidth;
- var offHe = this.eleDiv.offsetHeight;
- opts.width = offWi > 0 ? offWi : opts.width;
- opts.height = (offHe - 20) > 0 ? offHe - 20 : opts.height; // 20 = horizontal scrollbar size.
- } else {
- opts._maxWidth = opts._maxWidth > opts.width ? opts._maxWidth : opts.width;
- var containerWidth = this._map._container.clientWidth;
- opts.width = opts._maxWidth > containerWidth ? containerWidth - 30 : opts.width;
- }
- }
-
- var x = this._x = d3.scaleLinear().range([0, this._width()]);
- var y = this._y = d3.scaleLinear().range([this._height(), 0]);
-
- var interpolation = typeof opts.interpolation === 'function' ? opts.interpolation : d3[opts.interpolation];
-
- var area = this._area = d3.area().curve(interpolation)
- .x(function(d) {
- return (d.xDiagCoord = x(d.dist));
- })
- .y0(this._height())
- .y1(function(d) {
- return y(d.z);
- });
- var line = this._line = d3.line()
- .x(function(d) {
- return d3.mouse(svg.select("g"))[0];
- })
- .y(function(d) {
- return this._height();
- });
-
- var container = d3.select(this._container);
-
- var svg = container.append("svg")
- .attr("class", "background")
- .attr("width", opts.width)
- .attr("height", opts.height);
-
- var summary = this.summaryDiv = container.append("div")
- .attr("class", "elevation-summary " + this.options.summary + "-summary").node();
-
- this._appendChart(svg);
- this._updateSummary();
-
- },
-
- /**
- * Inspired by L.Control.Layers
- */
- _initToggle: function(container) {
- //Makes this work on IE10 Touch devices by stopping it from firing a mouseout event when the touch is released
- container.setAttribute('aria-haspopup', true);
-
- if (!this.options.detached) {
- L.DomEvent
- .disableClickPropagation(container);
- //.disableScrollPropagation(container);
- }
-
- if (L.Browser.mobile) {
- L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
- }
-
- //L.DomEvent.on(container, 'mousewheel', this._mousewheelHandler, this);
-
- if (!this.options.detached) {
- var iconCssClass = "elevation-toggle " + this.options.controlButton.iconCssClass + (this.options.autohide ? "" : " close-button");
- var link = this._button = L.DomUtil.create('a', iconCssClass, container);
- link.href = '#';
- link.title = this.options.controlButton.title;
-
- if (this.options.collapsed) {
- this._collapse();
- if (this.options.autohide) {
- L.DomEvent
- .on(container, 'mouseover', this._expand, this)
- .on(container, 'mouseout', this._collapse, this);
- } else {
- L.DomEvent
- .on(link, 'click', L.DomEvent.stop)
- .on(link, 'click', this._toggle, this);
- }
-
- L.DomEvent.on(link, 'focus', this._toggle, this);
-
- this._map.on('click', this._collapse, this);
- // TODO: keyboard accessibility
- }
- } else {
- // TODO: handle autohide when detached=true
- }
- },
-
- _isObject: function(item) {
- return (item && typeof item === 'object' && !Array.isArray(item));
- },
-
- _isJSONDoc: function(doc, lazy) {
- lazy = typeof lazy === "undefined" ? true : lazy;
- if (typeof doc === "string" && lazy) {
- doc = doc.trim();
- return doc.indexOf("{") == 0 || doc.indexOf("[") == 0;
- } else {
- try {
- JSON.parse(doc.toString());
- } catch (e) {
- if (typeof doc === "object" && lazy) return true;
- console.warn(e);
- return false;
- }
- return true;
- }
- },
-
- _isXMLDoc: function(doc, lazy) {
- lazy = typeof lazy === "undefined" ? true : lazy;
- if (typeof doc === "string" && lazy) {
- doc = doc.trim();
- return doc.indexOf("<") == 0;
- } else {
- var documentElement = (doc ? doc.ownerDocument || doc : 0).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
- }
- },
-
- _isDomVisible: function(elem) {
- return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
- },
-
- _isVisible: function(elem) {
- if (!elem) return false;
-
- let styles = window.getComputedStyle(elem);
-
- function isVisibleByStyles(elem, styles) {
- return styles.visibility !== 'hidden' && styles.display !== 'none';
- }
-
- function isAboveOtherElements(elem, styles) {
- let boundingRect = elem.getBoundingClientRect();
- let left = boundingRect.left + 1;
- let right = boundingRect.right - 1;
- let top = boundingRect.top + 1;
- let bottom = boundingRect.bottom - 1;
- let above = true;
-
- let pointerEvents = elem.style.pointerEvents;
-
- if (styles['pointer-events'] == 'none') elem.style.pointerEvents = 'auto';
-
- if (document.elementFromPoint(left, top) !== elem) above = false;
- if (document.elementFromPoint(right, top) !== elem) above = false;
-
- // Only for completely visible elements
- // if (document.elementFromPoint(left, bottom) !== elem) above = false;
- // if (document.elementFromPoint(right, bottom) !== elem) above = false;
-
- elem.style.pointerEvents = pointerEvents;
-
- return above;
- }
-
- if (!isVisibleByStyles(elem, styles)) return false;
- if (!isAboveOtherElements(elem, styles)) return false;
- return true;
- },
-
- _lazyLoadJS: function(url, skip) {
- if (typeof skip == "undefined") {
- skip = false;
- }
- if (skip instanceof Promise) {
- return skip;
- }
- return new Promise(function(resolve, reject) {
- if (skip) return resolve();
- var tag = document.createElement("script");
- tag.addEventListener('load', resolve, { once: true });
- tag.src = url;
- document.head.appendChild(tag);
- });
- },
-
- _mouseenterHandler: function() {
- if (this.fire) {
- this.fire("elechart_enter", null, true);
- }
- if (this._map) {
- this._map.fire("elechart_enter", null, true);
- }
- },
-
- /*
- * Handles the moueseover the chart and displays distance and altitude level
- */
- _mousemoveHandler: function(d, i, ctx) {
- if (!this._data || this._data.length === 0 || !this._chartEnabled) {
- return;
- }
- var coords = d3.mouse(this._focusRect.node());
- var xCoord = coords[0];
- var item = this._data[this._findItemForX(xCoord)];
-
- this._hidePositionMarker();
- this._showDiagramIndicator(item, xCoord);
- this._showPositionMarker(item);
- this._setMapView(item);
-
- if (this._map && this._map._container) {
- L.DomUtil.addClass(this._map._container, 'elechart-hover');
- }
-
- var evt = {
- data: item
- };
- if (this.fire) {
- this.fire("elechart_change", evt, true);
- this.fire("elechart_hover", evt, true);
- }
- if (this._map) {
- this._map.fire("elechart_change", evt, true);
- this._map.fire("elechart_hover", evt, true);
- }
- },
-
- /*
- * Handles mouseover events of the data layers on the map.
- */
- _mousemoveLayerHandler: function(e) {
- if (!this._data || this._data.length === 0) {
- return;
- }
- var latlng = e.latlng;
- var item = this._findItemForLatLng(latlng);
- if (item) {
- var xCoord = item.xDiagCoord;
-
- this._hidePositionMarker();
- this._showDiagramIndicator(item, xCoord);
- this._showPositionMarker(item);
- }
- },
-
- _mouseoutHandler: function() {
- if (!this.options.detached) {
- this._hidePositionMarker();
- }
-
- if (this._map && this._map._container) {
- L.DomUtil.removeClass(this._map._container, 'elechart-hover');
- }
-
- if (this.fire) this.fire("elechart_leave", null, true);
- if (this._map) this._map.fire("elechart_leave", null, true);
- },
-
- _mousewheelHandler: function(e) {
- if (this._map.gestureHandling && this._map.gestureHandling._enabled) return;
- var ll = this._selectedItem ? this._selectedItem.latlng : this._map.getCenter();
- var z = e.deltaY > 0 ? this._map.getZoom() - 1 : this._map.getZoom() + 1;
- this._resetDrag();
- this._map.flyTo(ll, z);
-
- },
-
- /*
- * Removes the drag rectangle and zoms back to the total extent of the data.
- */
- _resetDrag: function() {
- if (this._dragRectangleG) {
- this._dragRectangleG.remove();
- this._dragRectangleG = null;
- this._dragRectangle = null;
- this._hidePositionMarker();
- }
- },
-
- _resetView: function() {
- if (this._map && this._map._isFullscreen) return;
- this._resetDrag();
- this._hidePositionMarker();
- this.fitBounds(this._fullExtent);
- },
-
- _resizeChart: function() {
- if (this.options.responsive) {
- if (this.options.detached) {
- var newWidth = this.eleDiv.offsetWidth; // - 20;
-
- if (newWidth <= 0) return;
-
- this.options.width = newWidth;
- this.eleDiv.innerHTML = "";
- this.eleDiv.appendChild(this.onAdd(this._map));
- } else {
- this._map.removeControl(this._container);
- this.addTo(this._map);
- }
- }
- },
-
- _showDiagramIndicator: function(item, xCoordinate) {
- if (!this._chartEnabled) return;
-
- var opts = this.options;
- this._focusG.style("visibility", "visible");
-
- this._mousefocus.attr('x1', xCoordinate)
- .attr('y1', 0)
- .attr('x2', xCoordinate)
- .attr('y2', this._height())
- .classed('hidden', false);
-
- var alt = item.z,
- dist = item.dist,
- ll = item.latlng,
- numY = opts.hoverNumber.formatter(alt, opts.hoverNumber.decimalsY),
- numX = opts.hoverNumber.formatter(dist, opts.hoverNumber.decimalsX);
-
- this._focuslabeltext
- // .attr("x", xCoordinate)
- .attr("y", this._y(item.z))
- .style("font-weight", "700");
-
- this._focuslabelX
- .text(numX + " " + this._xLabel)
- .attr("x", xCoordinate + 10);
-
- this._focuslabelY
- .text(numY + " " + this._yLabel)
- .attr("x", xCoordinate + 10);
-
- var focuslabeltext = this._focuslabeltext.node();
- if (this._isDomVisible(focuslabeltext)) {
- var bbox = focuslabeltext.getBBox();
- var padding = 2;
-
- this._focuslabelrect
- .attr("x", bbox.x - padding)
- .attr("y", bbox.y - padding)
- .attr("width", bbox.width + (padding * 2))
- .attr("height", bbox.height + (padding * 2));
-
- // move focus label to left
- if (xCoordinate >= this._width() / 2) {
- this._focuslabelrect.attr("x", this._focuslabelrect.attr("x") - this._focuslabelrect.attr("width") - (padding * 2) - 10);
- this._focuslabelX.attr("x", this._focuslabelX.attr("x") - this._focuslabelrect.attr("width") - (padding * 2) - 10);
- this._focuslabelY.attr("x", this._focuslabelY.attr("x") - this._focuslabelrect.attr("width") - (padding * 2) - 10);
- }
- }
-
- },
-
- _toggle: function() {
- if (L.DomUtil.hasClass(this._container, "elevation-expanded"))
- this._collapse();
- else
- this._expand();
- },
-
- _setMapView: function(item) {
- if (!this.options.followMarker || !this._map) return;
- var zoom = this._map.getZoom();
- zoom = zoom < this._zFollow ? this._zFollow : zoom;
- this._map.setView(item.latlng, zoom, { animate: true, duration: 0.25 });
- },
-
- _showPositionMarker: function(item) {
- this._selectedItem = item;
-
- if (this._map && !this._map.getPane('elevationPane')) {
- this._map.createPane('elevationPane');
- this._map.getPane('elevationPane').style.zIndex = 625; // This pane is above markers but below popups.
- this._map.getPane('elevationPane').style.pointerEvents = 'none';
- }
-
- if (this.options.marker == 'elevation-line') {
- this._updatePositionMarker(item);
- } else if (this.options.marker == 'position-marker') {
- this._updateLeafletMarker(item);
- }
- },
-
- _updateAxis: function() {
- this._grid.selectAll("g").remove();
- this._axis.selectAll("g").remove();
- this._appendXGrid(this._grid);
- this._appendYGrid(this._grid);
- this._appendXaxis(this._axis);
- this._appendYaxis(this._axis);
- },
-
- _updateHeightIndicator: function(item) {
- var opts = this.options;
-
- var numY = opts.hoverNumber.formatter(item.z, opts.hoverNumber.decimalsY),
- numX = opts.hoverNumber.formatter(item.dist, opts.hoverNumber.decimalsX);
-
- var normalizedAlt = this._height() / this._maxElevation * item.z,
- normalizedY = item.y - normalizedAlt;
-
- this._mouseHeightFocus
- .attr("x1", item.x)
- .attr("x2", item.x)
- .attr("y1", item.y)
- .attr("y2", normalizedY)
- .style("visibility", "visible");
-
- this._mouseHeightFocusLabel
- .attr("x", item.x)
- .attr("y", normalizedY)
- .text(numY + " " + this._yLabel)
- .style("visibility", "visible");
- },
-
- _updateLeafletMarker: function(item) {
- var ll = item.latlng;
-
- if (!this._marker) {
- this._marker = new L.Marker(ll, {
- icon: this.options.markerIcon,
- zIndexOffset: 1000000,
- });
- this._marker.addTo(this._map, {
- pane: 'elevationPane',
- });
- } else {
- this._marker.setLatLng(ll);
- }
- },
-
- _updatePointG: function(item) {
- this._pointG
- .attr("transform", "translate(" + item.x + "," + item.y + ")")
- .style("visibility", "visible");
- },
-
- _updatePositionMarker: function(item) {
- var point = this._map.latLngToLayerPoint(item.latlng);
- var layerpoint = {
- dist: item.dist,
- x: point.x,
- y: point.y,
- z: item.z,
- };
-
- if (!this._mouseHeightFocus) {
- L.svg({ pane: "elevationPane" }).addTo(this._map); // default leaflet svg renderer
- var layerpane = d3.select(this._map.getContainer()).select(".leaflet-elevation-pane svg");
- this._appendPositionMarker(layerpane);
- }
-
- this._updatePointG(layerpoint);
- this._updateHeightIndicator(layerpoint);
- },
-
- _updateSummary: function() {
- if (this.options.summary && this.summaryDiv) {
- this.track_info = this.track_info || {};
- this.track_info.distance = this._distance || 0;
- this.track_info.elevation_max = this._maxElevation || 0;
- this.track_info.elevation_min = this._minElevation || 0;
- d3.select(this.summaryDiv).html('Total Length: ' + this.track_info.distance.toFixed(2) + ' ' + this._xLabel + 'Max Elevation: ' + this.track_info.elevation_max.toFixed(2) + ' ' + this._yLabel + 'Min Elevation: ' + this.track_info.elevation_min.toFixed(2) + ' ' + this._yLabel + '');
- }
- if (this.options.downloadLink && this._downloadURL) { // TODO: generate dynamically file content instead of using static file urls.
- var span = document.createElement('span');
- span.className = 'download';
- var save = document.createElement('a');
- save.innerHTML = "Download";
- save.href = "#";
- save.onclick = function(e) {
- e.preventDefault();
- var evt = { confirm: this._saveFile.bind(this, this._downloadURL) };
- var type = this.options.downloadLink;
- if (type == 'modal') {
- if (typeof CustomEvent === "function") document.dispatchEvent(new CustomEvent("eletrack_download", { detail: evt }));
- if (this.fire) this.fire('eletrack_download', evt);
- if (this._map) this._map.fire('eletrack_download', evt);
- } else if (type == 'link' || type === true) {
- evt.confirm();
- }
- }.bind(this);
-
- this.summaryDiv.appendChild(span).appendChild(save);
- }
- },
-
- _width: function() {
- var opts = this.options;
- return opts.width - opts.margins.left - opts.margins.right;
- },
-
-});
-
-L.control.elevation = function(options) {
- return new L.Control.Elevation(options);
-};
diff --git a/assets/js/leaflet.extra-markers.js.map b/assets/js/leaflet.extra-markers.js.map
deleted file mode 100755
index 05faeeb..0000000
--- a/assets/js/leaflet.extra-markers.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":null,"sources":["/Users/cory/Projects/Leaflet.ExtraMarkers/src/assets/js/leaflet.extra-markers.js"],"sourcesContent":["export var ExtraMarkers = L.ExtraMarkers = {};\nExtraMarkers.version = L.ExtraMarkers.version = \"1.2.1\";\nExtraMarkers.Icon = L.ExtraMarkers.Icon = L.Icon.extend({\n options: {\n iconSize: [ 35, 45 ],\n iconAnchor: [ 17, 42 ],\n popupAnchor: [ 1, -32 ],\n shadowAnchor: [ 10, 12 ],\n shadowSize: [ 36, 16 ],\n className: \"\",\n prefix: \"\",\n extraClasses: \"\",\n shape: \"circle\",\n icon: \"\",\n innerHTML: \"\",\n markerColor: \"red\",\n svgBorderColor: \"#fff\",\n svgOpacity: 1,\n iconColor: \"#fff\",\n iconRotate: 0,\n number: \"\",\n svg: false\n },\n initialize: function(options) {\n options = L.Util.setOptions(this, options);\n },\n createIcon: function() {\n var div = document.createElement(\"div\"), options = this.options;\n if (options.icon) {\n div.innerHTML = this._createInner();\n }\n if (options.innerHTML) {\n div.innerHTML = options.innerHTML;\n }\n if (options.bgPos) {\n div.style.backgroundPosition = -options.bgPos.x + \"px \" + -options.bgPos.y + \"px\";\n }\n if (!options.svg) {\n this._setIconStyles(div, options.shape + \"-\" + options.markerColor);\n } else {\n this._setIconStyles(div, \"svg\");\n }\n return div;\n },\n _getColorHex: function (color) {\n var colorMap = {\n red: \"#a23337\",\n \"orange-dark\": \"#d73e29\",\n orange: \"#ef9227\",\n yellow: \"#f5bb39\",\n \"blue-dark\": \"#276273\",\n cyan: \"#32a9dd\",\n purple: \"#440444\",\n violet: \"#90278d\",\n pink: \"#c057a0\",\n green: \"#006838\",\n white: \"#e8e8e8\",\n black: \"#211c1d\"\n };\n return colorMap[color] || color;\n },\n _createSvg: function (shape, markerColor) {\n var svgMap = {\n circle: '',\n square: '',\n star: '',\n penta: ''\n };\n return svgMap[shape];\n },\n _createInner: function() {\n var iconStyle = \"\", iconNumber = \"\", iconClass = \"\", result = \"\", options = this.options;\n if (options.iconColor) {\n iconStyle = \"color: \" + options.iconColor + \";\";\n }\n if (options.iconRotate !== 0) {\n iconStyle += \"-webkit-transform: rotate(\" + options.iconRotate + \"deg);\";\n iconStyle += \"-moz-transform: rotate(\" + options.iconRotate + \"deg);\";\n iconStyle += \"-o-transform: rotate(\" + options.iconRotate + \"deg);\";\n iconStyle += \"-ms-transform: rotate(\" + options.iconRotate + \"deg);\";\n iconStyle += \"transform: rotate(\" + options.iconRotate + \"deg);\";\n }\n if (options.number) {\n iconNumber = 'number=\"' + options.number + '\" ';\n }\n if (options.extraClasses.length) {\n iconClass += options.extraClasses + \" \";\n }\n if (options.prefix.length) {\n iconClass += options.prefix + \" \";\n }\n if (options.icon.length) {\n iconClass += options.icon + \" \";\n }\n if (options.svg) {\n result += this._createSvg(options.shape, this._getColorHex(options.markerColor));\n }\n result += '';\n return result;\n },\n _setIconStyles: function(img, name) {\n var options = this.options, size = L.point(options[name === \"shadow\" ? \"shadowSize\" : \"iconSize\"]), anchor, leafletName;\n if (name === \"shadow\") {\n anchor = L.point(options.shadowAnchor || options.iconAnchor);\n leafletName = \"shadow\";\n } else {\n anchor = L.point(options.iconAnchor);\n leafletName = \"icon\";\n }\n if (!anchor && size) {\n anchor = size.divideBy(2, true);\n }\n img.className = \"leaflet-marker-\" + leafletName + \" extra-marker extra-marker-\" + name + \" \" + options.className;\n if (anchor) {\n img.style.marginLeft = -anchor.x + \"px\";\n img.style.marginTop = -anchor.y + \"px\";\n }\n if (size) {\n img.style.width = size.x + \"px\";\n img.style.height = size.y + \"px\";\n }\n },\n createShadow: function() {\n var div = document.createElement(\"div\");\n this._setIconStyles(div, \"shadow\");\n return div;\n }\n});\nExtraMarkers.icon = L.ExtraMarkers.icon = function(options) {\n return new L.ExtraMarkers.Icon(options);\n};"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/assets/js/leaflet.extra-markers.min.js b/assets/js/leaflet.extra-markers.min.js
deleted file mode 100755
index 5b30f12..0000000
--- a/assets/js/leaflet.extra-markers.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*!
- * leaflet-extra-markers
- * Custom Markers for Leaflet JS based on Awesome Markers
- * Leaflet ExtraMarkers
- * https://github.com/coryasilva/Leaflet.ExtraMarkers/
- * @author coryasilva
- * @version 1.2.1
- */
-
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e.leaflet=e.leaflet||{},e.leaflet["extra-markers"]={}))}(this,function(e){"use strict";var t=L.ExtraMarkers={};t.version=L.ExtraMarkers.version="1.2.1",t.Icon=L.ExtraMarkers.Icon=L.Icon.extend({options:{iconSize:[35,45],iconAnchor:[17,42],popupAnchor:[1,-32],shadowAnchor:[10,12],shadowSize:[36,16],className:"",prefix:"",extraClasses:"",shape:"circle",icon:"",innerHTML:"",markerColor:"red",svgBorderColor:"#fff",svgOpacity:1,iconColor:"#fff",iconRotate:0,number:"",svg:!1},initialize:function(e){e=L.Util.setOptions(this,e)},createIcon:function(){var e=document.createElement("div"),t=this.options;return t.icon&&(e.innerHTML=this._createInner()),t.innerHTML&&(e.innerHTML=t.innerHTML),t.bgPos&&(e.style.backgroundPosition=-t.bgPos.x+"px "+-t.bgPos.y+"px"),t.svg?this._setIconStyles(e,"svg"):this._setIconStyles(e,t.shape+"-"+t.markerColor),e},_getColorHex:function(e){return{red:"#a23337","orange-dark":"#d73e29",orange:"#ef9227",yellow:"#f5bb39","blue-dark":"#276273",cyan:"#32a9dd",purple:"#440444",violet:"#90278d",pink:"#c057a0",green:"#006838",white:"#e8e8e8",black:"#211c1d"}[e]||e},_createSvg:function(e,t){return{circle:'',square:'',star:'',penta:''}[e]},_createInner:function(){var e="",t="",o="",r="",a=this.options;return a.iconColor&&(e="color: "+a.iconColor+";"),0!==a.iconRotate&&(e+="-webkit-transform: rotate("+a.iconRotate+"deg);",e+="-moz-transform: rotate("+a.iconRotate+"deg);",e+="-o-transform: rotate("+a.iconRotate+"deg);",e+="-ms-transform: rotate("+a.iconRotate+"deg);",e+="transform: rotate("+a.iconRotate+"deg);"),a.number&&(t='number="'+a.number+'" '),a.extraClasses.length&&(o+=a.extraClasses+" "),a.prefix.length&&(o+=a.prefix+" "),a.icon.length&&(o+=a.icon+" "),a.svg&&(r+=this._createSvg(a.shape,this._getColorHex(a.markerColor))),r+="'},_setIconStyles:function(e,t){var o,r,a=this.options,n=L.point(a["shadow"===t?"shadowSize":"iconSize"]);r="shadow"===t?(o=L.point(a.shadowAnchor||a.iconAnchor),"shadow"):(o=L.point(a.iconAnchor),"icon"),!o&&n&&(o=n.divideBy(2,!0)),e.className="leaflet-marker-"+r+" extra-marker extra-marker-"+t+" "+a.className,o&&(e.style.marginLeft=-o.x+"px",e.style.marginTop=-o.y+"px"),n&&(e.style.width=n.x+"px",e.style.height=n.y+"px")},createShadow:function(){var e=document.createElement("div");return this._setIconStyles(e,"shadow"),e}}),t.icon=L.ExtraMarkers.icon=function(e){return new L.ExtraMarkers.Icon(e)},e.ExtraMarkers=t,Object.defineProperty(e,"__esModule",{value:!0})});
\ No newline at end of file
diff --git a/assets/js/leaflet.hugo.js b/assets/js/leaflet.hugo.js
deleted file mode 100644
index 8326bbc..0000000
--- a/assets/js/leaflet.hugo.js
+++ /dev/null
@@ -1,108 +0,0 @@
-let leafletMapsObj = {};
-let leafletMarkersObj = {};
-
-function drawTrack(trackOpts, elevationOpts, markerOpts) {
- var opts = {
- elevationControl: {
- options: {
- position: elevationOpts.graphPosition,
- theme: elevationOpts.graphTheme,
- width: elevationOpts.graphWidth,
- height: elevationOpts.graphHeight,
- margins: {
- top: 20,
- right: 20,
- bottom: 35,
- left: 50
- },
- followMarker: elevationOpts.graphFollowMarker,
- collapsed: elevationOpts.graphCollapsed,
- detached: elevationOpts.graphDetached,
- legend: false,
- summary: false,
- downloadLink: '',
- gpxOptions: {
- polyline_options: {
- className: 'track-' + trackOpts.trackId + '-',
- color: trackOpts.lineColor,
- opacity: trackOpts.lineOpacity,
- weight: trackOpts.lineWeight,
- },
- marker_options: {
- startIcon: new L.ExtraMarkers.icon({
- icon: markerOpts.iconStart,
- markerColor: markerOpts.iconStartColor,
- shape: markerOpts.iconStartShape,
- prefix: 'fa',
- extraClasses: markerOpts.iconStartClasses
- }),
- endIcon: new L.ExtraMarkers.icon({
- icon: markerOpts.iconEnd,
- markerColor: markerOpts.iconEndColor,
- shape: markerOpts.iconEndShape,
- prefix: 'fa',
- extraClasses: markerOpts.iconEndClasses
- }),
- wptIcons: {
- '': new L.ExtraMarkers.icon({
- icon: markerOpts.icon,
- markerColor: markerOpts.iconColor,
- shape: markerOpts.iconShape,
- prefix: 'fa',
- extraClasses: markerOpts.iconClasses,
- })
- }
- }
- },
-
- },
- },
- };
-
- L.control.elevation(opts.elevationControl.options).addTo(leafletMapsObj[trackOpts.mapId]).load(trackOpts.trackPath);
-
- /*map.on('eledata_loaded', function(e) {
- track = e.track_info;
- });*/
-}
-
-window.downloadFile = function (sUrl) {
-
- //iOS devices do not support downloading. We have to inform user about this.
- if (/(iP)/g.test(navigator.userAgent)) {
- alert('Your device does not support files downloading. Please try again in desktop browser.');
- return false;
- }
-
- //If in Chrome or Safari - download via virtual link click
- if (window.downloadFile.isChrome || window.downloadFile.isSafari) {
- //Creating new link node.
- var link = document.createElement('a');
- link.href = sUrl;
-
- if (link.download !== undefined) {
- //Set HTML5 download attribute. This will prevent file from opening if supported.
- var fileName = sUrl.substring(sUrl.lastIndexOf('/') + 1, sUrl.length);
- link.download = fileName;
- }
-
- //Dispatching click event.
- if (document.createEvent) {
- var e = document.createEvent('MouseEvents');
- e.initEvent('click', true, true);
- link.dispatchEvent(e);
- return true;
- }
- }
-
- // Force file download (whether supported by server).
- if (sUrl.indexOf('?') === -1) {
- sUrl += '?download';
- }
-
- window.open(sUrl, '_self');
- return true;
-};
-
-window.downloadFile.isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
-window.downloadFile.isSafari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
diff --git a/content/dates/2021-08-06-FeriAin.md b/content/dates/2021-08-06-FeriAin.md
index a9117b8..914f026 100644
--- a/content/dates/2021-08-06-FeriAin.md
+++ b/content/dates/2021-08-06-FeriAin.md
@@ -2,10 +2,7 @@
type: "post"
title: "Feri'Ain des Fanfarons 2021 - Thoissey"
date: 2021-08-06T00:00:00+01:00
+latitude: "46.165350"
+longitude: "4.791313"
---
-### Map
-{{}}
- {{}}
-{{}}
-
diff --git a/content/dates/2021-12-12-PalaisDeJustice.md b/content/dates/2021-12-12-PalaisDeJustice.md
index e7b519f..3540d5a 100644
--- a/content/dates/2021-12-12-PalaisDeJustice.md
+++ b/content/dates/2021-12-12-PalaisDeJustice.md
@@ -2,9 +2,6 @@
type: "post"
title: "Passerelle du Palais de Justice - Lyon"
date: 2021-12-12T00:00:00+01:00
+latitude: "45.761727"
+longitude: "4.829074"
---
-
-### Map
-{{}}
- {{}}
-{{}}
diff --git a/content/dates/2022-04-15-PontUSSB-Balances.md b/content/dates/2022-04-15-PontUSSB-Balances.md
index acf6d0a..7a0868f 100644
--- a/content/dates/2022-04-15-PontUSSB-Balances.md
+++ b/content/dates/2022-04-15-PontUSSB-Balances.md
@@ -2,6 +2,8 @@
type: "post"
title: "Pont de l'Université - Lyon"
date: 2022-04-15T00:00:00+01:00
+latitude: "45.752182"
+longitude: "4.836530"
---
Balances Publiques en vue de l'Apéro Fanfare du 22 Avril 2022
@@ -12,9 +14,4 @@ Balances Publiques en vue de l'Apéro Fanfare du 22 Avril 2022
{{}}
### Vidéo
-{{