mirror of
https://github.com/ankitects/anki.git
synced 2026-01-10 04:23:54 -05:00
Added: Timer limit
This commit is contained in:
parent
eccaae3c40
commit
312cbc2fba
3 changed files with 33 additions and 12 deletions
|
|
@ -313,6 +313,7 @@ message NextCardDataResponse {
|
||||||
bool autoplay = 7;
|
bool autoplay = 7;
|
||||||
bool marked = 13;
|
bool marked = 13;
|
||||||
optional TypedAnswer typed_answer = 12;
|
optional TypedAnswer typed_answer = 12;
|
||||||
|
uint32 max_time_ms = 14;
|
||||||
|
|
||||||
repeated card_rendering.AVTag question_av_tags = 8;
|
repeated card_rendering.AVTag question_av_tags = 8;
|
||||||
repeated card_rendering.AVTag answer_av_tags = 9;
|
repeated card_rendering.AVTag answer_av_tags = 9;
|
||||||
|
|
|
||||||
|
|
@ -492,6 +492,7 @@ impl crate::services::SchedulerService for Collection {
|
||||||
args: answer.0,
|
args: answer.0,
|
||||||
}),
|
}),
|
||||||
marked,
|
marked,
|
||||||
|
max_time_ms: deck_config.inner.cap_answer_time_to_secs * 1000,
|
||||||
|
|
||||||
// Filled by python
|
// Filled by python
|
||||||
front: "".to_string(),
|
front: "".to_string(),
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,38 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
-->
|
-->
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { ReviewerState } from "../reviewer";
|
import type { ReviewerState } from "../reviewer";
|
||||||
import { onMount } from "svelte";
|
import { onDestroy } from "svelte";
|
||||||
|
|
||||||
export let state: ReviewerState;
|
export let state: ReviewerState;
|
||||||
|
|
||||||
let text = "";
|
let text = "";
|
||||||
|
let cls = "";
|
||||||
|
|
||||||
function step() {
|
function step() {
|
||||||
text = formatTime(Date.now() - state.beginAnsweringMs);
|
let time = Date.now() - state.beginAnsweringMs;
|
||||||
|
const maxTime = state._cardData?.maxTimeMs ?? 0;
|
||||||
|
if (time >= maxTime) {
|
||||||
|
time = maxTime;
|
||||||
|
cls = "overtime";
|
||||||
|
} else {
|
||||||
|
cls = "";
|
||||||
|
}
|
||||||
|
text = formatTime(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
let interval: ReturnType<typeof setInterval> | undefined = undefined;
|
||||||
const interval = setInterval(step, 1000);
|
function startTimer() {
|
||||||
return () => {
|
clearInterval(interval);
|
||||||
clearInterval(interval);
|
interval = setInterval(step, 1000);
|
||||||
};
|
text = formatTime(0);
|
||||||
|
cls = "";
|
||||||
|
console.log("startTimer");
|
||||||
|
}
|
||||||
|
|
||||||
|
state.cardData.subscribe(startTimer);
|
||||||
|
|
||||||
|
onDestroy(() => {
|
||||||
|
clearInterval(interval);
|
||||||
});
|
});
|
||||||
step();
|
step();
|
||||||
|
|
||||||
|
|
@ -30,15 +47,17 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<span>
|
<div class={cls}>
|
||||||
<div>
|
{text}
|
||||||
{text}
|
</div>
|
||||||
</div>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
div {
|
div {
|
||||||
width: 88px;
|
width: 88px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.overtime {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue