diff --git a/changelog.d/1513-timeline-launches-speed-buffering.md b/changelog.d/1513-timeline-launches-speed-buffering.md index f4663019b..e84d8e205 100644 --- a/changelog.d/1513-timeline-launches-speed-buffering.md +++ b/changelog.d/1513-timeline-launches-speed-buffering.md @@ -1,5 +1,7 @@ - The timeline brings launches up as the time passes them, offers play - speeds from real time to a week a second, and waits on each weather frame - until it loads instead of running past it. The time now rides in a bubble - over the handle. Zooming out on the globe stops while the globe is still in - view instead of leaving it a speck (samehkhamis, #1513). + speeds from real time to a week a second, and plays smoothly, holding only + when the next weather frame has yet to load, with a spinner by the time + while it waits. The time rides in a bubble over the handle. The track zooms + with a scroll or a pinch, drags along, and goes to the time under a tap, on + a phone as on a desktop. Zooming out on the globe stops while the globe is + still in view instead of leaving it a speck (samehkhamis, #1513). diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json index 045eb805a..7b48aedb3 100644 --- a/src/i18n/locales/ar.json +++ b/src/i18n/locales/ar.json @@ -3231,5 +3231,6 @@ "1 d/s": "يوم/ث", "1 wk/s": "أسبوع/ث", "Play speed": "سرعة التشغيل", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "مرّر أو اقرص للتكبير، واسحب للتنقل · انقر نقرًا مزدوجًا لرؤية الكل" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "مرّر أو اقرص للتكبير، واسحب للتنقل · انقر نقرًا مزدوجًا لرؤية الكل", + "1 min/s": "دقيقة/ث" } diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 70aa6ab52..8433bce66 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -2951,5 +2951,6 @@ "1 d/s": "1 Tag/s", "1 wk/s": "1 Wo./s", "Play speed": "Wiedergabegeschwindigkeit", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Scrollen oder mit zwei Fingern zoomen, ziehen zum Verschieben · Doppelklick zeigt alles" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Scrollen oder mit zwei Fingern zoomen, ziehen zum Verschieben · Doppelklick zeigt alles", + "1 min/s": "1 Min./s" } diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 668727f02..dec285ed3 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -3021,5 +3021,6 @@ "1 d/s": "1 d/s", "1 wk/s": "1 sem/s", "Play speed": "Velocidad de reproducción", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Desplaza o pellizca para ampliar, arrastra para moverte · doble clic para verlo todo" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Desplaza o pellizca para ampliar, arrastra para moverte · doble clic para verlo todo", + "1 min/s": "1 min/s" } diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 3c4d7b29b..497318857 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -3021,5 +3021,6 @@ "1 d/s": "1 j/s", "1 wk/s": "1 sem/s", "Play speed": "Vitesse de lecture", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Faites défiler ou pincez pour zoomer, glissez pour vous déplacer · double-clic pour tout voir" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Faites défiler ou pincez pour zoomer, glissez pour vous déplacer · double-clic pour tout voir", + "1 min/s": "1 min/s" } diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index e351e1ab5..16c129e66 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -3021,5 +3021,6 @@ "1 d/s": "1 g/s", "1 wk/s": "1 sett/s", "Play speed": "Velocità di riproduzione", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Scorri o pizzica per lo zoom, trascina per spostarti · doppio clic per vedere tutto" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Scorri o pizzica per lo zoom, trascina per spostarti · doppio clic per vedere tutto", + "1 min/s": "1 min/s" } diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index a7df054cd..439dc191b 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -2881,5 +2881,6 @@ "1 d/s": "1日/秒", "1 wk/s": "1週間/秒", "Play speed": "再生速度", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "スクロールまたはピンチでズーム、ドラッグで移動 · ダブルクリックで全体表示" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "スクロールまたはピンチでズーム、ドラッグで移動 · ダブルクリックで全体表示", + "1 min/s": "1分/秒" } diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index ba3a5f551..63e646a5a 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -3021,5 +3021,6 @@ "1 d/s": "1 d/s", "1 wk/s": "1 sem/s", "Play speed": "Velocidade de reprodução", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Role ou faça pinça para ampliar, arraste para se mover · clique duplo para ver tudo" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Role ou faça pinça para ampliar, arraste para se mover · clique duplo para ver tudo", + "1 min/s": "1 min/s" } diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index 8648bc37d..4d93f71d9 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -3091,5 +3091,6 @@ "1 d/s": "1 дн/с", "1 wk/s": "1 нед/с", "Play speed": "Скорость воспроизведения", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Прокрутите или сведите пальцы для масштаба, перетащите для перемещения · двойной щелчок — показать всё" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Прокрутите или сведите пальцы для масштаба, перетащите для перемещения · двойной щелчок — показать всё", + "1 min/s": "1 мин/с" } diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 0a3872414..525405323 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -3091,5 +3091,6 @@ "1 d/s": "1 дн/с", "1 wk/s": "1 тиж/с", "Play speed": "Швидкість відтворення", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Прокрутіть або зведіть пальці для масштабу, перетягніть для переміщення · подвійне клацання — показати все" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "Прокрутіть або зведіть пальці для масштабу, перетягніть для переміщення · подвійне клацання — показати все", + "1 min/s": "1 хв/с" } diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index 394df0057..192f17d26 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -2881,5 +2881,6 @@ "1 d/s": "1 天/秒", "1 wk/s": "1 周/秒", "Play speed": "播放速度", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "滚动或双指缩放,拖动以移动 · 双击查看全部" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "滚动或双指缩放,拖动以移动 · 双击查看全部", + "1 min/s": "1 分钟/秒" } diff --git a/src/i18n/locales/zh-Hant.json b/src/i18n/locales/zh-Hant.json index 21018551c..5c9292f3a 100644 --- a/src/i18n/locales/zh-Hant.json +++ b/src/i18n/locales/zh-Hant.json @@ -2881,5 +2881,6 @@ "1 d/s": "1 天/秒", "1 wk/s": "1 週/秒", "Play speed": "播放速度", - "Scroll or pinch to zoom, drag to move along · double-click to see it all": "捲動或雙指縮放,拖曳以移動 · 按兩下查看全部" + "Scroll or pinch to zoom, drag to move along · double-click to see it all": "捲動或雙指縮放,拖曳以移動 · 按兩下查看全部", + "1 min/s": "1 分鐘/秒" } diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index de1b51e8b..d383f1b68 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -203,6 +203,7 @@ "▲ {frp} MW" ], "es": [ + "1 min/s", "1090 MHz", "978 MHz UAT", "AIS: --", @@ -331,6 +332,7 @@ "▲ {frp} MW" ], "fr": [ + "1 min/s", "1090 MHz", "978 MHz UAT", "ALTITUDE", @@ -512,6 +514,7 @@ "▲ {frp} MW" ], "it": [ + "1 min/s", "1090 MHz", "978 MHz UAT", "AFRICA", @@ -732,6 +735,7 @@ "▲ {frp} MW" ], "pt": [ + "1 min/s", "1090 MHz", "978 MHz UAT", "AIS: --", diff --git a/src/ui/stores/worldTime.js b/src/ui/stores/worldTime.js index 35cad2edc..80f51ac71 100644 --- a/src/ui/stores/worldTime.js +++ b/src/ui/stores/worldTime.js @@ -11,6 +11,7 @@ const LIVE_EDGE_MS = 5000; /** The speeds play offers, in world ms per real ms. */ export const WORLD_TIME_SPEEDS = Object.freeze({ real: 1, + minute: 60, hour: 3_600, day: 86_400, week: 604_800, diff --git a/src/ui/views/panels/WorldTimeline.test.mjs b/src/ui/views/panels/WorldTimeline.test.mjs index 3725d9abc..073d6f95e 100644 --- a/src/ui/views/panels/WorldTimeline.test.mjs +++ b/src/ui/views/panels/WorldTimeline.test.mjs @@ -232,6 +232,10 @@ test('the speed chosen sets how fast play runs, at once while playing', async (t await nextTick(); const select = bar().querySelector('select.world-timeline-speed'); assert.equal(select.value, 'real'); + assert.deepEqual( + [...select.options].map((option) => option.value), + ['real', 'minute', 'hour', 'day', 'week'], + ); select.value = 'week'; select.dispatchEvent(new Event('change')); await nextTick(); @@ -242,6 +246,10 @@ test('the speed chosen sets how fast play runs, at once while playing', async (t await nextTick(); assert.equal(worldClock.isPlaying(), true); assert.equal(worldClock.getRate(), 3_600, 'changed while playing'); + select.value = 'minute'; + select.dispatchEvent(new Event('change')); + await nextTick(); + assert.equal(worldClock.getRate(), 60, 'a minute a second'); select.value = 'real'; select.dispatchEvent(new Event('change')); await nextTick(); diff --git a/src/ui/views/panels/WorldTimeline.vue b/src/ui/views/panels/WorldTimeline.vue index a58e22139..866380638 100644 --- a/src/ui/views/panels/WorldTimeline.vue +++ b/src/ui/views/panels/WorldTimeline.vue @@ -20,6 +20,7 @@ const store = useWorldTimeStore(); const { time, speed } = storeToRefs(store); const speeds = computed(() => [ { value: 'real', label: '1×' }, + { value: 'minute', label: t('1 min/s') }, { value: 'hour', label: t('1 h/s') }, { value: 'day', label: t('1 d/s') }, { value: 'week', label: t('1 wk/s') },