diff --git a/themes/intotheeast/templates/trip.html.twig b/themes/intotheeast/templates/trip.html.twig index 4fa58a0..7c02163 100644 --- a/themes/intotheeast/templates/trip.html.twig +++ b/themes/intotheeast/templates/trip.html.twig @@ -405,35 +405,42 @@ function haversineKm(lat1, lng1, lat2, lng2) { function parseGpxFiles(urls, callback) { var pending = urls.length; - var masterPts = []; + var fileResults = new Array(urls.length); if (pending === 0) { callback({ error: 'no files' }); return; } - urls.forEach(function(url) { + urls.forEach(function(url, idx) { fetch(url) .then(function(r) { return r.text(); }) .then(function(text) { var xml = new DOMParser().parseFromString(text, 'text/xml'); var trkpts = xml.querySelectorAll('trkpt'); + var pts = []; trkpts.forEach(function(pt) { var eleEl = pt.querySelector('ele'); var timeEl = pt.querySelector('time'); - masterPts.push({ + pts.push({ lat: parseFloat(pt.getAttribute('lat')), lon: parseFloat(pt.getAttribute('lon')), ele: eleEl ? parseFloat(eleEl.textContent) : NaN, time: timeEl ? timeEl.textContent : null }); }); + fileResults[idx] = pts; pending--; if (pending === 0) { computeAndCallback(); } }) .catch(function(err) { console.warn('GPX load failed:', url, err); + fileResults[idx] = []; pending--; if (pending === 0) { computeAndCallback(); } }); }); function computeAndCallback() { + var masterPts = []; + fileResults.forEach(function(pts) { + if (pts) { pts.forEach(function(p) { masterPts.push(p); }); } + }); var n = masterPts.length; if (n < 2) { callback({ distance: 0 }); return; } var distance = 0, eleGain = 0, eleLoss = 0;