mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
fix(roadtrip): the hotel at the edge of a day stands, drives and reads right
A hotel row now takes its position and name from the trip's place instead of the stay row, which the planner fetches again only when a stay is edited. A moved pin no longer seats the hotel at its old spot while the server plans from the new one. The drive out of the morning hotel goes the way the first place is reached from it, the mode Days draws that leg in, and it is set in the shared rule so the browser and calculate_roadtrip agree. On the rail, a hotel row that took in the morning marker starts the line. A day that only drives from one stay to the next shows no stop count and takes a dropped stop as its first. The hotel keeps its pin on the desktop map, and the switch explains itself under its label and to screen readers. On the phone, the note about figures set on the desktop now sits above the switch it does not cover. The hint and the refusal on the hotel's drive say what they mean in all 23 languages. The via tools and the wiki say that a via into a booked night is kept but not used, the wiki states the overlap rule Days applies, and the arrived-from branch of the via anchor has tests.
This commit is contained in:
@@ -115,7 +115,8 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.dayColors': 'لون لكل يوم',
|
||||
'roadtrip.line.hint': 'يحسب أيضًا المسافة بين يومين ويحتسبها على يوم الوصول.',
|
||||
'roadtrip.line.hotelBookends': 'ابدأ كل يوم وأنهِه في مكان إقامتك',
|
||||
'roadtrip.line.hotelBookendsHint': 'بعد ليلة محجوزة يبدأ اليوم حيث نمت، وقبل ليلة محجوزة ينتهي هناك.',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'بعد ليلة محجوزة يبدأ اليوم من مكان الإقامة ذاك، وقبل ليلة محجوزة ينتهي في مكان الإقامة المحجوز لتلك الليلة.',
|
||||
'roadtrip.avoid.section': 'التجنب قدر الإمكان',
|
||||
'roadtrip.avoid.toll': 'الطرق ذات الرسوم',
|
||||
'roadtrip.avoid.motorway': 'الطرق السريعة',
|
||||
@@ -289,6 +290,6 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'من {name}',
|
||||
'roadtrip.bookend.back': 'العودة إلى {name}',
|
||||
'roadtrip.bookend.checkIn': 'تسجيل الوصول · {name}',
|
||||
'roadtrip.bookend.noVia': 'يبقى الطريق من مكان إقامتك وإليه كما هو.',
|
||||
'roadtrip.bookend.noVia': 'لا يمكن وضع نقطة عبور على الطريق من مكان إقامتك أو إليه. أضف توقفاً هناك بدلاً من ذلك.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -117,7 +117,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Também calcula o trecho entre dois dias e conta no dia de chegada.',
|
||||
'roadtrip.line.hotelBookends': 'Começar e terminar cada dia na hospedagem',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Depois de uma noite reservada, o dia começa onde você dormiu, e antes de uma ele termina lá.',
|
||||
'Depois de uma noite reservada, o dia começa nessa hospedagem, e antes de uma ele termina na hospedagem reservada para aquela noite.',
|
||||
'roadtrip.avoid.section': 'Evitar quando possível',
|
||||
'roadtrip.avoid.toll': 'Pedágios',
|
||||
'roadtrip.avoid.motorway': 'Rodovias',
|
||||
@@ -296,6 +296,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Saindo de {name}',
|
||||
'roadtrip.bookend.back': 'Volta para {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'O trajeto de ida e volta da sua hospedagem mantém o próprio caminho.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Não dá para colocar um ponto de passagem no trajeto de ida ou volta da sua hospedagem. Adicione uma parada ali.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'També calcula el tram entre dos dies i el compta al dia d’arribada.',
|
||||
'roadtrip.line.hotelBookends': 'Comença i acaba cada dia a l’allotjament',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Després d’una nit reservada, el dia comença on has dormit, i abans d’una acaba allà.',
|
||||
'Després d’una nit reservada, el dia comença en aquest allotjament, i abans d’una acaba a l’allotjament reservat per a aquella nit.',
|
||||
'roadtrip.avoid.section': 'Evita quan sigui possible',
|
||||
'roadtrip.avoid.toll': 'Peatges',
|
||||
'roadtrip.avoid.motorway': 'Autopistes',
|
||||
@@ -299,6 +299,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Des de {name}',
|
||||
'roadtrip.bookend.back': 'Tornada a {name}',
|
||||
'roadtrip.bookend.checkIn': 'Entrada · {name}',
|
||||
'roadtrip.bookend.noVia': 'El trajecte des del teu allotjament o fins a ell manté la seva ruta.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'No es pot posar cap punt de pas al trajecte fins al teu allotjament o des d’ell. Afegeix-hi una parada.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -116,7 +116,8 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.dayColors': 'Barva na den',
|
||||
'roadtrip.line.hint': 'Spočítá i úsek mezi dvěma dny a připočte ho ke dni příjezdu.',
|
||||
'roadtrip.line.hotelBookends': 'Začínat a končit každý den v ubytování',
|
||||
'roadtrip.line.hotelBookendsHint': 'Po zarezervované noci začíná den tam, kde jste spali, a před ní tam končí.',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Po zarezervované noci začíná den v tomto ubytování a před ní končí v ubytování zarezervovaném na tu noc.',
|
||||
'roadtrip.avoid.section': 'Vyhnout se, pokud to jde',
|
||||
'roadtrip.avoid.toll': 'Mýtné silnice',
|
||||
'roadtrip.avoid.motorway': 'Dálnice',
|
||||
@@ -292,6 +293,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Z ubytování {name}',
|
||||
'roadtrip.bookend.back': 'Zpět do ubytování {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'Trasa z vašeho ubytování a do něj zůstává beze změny.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Na trasu do ubytování ani z něj nelze přidat průjezdní bod. Přidejte tam místo toho zastávku.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -116,7 +116,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Verbindungsfahrten zählen zum Ankunftstag.',
|
||||
'roadtrip.line.hotelBookends': 'Jeden Tag an der Unterkunft beginnen und beenden',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Nach einer gebuchten Nacht beginnt der Tag dort, wo du geschlafen hast, und vor einer endet er dort.',
|
||||
'Nach einer gebuchten Nacht beginnt der Tag an dieser Unterkunft, vor einer endet er an der Unterkunft dieser Nacht.',
|
||||
'roadtrip.avoid.section': 'Möglichst meiden',
|
||||
'roadtrip.avoid.toll': 'Mautstraßen',
|
||||
'roadtrip.avoid.motorway': 'Autobahnen',
|
||||
@@ -293,6 +293,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Ab {name}',
|
||||
'roadtrip.bookend.back': 'Zurück zu {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'Die Fahrt von und zu deiner Unterkunft behält ihre Strecke.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Auf der Fahrt zur oder von der Unterkunft geht kein Zwischenpunkt. Füge dort stattdessen einen Stopp hinzu.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -116,7 +116,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Connecting drives count toward the arrival day.',
|
||||
'roadtrip.line.hotelBookends': 'Start and end each day at your stay',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'After a booked night the day starts where you slept, and before one it ends there.',
|
||||
'After a booked night the day starts at that stay, and before one it ends at the stay booked for that night.',
|
||||
'roadtrip.avoid.section': 'Avoid where possible',
|
||||
'roadtrip.avoid.toll': 'Toll roads',
|
||||
'roadtrip.avoid.motorway': 'Motorways',
|
||||
@@ -290,6 +290,6 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'From {name}',
|
||||
'roadtrip.bookend.back': 'Back to {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'The drive from or to your stay keeps its road.',
|
||||
'roadtrip.bookend.noVia': 'No via point on the drive to or from your stay. Add a stop there instead.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'También calcula el tramo entre dos días y lo cuenta en el día de llegada.',
|
||||
'roadtrip.line.hotelBookends': 'Empezar y terminar cada día en tu alojamiento',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Tras una noche reservada, el día empieza donde dormiste, y antes de una termina allí.',
|
||||
'Tras una noche reservada, el día empieza en ese alojamiento, y antes de una termina en el alojamiento reservado para esa noche.',
|
||||
'roadtrip.avoid.section': 'Evitar si es posible',
|
||||
'roadtrip.avoid.toll': 'Peajes',
|
||||
'roadtrip.avoid.motorway': 'Autopistas',
|
||||
@@ -297,6 +297,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Desde {name}',
|
||||
'roadtrip.bookend.back': 'Vuelta a {name}',
|
||||
'roadtrip.bookend.checkIn': 'Entrada · {name}',
|
||||
'roadtrip.bookend.noVia': 'El trayecto desde tu alojamiento o hasta él mantiene su ruta.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'No se puede poner un punto de paso en el trayecto hacia tu alojamiento o desde él. Añade una parada allí.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -119,7 +119,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Calcule aussi le trajet entre deux jours et le compte au jour d’arrivée.',
|
||||
'roadtrip.line.hotelBookends': 'Commencer et finir chaque jour à votre hébergement',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Après une nuit réservée, la journée commence là où vous avez dormi, et avant une nuit réservée, elle s’y termine.',
|
||||
'Après une nuit réservée, la journée commence à cet hébergement, et avant une nuit réservée, elle se termine à l’hébergement réservé pour cette nuit.',
|
||||
'roadtrip.avoid.section': 'Éviter si possible',
|
||||
'roadtrip.avoid.toll': 'Routes à péage',
|
||||
'roadtrip.avoid.motorway': 'Autoroutes',
|
||||
@@ -299,6 +299,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Depuis {name}',
|
||||
'roadtrip.bookend.back': 'Retour à {name}',
|
||||
'roadtrip.bookend.checkIn': 'Arrivée · {name}',
|
||||
'roadtrip.bookend.noVia': 'Le trajet depuis ou vers votre hébergement garde son itinéraire.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Pas de point de passage sur le trajet vers ou depuis votre hébergement. Ajoutez plutôt un arrêt à cet endroit.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -120,7 +120,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Υπολογίζει και το τμήμα ανάμεσα σε δύο ημέρες, στην ημέρα άφιξης.',
|
||||
'roadtrip.line.hotelBookends': 'Έναρξη και λήξη κάθε ημέρας στο κατάλυμα',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Μετά από μια κρατημένη νύχτα η ημέρα ξεκινά εκεί όπου κοιμηθήκατε, και πριν από μία τελειώνει εκεί.',
|
||||
'Μετά από μια κρατημένη νύχτα η ημέρα ξεκινά από εκείνο το κατάλυμα, και πριν από μία τελειώνει στο κατάλυμα που έχει κρατηθεί για εκείνη τη νύχτα.',
|
||||
'roadtrip.avoid.section': 'Αποφυγή όπου γίνεται',
|
||||
'roadtrip.avoid.toll': 'Δρόμοι με διόδια',
|
||||
'roadtrip.avoid.motorway': 'Αυτοκινητόδρομοι',
|
||||
@@ -301,6 +301,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Από {name}',
|
||||
'roadtrip.bookend.back': 'Επιστροφή: {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'Η διαδρομή προς και από το κατάλυμα διατηρεί τον δρόμο της.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Δεν μπαίνει ενδιάμεσο σημείο στη διαδρομή προς ή από το κατάλυμα. Προσθέστε εκεί μια στάση.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'A két nap közti szakaszt is kiszámolja, és az érkezés napjához adja.',
|
||||
'roadtrip.line.hotelBookends': 'Minden nap a szálláson kezdődjön és érjen véget',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Egy lefoglalt éjszaka után a nap ott kezdődik, ahol aludtál, egy lefoglalt éjszaka előtt pedig ott ér véget.',
|
||||
'Egy lefoglalt éjszaka után a nap annál a szállásnál kezdődik, egy lefoglalt éjszaka előtt pedig az arra az éjszakára foglalt szállásnál ér véget.',
|
||||
'roadtrip.avoid.section': 'Kerülés, ha lehet',
|
||||
'roadtrip.avoid.toll': 'Fizetős utak',
|
||||
'roadtrip.avoid.motorway': 'Autópályák',
|
||||
@@ -295,6 +295,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Indulás: {name}',
|
||||
'roadtrip.bookend.back': 'Vissza: {name}',
|
||||
'roadtrip.bookend.checkIn': 'Bejelentkezés · {name}',
|
||||
'roadtrip.bookend.noVia': 'A szálláshoz vezető és onnan induló út útvonala nem változik.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'A szálláshoz vezető vagy onnan induló útra nem kerülhet köztes pont. Adj hozzá inkább egy megállót ott.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Juga menghitung ruas antara dua hari dan memasukkannya ke hari kedatangan.',
|
||||
'roadtrip.line.hotelBookends': 'Mulai dan akhiri setiap hari di penginapan Anda',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Setelah malam yang dipesan, hari dimulai di tempat Anda menginap, dan sebelum malam yang dipesan, hari berakhir di sana.',
|
||||
'Setelah malam yang dipesan, hari dimulai di penginapan itu, dan sebelum malam yang dipesan, hari berakhir di penginapan yang dipesan untuk malam itu.',
|
||||
'roadtrip.avoid.section': 'Hindari bila bisa',
|
||||
'roadtrip.avoid.toll': 'Jalan tol',
|
||||
'roadtrip.avoid.motorway': 'Jalan bebas hambatan',
|
||||
@@ -298,6 +298,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Dari {name}',
|
||||
'roadtrip.bookend.back': 'Kembali ke {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'Perjalanan dari dan ke penginapan Anda tetap pada jalurnya.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Titik lintas tidak bisa ditaruh di perjalanan ke atau dari penginapan Anda. Tambahkan perhentian di sana.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Calcola anche il tratto tra due giorni e lo conta nel giorno di arrivo.',
|
||||
'roadtrip.line.hotelBookends': 'Inizia e termina ogni giorno al tuo alloggio',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Dopo una notte prenotata la giornata parte da dove hai dormito, e prima di una finisce lì.',
|
||||
'Dopo una notte prenotata la giornata parte da quell’alloggio, e prima di una finisce all’alloggio prenotato per quella notte.',
|
||||
'roadtrip.avoid.section': 'Evita se possibile',
|
||||
'roadtrip.avoid.toll': 'Strade a pedaggio',
|
||||
'roadtrip.avoid.motorway': 'Autostrade',
|
||||
@@ -298,6 +298,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Da {name}',
|
||||
'roadtrip.bookend.back': 'Ritorno a {name}',
|
||||
'roadtrip.bookend.checkIn': 'Check-in · {name}',
|
||||
'roadtrip.bookend.noVia': 'Il tragitto da e verso il tuo alloggio mantiene il suo percorso.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Nessun punto di passaggio sul tragitto verso o dal tuo alloggio. Aggiungi invece una sosta in quel punto.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -117,7 +117,8 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.dayColors': '日ごとに色を分ける',
|
||||
'roadtrip.line.hint': '日と日の間の区間も計算し、到着した日に加えます。',
|
||||
'roadtrip.line.hotelBookends': '毎日を宿泊先で始めて宿泊先で終える',
|
||||
'roadtrip.line.hotelBookendsHint': '予約した夜の翌日は泊まった宿から始まり、予約した夜の日はその宿で終わります。',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'予約した夜の翌日はその宿から始まり、予約した夜の日はその夜に予約した宿で終わります。',
|
||||
'roadtrip.avoid.section': 'できるだけ避ける',
|
||||
'roadtrip.avoid.toll': '有料道路',
|
||||
'roadtrip.avoid.motorway': '高速道路',
|
||||
@@ -291,6 +292,6 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': '{name}から',
|
||||
'roadtrip.bookend.back': '{name}へ戻る',
|
||||
'roadtrip.bookend.checkIn': 'チェックイン · {name}',
|
||||
'roadtrip.bookend.noVia': '宿泊先との間の区間は、今のルートのままになります。',
|
||||
'roadtrip.bookend.noVia': '宿泊先との間の区間には経由地を置けません。代わりにそこへ立ち寄り先を追加してください。',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -117,7 +117,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': '두 날 사이 구간도 계산해 도착한 날에 더합니다.',
|
||||
'roadtrip.line.hotelBookends': '매일 숙소에서 시작하고 숙소에서 끝내기',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'예약한 밤 다음 날은 묵은 곳에서 시작하고, 예약한 밤이 있는 날은 그곳에서 끝납니다.',
|
||||
'예약한 밤 다음 날은 그 숙소에서 시작하고, 예약한 밤이 있는 날은 그날 밤 예약한 숙소에서 끝납니다.',
|
||||
'roadtrip.avoid.section': '가능하면 피하기',
|
||||
'roadtrip.avoid.toll': '유료 도로',
|
||||
'roadtrip.avoid.motorway': '고속도로',
|
||||
@@ -289,6 +289,6 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': '{name}에서 출발',
|
||||
'roadtrip.bookend.back': '{name}(으)로 돌아가기',
|
||||
'roadtrip.bookend.checkIn': '체크인 · {name}',
|
||||
'roadtrip.bookend.noVia': '숙소를 오가는 구간은 지금 경로를 그대로 유지합니다.',
|
||||
'roadtrip.bookend.noVia': '숙소를 오가는 구간에는 경유지를 둘 수 없습니다. 대신 그곳에 정차 지점을 추가하세요.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -119,7 +119,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Berekent ook het stuk tussen twee dagen en telt het bij de aankomstdag.',
|
||||
'roadtrip.line.hotelBookends': 'Elke dag bij je verblijf beginnen en eindigen',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Na een geboekte nacht begint de dag waar je sliep, en vóór een geboekte nacht eindigt hij daar.',
|
||||
'Na een geboekte nacht begint de dag bij dat verblijf, en vóór een geboekte nacht eindigt hij bij het verblijf dat voor die nacht is geboekt.',
|
||||
'roadtrip.avoid.section': 'Vermijden waar het kan',
|
||||
'roadtrip.avoid.toll': 'Tolwegen',
|
||||
'roadtrip.avoid.motorway': 'Snelwegen',
|
||||
@@ -297,6 +297,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Vanaf {name}',
|
||||
'roadtrip.bookend.back': 'Terug naar {name}',
|
||||
'roadtrip.bookend.checkIn': 'Inchecken · {name}',
|
||||
'roadtrip.bookend.noVia': 'De rit van en naar je verblijf houdt zijn route.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Geen tussenpunt op de rit naar of van je verblijf. Voeg daar in plaats daarvan een stop toe.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -117,7 +117,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Wyznacza też odcinek między dniami i liczy go do dnia przyjazdu.',
|
||||
'roadtrip.line.hotelBookends': 'Zaczynaj i kończ każdy dzień w noclegu',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Po zarezerwowanej nocy dzień zaczyna się w miejscu noclegu, a przed taką nocą tam się kończy.',
|
||||
'Po zarezerwowanej nocy dzień zaczyna się w tym noclegu, a przed taką nocą kończy się w noclegu zarezerwowanym na tę noc.',
|
||||
'roadtrip.avoid.section': 'Omijaj, jeśli się da',
|
||||
'roadtrip.avoid.toll': 'Drogi płatne',
|
||||
'roadtrip.avoid.motorway': 'Autostrady',
|
||||
@@ -294,6 +294,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Wyjazd: {name}',
|
||||
'roadtrip.bookend.back': 'Powrót: {name}',
|
||||
'roadtrip.bookend.checkIn': 'Zameldowanie · {name}',
|
||||
'roadtrip.bookend.noVia': 'Trasa do noclegu i z niego pozostaje bez zmian.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Na trasie do noclegu ani z niego nie można dodać punktu pośredniego. Dodaj tam zamiast tego postój.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Также считает участок между двумя днями и относит его ко дню прибытия.',
|
||||
'roadtrip.line.hotelBookends': 'Начинать и заканчивать каждый день в месте проживания',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'После забронированной ночи день начинается там, где вы ночевали, а перед ней заканчивается там.',
|
||||
'После забронированной ночи день начинается в этом жилье, а перед ней заканчивается в жилье, забронированном на эту ночь.',
|
||||
'roadtrip.avoid.section': 'Избегать по возможности',
|
||||
'roadtrip.avoid.toll': 'Платные дороги',
|
||||
'roadtrip.avoid.motorway': 'Автомагистрали',
|
||||
@@ -298,6 +298,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Отправление: {name}',
|
||||
'roadtrip.bookend.back': 'Возвращение: {name}',
|
||||
'roadtrip.bookend.checkIn': 'Заезд · {name}',
|
||||
'roadtrip.bookend.noVia': 'Маршрут от места проживания и обратно к нему остаётся прежним.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'На маршрут до места проживания или от него нельзя поставить промежуточную точку. Добавьте там остановку.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -116,7 +116,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Beräknar även sträckan mellan två dagar och räknar den på ankomstdagen.',
|
||||
'roadtrip.line.hotelBookends': 'Börja och avsluta varje dag vid ditt boende',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Efter en bokad natt börjar dagen där du sov, och före en bokad natt slutar den där.',
|
||||
'Efter en bokad natt börjar dagen vid det boendet, och före en bokad natt slutar den vid boendet som är bokat för den natten.',
|
||||
'roadtrip.avoid.section': 'Undvik om det går',
|
||||
'roadtrip.avoid.toll': 'Avgiftsvägar',
|
||||
'roadtrip.avoid.motorway': 'Motorvägar',
|
||||
@@ -293,6 +293,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Från {name}',
|
||||
'roadtrip.bookend.back': 'Tillbaka till {name}',
|
||||
'roadtrip.bookend.checkIn': 'Incheckning · {name}',
|
||||
'roadtrip.bookend.noVia': 'Resan till och från ditt boende behåller sin väg.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Ingen mellanpunkt på resan till eller från ditt boende. Lägg till ett stopp där i stället.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -118,7 +118,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'İki gün arasındaki yolu da hesaplar ve varış gününe sayar.',
|
||||
'roadtrip.line.hotelBookends': 'Her güne konaklama yerinde başla ve orada bitir',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Rezerve edilmiş bir geceden sonra gün uyuduğunuz yerde başlar, böyle bir geceden önce de orada biter.',
|
||||
'Rezerve edilmiş bir geceden sonra gün o konaklama yerinde başlar, böyle bir geceden önce de o gece için ayrılan konaklama yerinde biter.',
|
||||
'roadtrip.avoid.section': 'Mümkünse kaçın',
|
||||
'roadtrip.avoid.toll': 'Paralı yollar',
|
||||
'roadtrip.avoid.motorway': 'Otoyollar',
|
||||
@@ -296,6 +296,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Başlangıç: {name}',
|
||||
'roadtrip.bookend.back': 'Dönüş: {name}',
|
||||
'roadtrip.bookend.checkIn': 'Giriş · {name}',
|
||||
'roadtrip.bookend.noVia': 'Konaklama yerinize gidiş ve dönüş yolu değişmez.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Konaklama yerinize giden ya da oradan çıkan yola ara nokta konamaz. Bunun yerine oraya bir mola ekleyin.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -117,7 +117,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Також рахує ділянку між двома днями і зараховує її дню прибуття.',
|
||||
'roadtrip.line.hotelBookends': 'Починати й завершувати кожен день у місці проживання',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Після заброньованої ночі день починається там, де ви ночували, а перед нею там і закінчується.',
|
||||
'Після заброньованої ночі день починається в цьому житлі, а перед нею закінчується в житлі, заброньованому на цю ніч.',
|
||||
'roadtrip.avoid.section': 'Уникати за можливості',
|
||||
'roadtrip.avoid.toll': 'Платні дороги',
|
||||
'roadtrip.avoid.motorway': 'Автомагістралі',
|
||||
@@ -295,6 +295,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Відправлення: {name}',
|
||||
'roadtrip.bookend.back': 'Повернення: {name}',
|
||||
'roadtrip.bookend.checkIn': 'Заїзд · {name}',
|
||||
'roadtrip.bookend.noVia': 'Маршрут від місця проживання й назад до нього лишається незмінним.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'На маршрут до місця проживання чи від нього не можна поставити проміжну точку. Додайте там зупинку.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -117,7 +117,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.hint': 'Cũng tính đoạn giữa hai ngày và cộng vào ngày tới nơi.',
|
||||
'roadtrip.line.hotelBookends': 'Bắt đầu và kết thúc mỗi ngày tại nơi lưu trú',
|
||||
'roadtrip.line.hotelBookendsHint':
|
||||
'Sau một đêm đã đặt, ngày bắt đầu ở nơi bạn ngủ, và trước một đêm đã đặt, ngày kết thúc ở đó.',
|
||||
'Sau một đêm đã đặt, ngày bắt đầu tại nơi lưu trú đó, và trước một đêm đã đặt, ngày kết thúc tại nơi lưu trú đã đặt cho đêm ấy.',
|
||||
'roadtrip.avoid.section': 'Tránh nếu có thể',
|
||||
'roadtrip.avoid.toll': 'Đường thu phí',
|
||||
'roadtrip.avoid.motorway': 'Đường cao tốc',
|
||||
@@ -294,6 +294,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': 'Từ {name}',
|
||||
'roadtrip.bookend.back': 'Về lại {name}',
|
||||
'roadtrip.bookend.checkIn': 'Nhận phòng · {name}',
|
||||
'roadtrip.bookend.noVia': 'Chặng đi và về nơi lưu trú giữ nguyên tuyến đường.',
|
||||
'roadtrip.bookend.noVia':
|
||||
'Không thể đặt điểm trung gian trên chặng đi hoặc về nơi lưu trú. Hãy thêm một điểm dừng ở đó.',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -110,7 +110,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.dayColors': '每天一種顏色',
|
||||
'roadtrip.line.hint': '也會規劃兩天之間的路段,並計入抵達的那一天。',
|
||||
'roadtrip.line.hotelBookends': '每天從住宿地點出發,並在住宿地點結束',
|
||||
'roadtrip.line.hotelBookendsHint': '預訂的一晚之後,當天從你住的地方出發;預訂的一晚之前,當天在那裡結束。',
|
||||
'roadtrip.line.hotelBookendsHint': '預訂的一晚之後,當天從那間住宿出發;預訂的一晚之前,當天在那晚預訂的住宿結束。',
|
||||
'roadtrip.avoid.section': '盡量避開',
|
||||
'roadtrip.avoid.toll': '收費公路',
|
||||
'roadtrip.avoid.motorway': '高速公路',
|
||||
@@ -278,6 +278,6 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': '從 {name} 出發',
|
||||
'roadtrip.bookend.back': '返回 {name}',
|
||||
'roadtrip.bookend.checkIn': '入住 · {name}',
|
||||
'roadtrip.bookend.noVia': '往返住宿地點的路段維持原本的路線。',
|
||||
'roadtrip.bookend.noVia': '往返住宿地點的路段無法加入途經點。請改在那裡新增一個停靠點。',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -110,7 +110,7 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.line.dayColors': '每天一种颜色',
|
||||
'roadtrip.line.hint': '也会规划两天之间的路段,并计入抵达的那一天。',
|
||||
'roadtrip.line.hotelBookends': '每天从住处出发,并在住处结束',
|
||||
'roadtrip.line.hotelBookendsHint': '预订的一晚之后,当天从你住的地方出发;预订的一晚之前,当天在那里结束。',
|
||||
'roadtrip.line.hotelBookendsHint': '预订的一晚之后,当天从那处住宿出发;预订的一晚之前,当天在那晚预订的住宿结束。',
|
||||
'roadtrip.avoid.section': '尽量避开',
|
||||
'roadtrip.avoid.toll': '收费公路',
|
||||
'roadtrip.avoid.motorway': '高速公路',
|
||||
@@ -279,6 +279,6 @@ const roadtrip: TranslationStrings = {
|
||||
'roadtrip.bookend.from': '从 {name} 出发',
|
||||
'roadtrip.bookend.back': '返回 {name}',
|
||||
'roadtrip.bookend.checkIn': '入住 · {name}',
|
||||
'roadtrip.bookend.noVia': '往返住处的路段保持原有路线。',
|
||||
'roadtrip.bookend.noVia': '往返住处的路段不能添加途经点。请改为在那里添加一个停靠点。',
|
||||
};
|
||||
export default roadtrip;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* ROADTRIP-BOOKENDS-001..027: a booked night stands at both ends of the days around it.
|
||||
* ROADTRIP-BOOKENDS-001..028: a booked night stands at both ends of the days around it.
|
||||
*
|
||||
* Pinned here: which hotel a day wakes up in and which it sleeps in, where the two are
|
||||
* seated and where they are not (the hotel already there, a landing, a departure, a hire
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
type BookendStay,
|
||||
} from './nightBookends';
|
||||
import type { CarrierTerminal, PlanDay, RoadtripStop, RoutedLeg } from './planning-types';
|
||||
import { standsAsDay } from './roadtripModel';
|
||||
import { splitIntoRuns, standsAsDay } from './roadtripModel';
|
||||
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
@@ -325,7 +325,7 @@ describe('what a bookend is', () => {
|
||||
for (const id of ids) expect(id).toBeLessThan(terminalAssignmentId(1_000_000, 'arrival'));
|
||||
});
|
||||
|
||||
it('ROADTRIP-BOOKENDS-021: never a clock, a stay, a mode or a night of its own, whatever the stay says', () => {
|
||||
it('ROADTRIP-BOOKENDS-021: never a clock, a stay, a mode of its own or a night, whatever the stay says', () => {
|
||||
const [day] = seatNightBookends([planDay(D4, [visit(D4, 0), visit(D4, 1)])], days, [
|
||||
stay(5, D1, D4, HOTEL, { check_out: '11:00' }),
|
||||
]);
|
||||
@@ -506,3 +506,34 @@ describe('with the switch off', () => {
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('the drive out of the morning hotel', () => {
|
||||
it('ROADTRIP-BOOKENDS-028: goes the way the first stop is reached from the hotel, the leg the day plan draws; the evening sets no mode', () => {
|
||||
const hotel = stay(5, D1, D4, HOTEL);
|
||||
const [day] = seatNightBookends(
|
||||
[
|
||||
planDay(D2, [
|
||||
visit(D2, 0, { name: 'P3', incomingLegMode: 'walking', legMode: 'cycling' }),
|
||||
visit(D2, 1, { name: 'P4' }),
|
||||
]),
|
||||
],
|
||||
days,
|
||||
[hotel],
|
||||
);
|
||||
expect(shape(day)).toEqual(['morning:5', 'P3', 'P4', 'evening:5']);
|
||||
expect(day!.stops[0]).toMatchObject({ legMode: 'walking', incomingLegMode: null });
|
||||
expect(day!.stops[3]).toMatchObject({ legMode: null, incomingLegMode: null });
|
||||
// Read the way the browser and the server both split a day: the hotel's leg on foot,
|
||||
// the first stop's own mode after it, and the day's default into tonight's hotel.
|
||||
const runs = splitIntoRuns(day!.stops, (from) => from.legMode ?? 'driving');
|
||||
expect(runs.map((run) => [run.mode, shape({ ...day!, stops: run.stops })])).toEqual([
|
||||
['walking', ['morning:5', 'P3']],
|
||||
['cycling', ['P3', 'P4']],
|
||||
['driving', ['P4', 'evening:5']],
|
||||
]);
|
||||
|
||||
// A first stop reached no particular way leaves the drive to the day's own mode.
|
||||
const [plain] = seatNightBookends([planDay(D3, [visit(D3, 0), visit(D3, 1)])], days, [hotel]);
|
||||
expect(plain!.stops[0]!.legMode).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -104,7 +104,19 @@ export function bookendStaysOf<S extends Omit<BookendStay, 'reservation_id'>>(
|
||||
return out;
|
||||
}
|
||||
|
||||
function bookendStop(day: PlanDay, phase: BookendPhase, stay: BookendStay, ownerIndex: number): RoadtripStop {
|
||||
/**
|
||||
* A bookend as a stop. `legMode` is the mode of the drive that leaves it: the morning's
|
||||
* drive to the first stop goes the way that stop is reached from the hotel
|
||||
* (`incoming_leg_transport_mode`, the mode the day plan draws that leg in), and the
|
||||
* evening's leaves nowhere.
|
||||
*/
|
||||
function bookendStop(
|
||||
day: PlanDay,
|
||||
phase: BookendPhase,
|
||||
stay: BookendStay,
|
||||
ownerIndex: number,
|
||||
legMode: string | null,
|
||||
): RoadtripStop {
|
||||
const checkingOut = phase === 'morning' && stay.end_day_id === day.dayId;
|
||||
return {
|
||||
bookend: {
|
||||
@@ -131,7 +143,7 @@ function bookendStop(day: PlanDay, phase: BookendPhase, stay: BookendStay, owner
|
||||
dwellMinutes: 0,
|
||||
night: false,
|
||||
endDay: false,
|
||||
legMode: null,
|
||||
legMode,
|
||||
incomingLegMode: null,
|
||||
stopType: 'hotel',
|
||||
fillPercent: null,
|
||||
@@ -193,9 +205,9 @@ export function seatNightBookends(plan: PlanDay[], days: readonly DayRef[], stay
|
||||
return {
|
||||
...day,
|
||||
stops: [
|
||||
...(head ? [bookendStop(day, 'morning', hotels.morning!, 0)] : []),
|
||||
...(head ? [bookendStop(day, 'morning', hotels.morning!, 0, first?.incomingLegMode ?? null)] : []),
|
||||
...stops,
|
||||
...(tail ? [bookendStop(day, 'evening', hotels.evening!, stored)] : []),
|
||||
...(tail ? [bookendStop(day, 'evening', hotels.evening!, stored, null)] : []),
|
||||
],
|
||||
};
|
||||
});
|
||||
|
||||
@@ -367,16 +367,6 @@ export function computeSchedule(
|
||||
return { entries, warnings, endsAt };
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the rail lists this day among the days, rather than as a quiet placeholder
|
||||
* asking for stops.
|
||||
*
|
||||
* Two stops make a drive. A booked night makes a day on its own: the day you arrive
|
||||
* somewhere and go no further, or the one you check in at ten and set out from. It
|
||||
* used to need company, and a hotel entered under Days for the arrival day was filed
|
||||
* at the bottom of the rail under "only X so far", which reads as the hotel missing
|
||||
* from the road trip altogether.
|
||||
*/
|
||||
/**
|
||||
* Whether a stop is one somebody stored on the day: an assignment, filed at its own
|
||||
* index. Not an automatic night, a terminal or a booked night at a day's edge, which the
|
||||
@@ -391,6 +381,16 @@ export function isStoredStop(stop: Pick<RoadtripStop, 'automaticNight' | 'carrie
|
||||
return !stop.automaticNight && !stop.carrier && !stop.bookend;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the rail lists this day among the days, rather than as a quiet placeholder
|
||||
* asking for stops.
|
||||
*
|
||||
* Two stops make a drive. A booked night makes a day on its own: the day you arrive
|
||||
* somewhere and go no further, or the one you check in at ten and set out from. It
|
||||
* used to need company, and a hotel entered under Days for the arrival day was filed
|
||||
* at the bottom of the rail under "only X so far", which reads as the hotel missing
|
||||
* from the road trip altogether.
|
||||
*/
|
||||
export function standsAsDay(stops: readonly { night?: boolean }[]): boolean {
|
||||
return stops.length > 1 || stops.some((stop) => stop.night === true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user