feat(theme): add shared initTripStats() for trip+home stats panels
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
This commit is contained in:
@@ -238,6 +238,49 @@ function initPanelToggles() {
|
||||
});
|
||||
}
|
||||
|
||||
/* ── Trip stats / cycling computation (trip + home-active) ───
|
||||
config: { gpxUrls: [], gpsPoints: [[lat,lng],...], hasGpx: bool }
|
||||
No-op if #stat-distance is absent (page rendered no stats panel).
|
||||
No-GPX fallback: if gpsPoints.length < 2, write '—' and return (no '~0'). */
|
||||
function initTripStats(config) {
|
||||
var distEl = document.getElementById('stat-distance');
|
||||
if (!distEl) return;
|
||||
|
||||
var gpxUrls = config.gpxUrls || [];
|
||||
var gpsPoints = config.gpsPoints || [];
|
||||
|
||||
if (config.hasGpx) {
|
||||
MapUtils.parseGpxFiles(gpxUrls, function (result) {
|
||||
distEl.textContent = result.distance > 0 ? Math.round(result.distance).toLocaleString() : '—';
|
||||
function setText(id, val) {
|
||||
var el = document.getElementById(id);
|
||||
if (el) el.textContent = val;
|
||||
}
|
||||
setText('cyc-distance', result.distance > 0 ? Math.round(result.distance).toLocaleString() : '—');
|
||||
setText('cyc-ele-gain', !isNaN(result.eleGain) ? Math.round(result.eleGain) : '—');
|
||||
setText('cyc-ele-loss', !isNaN(result.eleLoss) ? Math.round(result.eleLoss) : '—');
|
||||
setText('cyc-highest', !isNaN(result.highest) ? Math.round(result.highest) : '—');
|
||||
setText('cyc-lowest', !isNaN(result.lowest) ? Math.round(result.lowest) : '—');
|
||||
setText('cyc-moving-time', result.movingTime || '—');
|
||||
setText('cyc-avg-speed', result.avgSpeed > 0 ? result.avgSpeed.toFixed(1) : '—');
|
||||
});
|
||||
} else {
|
||||
if (gpsPoints.length < 2) {
|
||||
distEl.textContent = '—';
|
||||
return;
|
||||
}
|
||||
var total = 0;
|
||||
for (var i = 1; i < gpsPoints.length; i++) {
|
||||
total += MapUtils.haversineKm(
|
||||
parseFloat(gpsPoints[i-1][0]), parseFloat(gpsPoints[i-1][1]),
|
||||
parseFloat(gpsPoints[i][0]), parseFloat(gpsPoints[i][1])
|
||||
);
|
||||
}
|
||||
distEl.textContent = '~' + Math.round(total).toLocaleString();
|
||||
}
|
||||
}
|
||||
window.initTripStats = initTripStats;
|
||||
|
||||
/* ── Boot ────────────────────────────────────────────────── */
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
initPhotoStrip();
|
||||
|
||||
Reference in New Issue
Block a user