refactor(theme): trip.html.twig uses shared trip-feed-col partial + initTripStats
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BftDn9vu9SonFAY4vxu4uk
This commit is contained in:
@@ -67,57 +67,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="home-feed-col">
|
{% include 'partials/trip-feed-col.html.twig' with {
|
||||||
<div class="home-trip-header">
|
trip_page: page,
|
||||||
<h1 class="home-trip-name">{{ page.title }}</h1>
|
all_items: all_items,
|
||||||
{% if page.header.date_start %}
|
journal_entries: journal_entries,
|
||||||
<p class="trip-dates">
|
journal_count: journal_count,
|
||||||
{{ page.header.date_start|date('d M Y') }}
|
story_count: story_count,
|
||||||
{% if page.header.date_end %} — {{ page.header.date_end|date('d M Y') }}{% else %} — Ongoing{% endif %}
|
has_gpx: has_gpx,
|
||||||
</p>
|
gpx_urls: gpx_urls,
|
||||||
{% endif %}
|
gps_points: gps_points,
|
||||||
<span class="home-trip-counts">
|
show_sort: true,
|
||||||
{{ journal_count }} journal {{ journal_count == 1 ? 'entry' : 'entries' }}
|
pre_departure: false
|
||||||
{% if story_count > 0 %} · {{ story_count }} {{ story_count == 1 ? 'story' : 'stories' }}{% endif %}
|
} only %}
|
||||||
</span>
|
|
||||||
<div class="trip-filter-bar">
|
|
||||||
<div class="trip-filter-group">
|
|
||||||
<button class="trip-filter-btn is-active" data-filter="all" aria-pressed="true">All content</button>
|
|
||||||
<button class="trip-filter-btn" data-filter="journal" aria-pressed="false">Journal</button>
|
|
||||||
<button class="trip-filter-btn" data-filter="story" aria-pressed="false">Stories</button>
|
|
||||||
</div>
|
|
||||||
<button class="trip-stats-btn" id="trip-sort-toggle" aria-label="Sort: oldest first">↑</button>
|
|
||||||
</div>
|
|
||||||
<div class="trip-panel-toggles">
|
|
||||||
<button class="trip-panel-toggle" id="trip-stats-toggle" aria-expanded="false" aria-controls="trip-stats-block">Stats <span class="trip-panel-caret" aria-hidden="true">▾</span></button>
|
|
||||||
{% if has_gpx %}
|
|
||||||
<button class="trip-panel-toggle" id="trip-cycling-toggle" aria-expanded="false" aria-controls="trip-cycling-block">Cycling <span class="trip-panel-caret" aria-hidden="true">▾</span></button>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{ stats_m.stats_panel(journal_entries, page, journal_count, has_gpx) }}
|
|
||||||
|
|
||||||
{% if has_gpx %}
|
|
||||||
{{ cycling_m.cycling_panel() }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<div class="feed">
|
|
||||||
{% if all_items|length > 0 %}
|
|
||||||
{% for item in all_items %}
|
|
||||||
{% set entry = item.page %}
|
|
||||||
{% if item.type == 'journal' %}
|
|
||||||
{% include 'partials/entry-journal.html.twig' %}
|
|
||||||
{% else %}
|
|
||||||
{% include 'partials/entry-story.html.twig' %}
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
|
||||||
<p class="feed-empty">No entries yet. The journey is about to begin.</p>
|
|
||||||
{% endif %}
|
|
||||||
<p id="feed-filter-empty" class="feed-empty" style="display:none;"></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -210,44 +171,6 @@ setTimeout(function () { tripMap.resize(); }, 100);
|
|||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|
||||||
var STATS_GPS = {{ gps_points|json_encode|raw }};
|
|
||||||
var HAS_GPX = {{ has_gpx ? 'true' : 'false' }};
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var distEl = document.getElementById('stat-distance');
|
|
||||||
|
|
||||||
if (HAS_GPX) {
|
|
||||||
MapUtils.parseGpxFiles(GPX_URLS, function(result) {
|
|
||||||
if (distEl) {
|
|
||||||
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 {
|
|
||||||
var total = 0;
|
|
||||||
for (var i = 1; i < STATS_GPS.length; i++) {
|
|
||||||
total += MapUtils.haversineKm(
|
|
||||||
parseFloat(STATS_GPS[i-1][0]), parseFloat(STATS_GPS[i-1][1]),
|
|
||||||
parseFloat(STATS_GPS[i][0]), parseFloat(STATS_GPS[i][1])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (distEl) {
|
|
||||||
distEl.textContent = STATS_GPS.length < 2 ? '—' : '~' + Math.round(total).toLocaleString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
|
||||||
|
|
||||||
}); // DOMContentLoaded
|
}); // DOMContentLoaded
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user