Consolidate to single GraphQL call; show indirect trains; fix price formatting
Replace two-step Eurostar fetch (HTML timetable + GraphQL prices) with a single GraphQL call that returns timing, train numbers, prices, and seats. Support indirect services (e.g. Amsterdam) by joining multi-leg train numbers with ' + ' and keeping the earliest arrival per departure time. Fix half-pound prices by casting displayPrice to float instead of int. Wrap each train number segment in white-space:nowrap so 'ES 9132 + ER 9363' never breaks mid-segment. Format Eurostar prices with two decimal places. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
05eec29b7d
commit
c22a3ea0fc
5 changed files with 182 additions and 320 deletions
|
|
@ -159,7 +159,7 @@
|
|||
</td>
|
||||
<td style="padding:0.6rem 0.8rem;font-weight:600">
|
||||
{{ row.depart_st_pancras }}
|
||||
{% if row.train_number %}<br><span style="font-size:0.75rem;font-weight:400;color:#718096">{{ row.train_number }}</span>{% endif %}
|
||||
{% if row.train_number %}<br><span style="font-size:0.75rem;font-weight:400;color:#718096">{% for part in row.train_number.split(' + ') %}<span style="white-space:nowrap">{{ part }}</span>{% if not loop.last %} + {% endif %}{% endfor %}</span>{% endif %}
|
||||
</td>
|
||||
<td style="padding:0.6rem 0.8rem">
|
||||
{{ row.arrive_destination }}
|
||||
|
|
@ -168,7 +168,7 @@
|
|||
</td>
|
||||
<td style="padding:0.6rem 0.8rem;white-space:nowrap">
|
||||
{% if row.eurostar_price is not none %}
|
||||
£{{ row.eurostar_price }}
|
||||
£{{ "%.2f"|format(row.eurostar_price) }}
|
||||
{% if row.eurostar_seats is not none %}
|
||||
<br><span style="font-size:0.75rem;color:#718096">{{ row.eurostar_seats }} at this price</span>
|
||||
{% endif %}
|
||||
|
|
@ -195,7 +195,7 @@
|
|||
<td style="padding:0.6rem 0.8rem">n/a</td>
|
||||
<td style="padding:0.6rem 0.8rem;font-weight:600">
|
||||
{{ row.depart_st_pancras }}
|
||||
{% if row.train_number %}<br><span style="font-size:0.75rem;font-weight:400;color:#a0aec0">{{ row.train_number }}</span>{% endif %}
|
||||
{% if row.train_number %}<br><span style="font-size:0.75rem;font-weight:400;color:#a0aec0">{% for part in row.train_number.split(' + ') %}<span style="white-space:nowrap">{{ part }}</span>{% if not loop.last %} + {% endif %}{% endfor %}</span>{% endif %}
|
||||
</td>
|
||||
<td style="padding:0.6rem 0.8rem">
|
||||
{{ row.arrive_destination }}
|
||||
|
|
@ -204,7 +204,7 @@
|
|||
</td>
|
||||
<td style="padding:0.6rem 0.8rem;white-space:nowrap">
|
||||
{% if row.eurostar_price is not none %}
|
||||
<span style="color:#a0aec0">£{{ row.eurostar_price }}</span>
|
||||
<span style="color:#a0aec0">£{{ "%.2f"|format(row.eurostar_price) }}</span>
|
||||
{% if row.eurostar_seats is not none %}
|
||||
<br><span style="font-size:0.75rem;color:#a0aec0">{{ row.eurostar_seats }} at this price</span>
|
||||
{% endif %}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue