UNPKG

simple-elevation-chart

Version:

Very simple SVG-based elevation chart

45 lines (42 loc) 1.34 kB
customElements.define( 'elevation-chart', class extends HTMLElement { constructor() { super() this.addEventListener('DataAvailable', this) } async handleEvent(event) { this.data = event.detail.data this.distance = this.data.reduce((acc, [ele, dist]) => acc + dist, 0) let prev this.gain = 0 this.loss = 0 for (const [ele, dist] of this.data) { if (prev !== undefined) { const diff = ele - prev if (diff > 0) { this.gain += diff } else { this.loss += diff } } prev = ele } this.innerHTML = ` <p> Distance : ${Math.round(this.distance / 1000, 1)} km • Gain: ${Math.round(this.gain, 0)} m ↗ • Loss: ${Math.round(this.loss, 0)} m ↘ • Altitude : <span id="altitude">0</span> meters </p> <object data="elevation.svg" data-elevation="${JSON.stringify(this.data)}" type="image/svg+xml"> ` const object = this.querySelector('object') object.addEventListener('chart:over', (event) => { const dataset = event.detail.element.dataset const [ele, dist] = this.data[dataset.index] || [0, 0] this.querySelector('#altitude').textContent = ele.toFixed(0) }) } }, )