Mes parties : suppression en deux touchers, sans boîte du navigateur

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-03 20:24:24 +01:00
co-authored by Claude Opus 5.5
parent 196ccd4b9f
commit 71ee3605d4
3 changed files with 12 additions and 6 deletions
-1
View File
@@ -822,7 +822,6 @@ export function startApp(options: AppOptions): void {
},
remove: options.games.remove,
exportSgf: options.games.exportSgf,
confirm: (question) => window.confirm(question),
});
/** Joue un demi-coup du joueur ; le coup attend ensuite sa suite ou sa
+1 -1
View File
@@ -31,7 +31,7 @@ export const GAMES_TEXTS = {
resumeBranch: "Reprendre cette branche",
exportSgf: "Exporter (SGF)",
remove: "Supprimer",
confirmRemove: "Supprimer définitivement cette partie et toutes ses branches ?",
confirmRemove: "Supprimer pour de bon (branches comprises)",
shown: "partie affichée",
busy: "Attendez la fin du coup en cours.",
failed: (message: string) => `Erreur : ${message}`,
+11 -4
View File
@@ -28,7 +28,6 @@ export interface GamesViewOptions {
readonly remove: (id: string) => Promise<void>;
/** Le fichier SGF d'une partie : son nom et son contenu. */
readonly exportSgf: (id: string) => Promise<{ fileName: string; text: string }>;
readonly confirm: (question: string) => boolean;
}
export interface GamesView {
@@ -132,13 +131,21 @@ export function createGamesView(options: GamesViewOptions): GamesView {
"secondary",
"export",
),
// Supprimer se fait en deux touchers, sans boîte du navigateur :
// le premier change le bouton en demande de confirmation.
button(
GAMES_TEXTS.remove,
run(async () => {
if (options.confirm(GAMES_TEXTS.confirmRemove)) {
await options.remove(game.id);
await render();
const remove = item.querySelector<HTMLElement>('[data-action="remove"]');
if (remove?.dataset.armed !== "true") {
if (remove !== null) {
remove.dataset.armed = "true";
remove.textContent = GAMES_TEXTS.confirmRemove;
}
return;
}
await options.remove(game.id);
await render();
}),
"secondary",
"remove",