Aide : le terme ouvert s'arrête sous la barre ; test du match : attendre l'enregistrement avant de recharger
Après la fusion de main, l'aide amenait la carte du terme en haut alors que la marge de défilement est posée sur son titre (dt). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
414dfa79f8
commit
1e9dfbb74b
+1
-1
@@ -325,7 +325,7 @@ export function createHelpView(container: HTMLElement, tabs: HTMLElement): HelpV
|
||||
lastOpen = opened;
|
||||
// La barre haute de l'aide reste en vue (app.css) : ce qu'on
|
||||
// amène en haut s'arrête 12 px sous elle (scroll-margin-top).
|
||||
const target = opened?.section ?? (term === null ? undefined : terms.get(term)?.card);
|
||||
const target = opened?.section ?? (term === null ? undefined : terms.get(term)?.dt);
|
||||
if (target !== undefined) {
|
||||
target.scrollIntoView({ block: "start" });
|
||||
} else if (closed !== null) {
|
||||
|
||||
@@ -290,6 +290,46 @@ for (;;) {
|
||||
if (!reloaded) {
|
||||
// Le match continue après un rechargement de la page.
|
||||
reloaded = true;
|
||||
// L'application enregistre sans attendre : on laisse IndexedDB
|
||||
// finir d'écrire la nouvelle partie (Firefox peut être lent).
|
||||
await until("partie suivante enregistrée", (score) => new Promise((resolve) => {
|
||||
const open = indexedDB.open("ustagammon");
|
||||
open.onerror = () => resolve(false);
|
||||
open.onsuccess = () => {
|
||||
const tx = open.result.transaction(["settings", "games"]);
|
||||
const current = tx.objectStore("settings").get("current");
|
||||
current.onsuccess = () => {
|
||||
const id = current.result?.value;
|
||||
if (typeof id !== "string") {
|
||||
resolve(false);
|
||||
return;
|
||||
}
|
||||
const summary = tx.objectStore("games").get(id);
|
||||
summary.onsuccess = () => {
|
||||
const s = summary.result;
|
||||
resolve(s?.status === "playing" &&
|
||||
`${s.match?.score.computer}-${s.match?.score.player}` === score);
|
||||
open.result.close();
|
||||
};
|
||||
};
|
||||
};
|
||||
}), `${next.computer}-${next.player}`).catch(async (error) => {
|
||||
const stored = await page.evaluate(() => new Promise((resolve) => {
|
||||
const open = indexedDB.open("ustagammon");
|
||||
open.onerror = () => resolve(`IndexedDB : ${open.error}`);
|
||||
open.onsuccess = () => {
|
||||
const all = open.result.transaction(["settings", "games"]);
|
||||
const current = all.objectStore("settings").get("current");
|
||||
const games = all.objectStore("games").getAll();
|
||||
games.onsuccess = () => resolve(JSON.stringify({
|
||||
current: current.result,
|
||||
games: games.result.map((g) => [g.id, g.status, g.match, g.updatedAt]),
|
||||
local: Object.keys(localStorage),
|
||||
}));
|
||||
};
|
||||
}));
|
||||
throw new Error(`${error.message} ; enregistré : ${stored}`);
|
||||
});
|
||||
await page.reload();
|
||||
await until("partie reprise", () => !document.body.classList.contains("busy"));
|
||||
const again = await shownMatch();
|
||||
|
||||
Reference in New Issue
Block a user