feat(web): add -1 s / +1 s buttons under the editing preview
174b75a parent: 5a5d914 modified
web/src/i18n/locales/en/editing.ts +2 -0 | @@ -290,6 +290,8 @@ export default { | ||
| 290 | 290 | back5: "−5 s (J)", |
| 291 | 291 | playPause: "Play / pause (Space)", |
| 292 | 292 | fwd5: "+5 s (L)", |
| 293 | + back1: "−1 s (Shift+←)", | |
| 294 | + fwd1: "+1 s (Shift+→)", | |
| 293 | 295 | report: "Discuss this frame", |
| 294 | 296 | reportTitle: "Talk to Daryl about this frame (timecode and image attached), in a new conversation", |
| 295 | 297 | }, |
| @@ -290,6 +290,8 @@ export default { | |||
| 290 | back5: "−5 s (J)", | 290 | back5: "−5 s (J)", |
| 291 | playPause: "Play / pause (Space)", | 291 | playPause: "Play / pause (Space)", |
| 292 | fwd5: "+5 s (L)", | 292 | fwd5: "+5 s (L)", |
| 293 | + back1: "−1 s (Shift+←)", | ||
| 294 | + fwd1: "+1 s (Shift+→)", | ||
| 293 | report: "Discuss this frame", | 295 | report: "Discuss this frame", |
| 294 | reportTitle: "Talk to Daryl about this frame (timecode and image attached), in a new conversation", | 296 | reportTitle: "Talk to Daryl about this frame (timecode and image attached), in a new conversation", |
| 295 | }, | 297 | }, |
modified
web/src/i18n/locales/fr/editing.ts +2 -0 | @@ -290,6 +290,8 @@ export default { | ||
| 290 | 290 | back5: "−5 s (J)", |
| 291 | 291 | playPause: "Lecture / pause (Espace)", |
| 292 | 292 | fwd5: "+5 s (L)", |
| 293 | + back1: "−1 s (Maj+←)", | |
| 294 | + fwd1: "+1 s (Maj+→)", | |
| 293 | 295 | report: "Discuter de cette image", |
| 294 | 296 | reportTitle: "Parler à Daryl de cette image (timecode et image joints), dans une nouvelle discussion", |
| 295 | 297 | }, |
| @@ -290,6 +290,8 @@ export default { | |||
| 290 | back5: "−5 s (J)", | 290 | back5: "−5 s (J)", |
| 291 | playPause: "Lecture / pause (Espace)", | 291 | playPause: "Lecture / pause (Espace)", |
| 292 | fwd5: "+5 s (L)", | 292 | fwd5: "+5 s (L)", |
| 293 | + back1: "−1 s (Maj+←)", | ||
| 294 | + fwd1: "+1 s (Maj+→)", | ||
| 293 | report: "Discuter de cette image", | 295 | report: "Discuter de cette image", |
| 294 | reportTitle: "Parler à Daryl de cette image (timecode et image joints), dans une nouvelle discussion", | 296 | reportTitle: "Parler à Daryl de cette image (timecode et image joints), dans une nouvelle discussion", |
| 295 | }, | 297 | }, |
modified
web/src/project/steps/montage/Preview.vue +3 -0 | @@ -53,6 +53,7 @@ onBeforeUnmount(() => { props.player.video.value = null; }); | ||
| 53 | 53 | |
| 54 | 54 | const t = computed(() => props.player.t.value); |
| 55 | 55 | const playing = computed(() => props.player.playing.value); |
| 56 | +const step = (s: number) => props.player.seek(Math.max(0, Math.min(t.value + s, props.player.total.value))); | |
| 56 | 57 | |
| 57 | 58 | // --- volume de l'A-roll : celui du clip sous la tête de lecture. Par Web Audio, pour pouvoir monter au-dessus de |
| 58 | 59 | // 0 dB ; branché à la première lecture (le navigateur n'accepte le son qu'après un geste) |
| @@ -388,7 +389,9 @@ defineExpose({ capture }); | ||
| 388 | 389 | <div class="bar"> |
| 389 | 390 | <button class="btn ctl" :title="tr('editing.preview.start')" @click="player.seek(0)">⏮</button> |
| 390 | 391 | <button class="btn ctl" :title="tr('editing.preview.back5')" @click="player.seek(t - 5)">−5 s</button> |
| 392 | + <button class="btn ctl" :title="tr('editing.preview.back1')" @click="step(-1)">−1 s</button> | |
| 391 | 393 | <button class="btn dark play" :title="tr('editing.preview.playPause')" @click="player.toggle()">{{ playing ? "❚❚" : "▶" }}</button> |
| 394 | + <button class="btn ctl" :title="tr('editing.preview.fwd1')" @click="step(1)">+1 s</button> | |
| 392 | 395 | <button class="btn ctl" :title="tr('editing.preview.fwd5')" @click="player.seek(t + 5)">+5 s</button> |
| 393 | 396 | <span class="mono now">{{ tcd(t) }}</span><span class="mono dim">/ {{ mmss(player.total.value) }}</span> |
| 394 | 397 | <span class="spacer" /> |
| @@ -53,6 +53,7 @@ onBeforeUnmount(() => { props.player.video.value = null; }); | |||
| 53 | 53 | ||
| 54 | const t = computed(() => props.player.t.value); | 54 | const t = computed(() => props.player.t.value); |
| 55 | const playing = computed(() => props.player.playing.value); | 55 | const playing = computed(() => props.player.playing.value); |
| 56 | +const step = (s: number) => props.player.seek(Math.max(0, Math.min(t.value + s, props.player.total.value))); | ||
| 56 | 57 | ||
| 57 | // --- volume de l'A-roll : celui du clip sous la tête de lecture. Par Web Audio, pour pouvoir monter au-dessus de | 58 | // --- volume de l'A-roll : celui du clip sous la tête de lecture. Par Web Audio, pour pouvoir monter au-dessus de |
| 58 | // 0 dB ; branché à la première lecture (le navigateur n'accepte le son qu'après un geste) | 59 | // 0 dB ; branché à la première lecture (le navigateur n'accepte le son qu'après un geste) |
| @@ -388,7 +389,9 @@ defineExpose({ capture }); | |||
| 388 | <div class="bar"> | 389 | <div class="bar"> |
| 389 | <button class="btn ctl" :title="tr('editing.preview.start')" @click="player.seek(0)">⏮</button> | 390 | <button class="btn ctl" :title="tr('editing.preview.start')" @click="player.seek(0)">⏮</button> |
| 390 | <button class="btn ctl" :title="tr('editing.preview.back5')" @click="player.seek(t - 5)">−5 s</button> | 391 | <button class="btn ctl" :title="tr('editing.preview.back5')" @click="player.seek(t - 5)">−5 s</button> |
| 392 | + <button class="btn ctl" :title="tr('editing.preview.back1')" @click="step(-1)">−1 s</button> | ||
| 391 | <button class="btn dark play" :title="tr('editing.preview.playPause')" @click="player.toggle()">{{ playing ? "❚❚" : "▶" }}</button> | 393 | <button class="btn dark play" :title="tr('editing.preview.playPause')" @click="player.toggle()">{{ playing ? "❚❚" : "▶" }}</button> |
| 394 | + <button class="btn ctl" :title="tr('editing.preview.fwd1')" @click="step(1)">+1 s</button> | ||
| 392 | <button class="btn ctl" :title="tr('editing.preview.fwd5')" @click="player.seek(t + 5)">+5 s</button> | 395 | <button class="btn ctl" :title="tr('editing.preview.fwd5')" @click="player.seek(t + 5)">+5 s</button> |
| 393 | <span class="mono now">{{ tcd(t) }}</span><span class="mono dim">/ {{ mmss(player.total.value) }}</span> | 396 | <span class="mono now">{{ tcd(t) }}</span><span class="mono dim">/ {{ mmss(player.total.value) }}</span> |
| 394 | <span class="spacer" /> | 397 | <span class="spacer" /> |