Display relative change

This commit is contained in:
Luc Mcgrady 2025-05-22 12:07:28 +01:00
parent 989494c1f7
commit 6538645446
No known key found for this signature in database
GPG key ID: 4F3D7A0B17CC3D9C
3 changed files with 43 additions and 16 deletions

View file

@ -470,12 +470,10 @@ deck-config-compute-optimal-retention-tooltip4 =
willing to invest more study time to achieve it. Setting your desired retention lower than the minimum
is not recommended, as it will lead to a higher workload, because of the high forgetting rate.
deck-config-please-save-your-changes-first = Please save your changes first.
deck-config-a-100-day-interval =
{ $days ->
[one] A 100 day interval will become { $days } day.
*[other] A 100 day interval will become { $days } days.
}
deck-config-90-percent-desired-retention-warning = The higher this value, the more frequently cards will be shown to you.
deck-config-intervals-percentage-increase = Your intervals will increase by { $percent }%.
deck-config-intervals-percentage-decrease = Your intervals will decrease by { $percent }%.
deck-config-intervals-percentage-unchanged = Your intervals will remain unchanged
deck-config-percent-of-reviews =
{ $reviews ->
[one] { $pct }% of { $reviews } review
@ -513,6 +511,12 @@ deck-config-fsrs-simulator-radio-memorized = Memorized
## NO NEED TO TRANSLATE. This text is no longer used by Anki, and will be removed in the future.
deck-config-a-100-day-interval =
{ $days ->
[one] A 100 day interval will become { $days } day.
*[other] A 100 day interval will become { $days } days.
}
deck-config-fsrs-simulator-y-axis-title-time = Review Time/Day
deck-config-fsrs-simulator-y-axis-title-count = Review Count/Day
deck-config-fsrs-simulator-y-axis-title-memorized = Memorized Total

View file

@ -42,7 +42,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
$daysSinceLastOptimization > 30 ? tr.deckConfigTimeToOptimize() : "";
let desiredRetentionFocused = false;
let desiredRetentionEverFocused = false;
$: if (desiredRetentionFocused) desiredRetentionEverFocused = true
const startingDesiredRetention = $config.desiredRetention.toFixed(2);
$: if (desiredRetentionFocused) {
desiredRetentionEverFocused = true;
}
$: showDesiredRetentionTooltip = newlyEnabled || desiredRetentionEverFocused;
let computeParamsProgress: ComputeParamsProgress | undefined;
@ -55,7 +58,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
$: desiredRetentionWarning = getRetentionWarning(
roundedRetention,
fsrsParams($config),
showDesiredRetentionTooltip
showDesiredRetentionTooltip,
);
$: retentionWarningClass = getRetentionWarningClass(roundedRetention);
@ -73,20 +76,38 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
reviewOrder: $config.reviewOrder,
});
function getRetentionWarning(retention: number, params: number[], showDesiredRetentionTooltip: boolean): string {
if (!showDesiredRetentionTooltip && getRetentionWarningClass(retention) === "alert-info") {
return "";
}
function getInterval(retention: number, params: number[]) {
const decay = params.length > 20 ? -params[20] : -0.5; // default decay for FSRS-4.5 and FSRS-5
const factor = 0.9 ** (1 / decay) - 1;
const stability = 100;
const days = Math.round(
(stability / factor) * (Math.pow(retention, 1 / decay) - 1),
);
if (days === 100) {
return tr.deckConfig90PercentDesiredRetentionWarning();
return days;
}
function getRetentionWarning(
retention: number,
params: number[],
showDesiredRetentionTooltip: boolean,
): string {
if (
!showDesiredRetentionTooltip &&
getRetentionWarningClass(retention) === "alert-info"
) {
return "";
}
if (+startingDesiredRetention == roundedRetention) {
return tr.deckConfigIntervalsPercentageUnchanged();
}
const before = getInterval(+startingDesiredRetention, params);
const after = getInterval(retention, params);
const percent = 100 * (after / before) - 100;
if (percent > 0) {
return tr.deckConfigIntervalsPercentageIncrease({ percent });
} else {
return tr.deckConfigIntervalsPercentageDecrease({ percent: -percent });
}
return tr.deckConfigA100DayInterval({ days });
}
function getRetentionWarningClass(retention: number): string {

View file

@ -26,7 +26,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
const fsrs = state.fsrs;
let newlyEnabled = false;
$: if (!$fsrs) newlyEnabled = true
$: if (!$fsrs) {
newlyEnabled = true;
}
const settings = {
fsrs: {