diff --git a/apk-webview/app/src/main/assets/index.html b/apk-webview/app/src/main/assets/index.html index 4714c5c..2f3eb33 100644 --- a/apk-webview/app/src/main/assets/index.html +++ b/apk-webview/app/src/main/assets/index.html @@ -125,17 +125,30 @@ const SCHEDULE = [ ["20:20","21:10","21:40","22:05"] ]; const TRIPS_SHOWN = 5; // сколько ближайших рейсов показывать в карточке + +// Время в пути Полярные Зори ↔ Кандалакша. В таблице расписания его нет: +// в 12 строках из 13 Кандалакша → ПЗ занимает ровно 50 минут +// (в первой строке 60 — по всей видимости опечатка). +const RIDE_PZ_KAND = 50; + +// arrs — список прибытий: {label, col} — время из колонки таблицы, +// {label, offset} — «время в пути» от отправления (если col не задан). const DIRECTIONS = { // От Кандалакши и Зашейка все рейсы идут через Полярные Зори — одна карточка "Кандалакша": [ - {to:"Полярные Зори, Зашеек", dep:0, arr:2, arrLabel:"Зашеек", via:"через Полярные Зори"} + {to:"Полярные Зори, Зашеек", dep:0, via:"через Полярные Зори", + arrs:[{label:"Зашеек", col:2}]} ], "Полярные Зори": [ - {to:"Зашеек", dep:1, arr:2, via:"≈ 30 мин в пути"}, - {to:"Кандалакша", dep:3, arr:null, via:"≈ 1 час в пути"} + {to:"Зашеек", dep:1, via:"≈ 30 мин в пути", + arrs:[{label:"Зашеек", col:2}]}, + {to:"Кандалакша", dep:3, via:"≈ 50 мин в пути", + arrs:[{label:"Кандалакша", offset:RIDE_PZ_KAND}]} ], "Зашеек": [ - {to:"Полярные Зори, Кандалакша", dep:2, arr:3, arrLabel:"Кандалакша", via:"через Полярные Зори"} + {to:"Полярные Зори, Кандалакша", dep:2, via:"через Полярные Зори", + arrs:[{label:"Полярные Зори", col:3}, + {label:"Кандалакша", col:3, offset:RIDE_PZ_KAND}]} ] }; const DAYS = ["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"]; @@ -174,6 +187,12 @@ function nowMs(){ second: d.getUTCSeconds(), day: d.getUTCDay() }; } +function fmtHM(m){ + const p = n=>String(n).padStart(2,"0"); + m = ((m % 1440) + 1440) % 1440; // на случай перехода через полночь + return `${p(Math.floor(m/60))}:${p(m%60)}`; +} + function fmtWait(m){ if(m <= 0) return "отправление сейчас"; const h = Math.floor(m/60), mm = m%60; @@ -190,13 +209,21 @@ function render(){ const dirs = DIRECTIONS[currentStop]; document.getElementById("dirBox").innerHTML = dirs.map(d=>{ const upcoming = SCHEDULE - .map((r,ri)=>({dep:toMin(r[d.dep]), arr:d.arr!==null?r[d.arr]:null, ri})) + .map((r,ri)=>{ + const dep = toMin(r[d.dep]); + const arrs = d.arrs.map(a=>{ + const base = a.col!==undefined ? toMin(r[a.col]) : dep; + return {label:a.label, t:fmtHM(base + (a.offset||0))}; + }); + return {dep, arrs, ri}; + }) .filter(x=>x.dep >= curMin) .sort((a,b)=>a.dep-b.dep) .slice(0,TRIPS_SHOWN) .map(x=>{ const w = x.dep - curMin; - const arr = x.arr ? `прибытие${d.arrLabel ? " "+d.arrLabel : ""} ${x.arr}` : ""; + // .trip .t small имеет display:block, поэтому каждый — своя строка + const arr = x.arrs.map(a=>`прибытие ${a.label} ${a.t}`).join(""); return `
${SCHEDULE[x.ri][d.dep]}${arr} ${fmtWait(w)}