Match, niveaux et réglages : écran Nouvelle partie, Crawford, Jacoby (1c) #49
+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