This commit is contained in:
Luc Mcgrady 2025-08-26 02:08:24 +01:00
parent 6c540c89f1
commit 860a8b4295
No known key found for this signature in database
GPG key ID: 4F3D7A0B17CC3D9C
7 changed files with 74 additions and 44 deletions

View file

@ -334,7 +334,7 @@ def is_sveltekit_page(path: str) -> bool:
"import-csv", "import-csv",
"import-page", "import-page",
"image-occlusion", "image-occlusion",
"reviewer-bottom" "reviewer-bottom",
] ]

View file

@ -839,9 +839,7 @@ timerStopped = false;
maxTime = self.card.time_limit() / 1000 maxTime = self.card.time_limit() / 1000
else: else:
maxTime = 0 maxTime = 0
self.bottom.web.eval( self.bottom.web.eval("_showQuestion(%s,%d);" % ("", maxTime))
"_showQuestion(%s,%d);" % ("", maxTime)
)
def _showEaseButtons(self) -> None: def _showEaseButtons(self) -> None:
if not self._states_mutated: if not self._states_mutated:
@ -853,11 +851,10 @@ timerStopped = false;
f"_showAnswer({json.dumps(middle)}, {json.dumps(conf['stopTimerOnAnswer'])});" f"_showAnswer({json.dumps(middle)}, {json.dumps(conf['stopTimerOnAnswer'])});"
) )
def _remaining(self) -> str: def _remaining(self):
if not self.mw.col.conf["dueCounts"]: if not self.mw.col.conf["dueCounts"]:
return "" return ""
counts: list[int | str]
idx, counts = self._v3.counts() idx, counts = self._v3.counts()
self.bottom.web.eval(f"_updateRemaining({json.dumps(counts)},{idx})") self.bottom.web.eval(f"_updateRemaining({json.dumps(counts)},{idx})")
@ -889,13 +886,13 @@ timerStopped = false;
) )
return buttons_tuple return buttons_tuple
def _answerButtons(self) -> str: def _answerButtons(self):
default = self._defaultEase() default = self._defaultEase()
assert isinstance(self.mw.col.sched, V3Scheduler) assert isinstance(self.mw.col.sched, V3Scheduler)
labels = self.mw.col.sched.describe_next_states(self._v3.states) labels = self.mw.col.sched.describe_next_states(self._v3.states)
def but(i: int, label: str) -> str: def but(i: int, label: str):
if i == default: if i == default:
id = "defease" id = "defease"
else: else:
@ -915,7 +912,6 @@ timerStopped = false;
} }
return [but(ease, label) for ease, label in self._answerButtonList()] return [but(ease, label) for ease, label in self._answerButtonList()]
def _buttonTime(self, i: int, v3_labels: Sequence[str]) -> str: def _buttonTime(self, i: int, v3_labels: Sequence[str]) -> str:
if self.mw.col.conf["estTimes"]: if self.mw.col.conf["estTimes"]:

View file

@ -1,14 +1,18 @@
<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts"> <script lang="ts">
import { onMount } from "svelte"; import { onMount } from "svelte";
import { writable } from "svelte/store"; import { writable } from "svelte/store";
import { bridgeCommand } from "@tslib/bridgecommand"; import { bridgeCommand } from "@tslib/bridgecommand";
import ReviewerBottom from "./ReviewerBottom.svelte"; import ReviewerBottom from "./ReviewerBottom.svelte";
import type {AnswerButtonInfo} from "./types" import type { AnswerButtonInfo } from "./types";
import "./index.scss" import "./index.scss";
const answerButtons = writable<AnswerButtonInfo[]>([]) const answerButtons = writable<AnswerButtonInfo[]>([]);
const remaining = writable<[number, number, number]>([0, 0, 0]) const remaining = writable<[number, number, number]>([0, 0, 0]);
const remainingIndex = writable<number>(-1) const remainingIndex = writable<number>(-1);
onMount(() => { onMount(() => {
/* /*
@ -37,7 +41,6 @@
let intervalId: number | undefined; let intervalId: number | undefined;
function _showQuestion(_txt: string, _maxTime_: number): void { function _showQuestion(_txt: string, _maxTime_: number): void {
_showAnswer([]); _showAnswer([]);
globalThis.time = 0; globalThis.time = 0;
@ -58,14 +61,14 @@
} }
function _showAnswer(info: AnswerButtonInfo[], _stopTimer = false): void { function _showAnswer(info: AnswerButtonInfo[], _stopTimer = false): void {
console.log(info) console.log(info);
answerButtons.set(info); answerButtons.set(info);
// timerStopped = stopTimer; // timerStopped = stopTimer;
} }
function _updateRemaining(counts: [number, number, number], idx: number) { function _updateRemaining(counts: [number, number, number], idx: number) {
remaining.set(counts) remaining.set(counts);
remainingIndex.set(idx) remainingIndex.set(idx);
} }
globalThis._showQuestion = _showQuestion; globalThis._showQuestion = _showQuestion;
@ -85,5 +88,4 @@
}); });
</script> </script>
<ReviewerBottom {answerButtons} {remaining} {remainingIndex}></ReviewerBottom>
<ReviewerBottom {answerButtons} {remaining} {remainingIndex}></ReviewerBottom>

View file

@ -1,10 +1,14 @@
<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts"> <script lang="ts">
import { bridgeCommand } from "@tslib/bridgecommand"; import { bridgeCommand } from "@tslib/bridgecommand";
import type { AnswerButtonInfo } from "./types"; import type { AnswerButtonInfo } from "./types";
export let info: AnswerButtonInfo export let info: AnswerButtonInfo;
</script> </script>
<button on:click={()=>bridgeCommand(`ease${info.i}`)}> <button on:click={() => bridgeCommand(`ease${info.i}`)}>
{info.label} {info.label}
</button> </button>

View file

@ -1,12 +1,16 @@
<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts"> <script lang="ts">
export let underlined: boolean export let underlined: boolean;
export let cls: string export let cls: string;
</script> </script>
<span class={cls}> <span class={cls}>
{#if underlined} {#if underlined}
<u><slot/></u> <u><slot /></u>
{:else} {:else}
<slot/> <slot />
{/if} {/if}
</span> </span>

View file

@ -1,3 +1,7 @@
<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts"> <script lang="ts">
import type { Writable } from "svelte/store"; import type { Writable } from "svelte/store";
import AnswerButton from "./AnswerButton.svelte"; import AnswerButton from "./AnswerButton.svelte";
@ -6,23 +10,34 @@
import RemainingNumber from "./RemainingNumber.svelte"; import RemainingNumber from "./RemainingNumber.svelte";
import type { AnswerButtonInfo } from "./types"; import type { AnswerButtonInfo } from "./types";
export let answerButtons: Writable<AnswerButtonInfo[]> export let answerButtons: Writable<AnswerButtonInfo[]>;
export let remaining: Writable<number[]> export let remaining: Writable<number[]>;
export let remainingIndex: Writable<number> export let remainingIndex: Writable<number>;
$: console.log($remaining) $: console.log($remaining);
</script> </script>
<div id="outer" class="fancy"> <div id="outer" class="fancy">
<div id="tableinner"> <div id="tableinner">
<div> <div>
<button title={tr.actionsShortcutKey({val: "E"})} on:click={()=>bridgeCommand("edit")}>{tr.studyingEdit()}</button> <button
title={tr.actionsShortcutKey({ val: "E" })}
on:click={() => bridgeCommand("edit")}
>
{tr.studyingEdit()}
</button>
</div> </div>
<div class="review-buttons"> <div class="review-buttons">
<span> <span>
<RemainingNumber cls="new-count" underlined={$remainingIndex === 0}>{$remaining[0]}</RemainingNumber> + <RemainingNumber cls="new-count" underlined={$remainingIndex === 0}>
<RemainingNumber cls="learn-count" underlined={$remainingIndex === 1}>{$remaining[1]}</RemainingNumber> + {$remaining[0]}
<RemainingNumber cls="review-count" underlined={$remainingIndex === 2}>{$remaining[2]}</RemainingNumber> </RemainingNumber> +
<RemainingNumber cls="learn-count" underlined={$remainingIndex === 1}>
{$remaining[1]}
</RemainingNumber> +
<RemainingNumber cls="review-count" underlined={$remainingIndex === 2}>
{$remaining[2]}
</RemainingNumber>
</span> </span>
<div> <div>
{#if $answerButtons.length} {#if $answerButtons.length}
@ -30,12 +45,19 @@
<AnswerButton info={answerButton}></AnswerButton> <AnswerButton info={answerButton}></AnswerButton>
{/each} {/each}
{:else} {:else}
<button on:click={()=>bridgeCommand("ans")}>{tr.studyingShowAnswer()}</button> <button on:click={() => bridgeCommand("ans")}>
{tr.studyingShowAnswer()}
</button>
{/if} {/if}
</div> </div>
</div> </div>
<div> <div>
<button on:click={()=>bridgeCommand("more")} title={tr.actionsShortcutKey({val: "M"})}>{tr.studyingMore()}&#8615</button> <button
on:click={() => bridgeCommand("more")}
title={tr.actionsShortcutKey({ val: "M" })}
>
{tr.studyingMore()}&#8615
</button>
</div> </div>
</div> </div>
</div> </div>
@ -52,6 +74,6 @@
.review-buttons { .review-buttons {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center align-items: center;
} }
</style> </style>

View file

@ -1,7 +1,9 @@
// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
export interface AnswerButtonInfo { export interface AnswerButtonInfo {
"extra": string, "extra": string;
"key": string, "key": string;
"i": number, "i": number;
"label": string, "label": string;
"due": string, "due": string;
} }