mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
Remove use of window.location.href in CardInfoDialog (#3621)
* Replace window.location in CardInfoDialog with load_sveltekit_page * Fix format * Fix ForgettingCurve's reactivity * Props' default args aren't reactive * Add global _updateCardId fn to card-info * Use _updateCardId to reactively update card-info * Fix format * Fix type * Use dummy form instead of window global for client-side nav * Fallback to window.location in case form hasn't been rendered * Use window.postMessage instead of dummy <form>
This commit is contained in:
parent
adcac61b44
commit
b726e28229
4 changed files with 24 additions and 14 deletions
|
@ -67,19 +67,13 @@ class CardInfoDialog(QDialog):
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
def update_card(self, card_id: CardId | None) -> None:
|
def update_card(self, card_id: CardId | None) -> None:
|
||||||
from aqt.theme import theme_manager
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.mw.col.get_card(card_id)
|
self.mw.col.get_card(card_id)
|
||||||
except NotFoundError:
|
except NotFoundError:
|
||||||
card_id = None
|
card_id = None
|
||||||
|
|
||||||
if theme_manager.night_mode:
|
|
||||||
extra = "#night"
|
|
||||||
else:
|
|
||||||
extra = ""
|
|
||||||
assert self.web is not None
|
assert self.web is not None
|
||||||
self.web.eval(f"window.location.href = '/card-info/{card_id}{extra}';")
|
self.web.eval(f"window.postMessage('{card_id}');")
|
||||||
|
|
||||||
def reject(self) -> None:
|
def reject(self) -> None:
|
||||||
if self._on_close:
|
if self._on_close:
|
||||||
|
|
|
@ -15,8 +15,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
|
||||||
export let stats: CardStatsResponse | null = null;
|
export let stats: CardStatsResponse | null = null;
|
||||||
export let showRevlog: boolean = true;
|
export let showRevlog: boolean = true;
|
||||||
export let fsrsEnabled: boolean = stats?.memoryState != null;
|
|
||||||
export let desiredRetention: number = stats?.desiredRetention ?? 0.9;
|
$: fsrsEnabled = stats?.memoryState != null;
|
||||||
|
$: desiredRetention = stats?.desiredRetention ?? 0.9;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Container breakpoint="md" --gutter-inline="1rem" --gutter-block="0.5rem">
|
<Container breakpoint="md" --gutter-inline="1rem" --gutter-block="0.5rem">
|
||||||
|
|
|
@ -8,7 +8,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
import Graph from "../graphs/Graph.svelte";
|
import Graph from "../graphs/Graph.svelte";
|
||||||
import NoDataOverlay from "../graphs/NoDataOverlay.svelte";
|
import NoDataOverlay from "../graphs/NoDataOverlay.svelte";
|
||||||
import AxisTicks from "../graphs/AxisTicks.svelte";
|
import AxisTicks from "../graphs/AxisTicks.svelte";
|
||||||
import { writable } from "svelte/store";
|
import { writable, type Writable } from "svelte/store";
|
||||||
import InputBox from "../graphs/InputBox.svelte";
|
import InputBox from "../graphs/InputBox.svelte";
|
||||||
import {
|
import {
|
||||||
renderForgettingCurve,
|
renderForgettingCurve,
|
||||||
|
@ -24,17 +24,24 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
let svg = null as HTMLElement | SVGElement | null;
|
let svg = null as HTMLElement | SVGElement | null;
|
||||||
const bounds = defaultGraphBounds();
|
const bounds = defaultGraphBounds();
|
||||||
const title = tr.cardStatsFsrsForgettingCurveTitle();
|
const title = tr.cardStatsFsrsForgettingCurveTitle();
|
||||||
const filteredRevlog = filterRevlog(revlog);
|
|
||||||
const maxDays = calculateMaxDays(filteredRevlog, TimeRange.AllTime);
|
$: filteredRevlog = filterRevlog(revlog);
|
||||||
|
$: maxDays = calculateMaxDays(filteredRevlog, TimeRange.AllTime);
|
||||||
|
|
||||||
let defaultTimeRange = TimeRange.Week;
|
let defaultTimeRange = TimeRange.Week;
|
||||||
if (maxDays > 365) {
|
const timeRange: Writable<TimeRange> = writable(defaultTimeRange);
|
||||||
|
|
||||||
|
// https://github.com/sveltejs/svelte/issues/13811
|
||||||
|
// svelte-ignore reactive_declaration_non_reactive_property
|
||||||
|
$: if (maxDays > 365) {
|
||||||
defaultTimeRange = TimeRange.AllTime;
|
defaultTimeRange = TimeRange.AllTime;
|
||||||
} else if (maxDays > 30) {
|
} else if (maxDays > 30) {
|
||||||
defaultTimeRange = TimeRange.Year;
|
defaultTimeRange = TimeRange.Year;
|
||||||
} else if (maxDays > 7) {
|
} else if (maxDays > 7) {
|
||||||
defaultTimeRange = TimeRange.Month;
|
defaultTimeRange = TimeRange.Month;
|
||||||
}
|
}
|
||||||
const timeRange = writable(defaultTimeRange);
|
|
||||||
|
$: $timeRange = defaultTimeRange;
|
||||||
|
|
||||||
$: renderForgettingCurve(
|
$: renderForgettingCurve(
|
||||||
filteredRevlog,
|
filteredRevlog,
|
||||||
|
|
|
@ -7,10 +7,18 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||||
|
|
||||||
import CardInfo from "../CardInfo.svelte";
|
import CardInfo from "../CardInfo.svelte";
|
||||||
import type { PageData } from "./$types";
|
import type { PageData } from "./$types";
|
||||||
|
import { goto } from "$app/navigation";
|
||||||
|
|
||||||
export let data: PageData;
|
export let data: PageData;
|
||||||
|
|
||||||
const showRevlog = $page.url.searchParams.get("revlog") !== "0";
|
const showRevlog = $page.url.searchParams.get("revlog") !== "0";
|
||||||
|
|
||||||
|
function updateCardId(evt: MessageEvent) {
|
||||||
|
goto(`/card-info/${evt.data}`);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- used by CardInfoDialog.update_card -->
|
||||||
|
<svelte:window on:message={updateCardId} />
|
||||||
|
|
||||||
<CardInfo stats={data.info} {showRevlog} />
|
<CardInfo stats={data.info} {showRevlog} />
|
||||||
|
|
Loading…
Reference in a new issue