From e642e919b5bf7b6191147ffb2effe916d40f9121 Mon Sep 17 00:00:00 2001
From: Pierre Jarriges <pierre.jarriges@tutanota.com>
Date: Mon, 8 Nov 2021 17:53:51 +0100
Subject: [PATCH] play button loading state

---
 public/games/games.js                         | 16 +++++++++---
 public/style/style.css                        | 25 +------------------
 .../pages/games/components/game-article.js    | 16 +++++++++---
 3 files changed, 25 insertions(+), 32 deletions(-)

diff --git a/public/games/games.js b/public/games/games.js
index 23f3b74..573b115 100644
--- a/public/games/games.js
+++ b/public/games/games.js
@@ -3507,7 +3507,11 @@ class GameArticle {
         };
     }
 
-    load_and_run_mentalo_game(filename) {
+    load_and_run_mentalo_game(filename, button_element) {
+        const button_text = button_element.innerHTML;
+        button_element.innerHTML = "Loading ...";
+        button_element.style.pointerEvents = "none";
+
         fetch_json_or_error_text(`${data_url}/${filename}`)
             .then(game_data => {
                 const container = document.createElement("div");
@@ -3540,15 +3544,19 @@ class GameArticle {
                 engine.run_game();
             })
             .catch(err => console.log(err))
+            .finally(() => {
+                button_element.innerHTML = button_text;
+                button_element.style.pointerEvents = "unset";
+            });
     }
 
-    handle_click_play(filename, engine) {
+    handle_click_play(filename, engine, e) {
         switch (engine) {
             case "mentalo":
-                this.load_and_run_mentalo_game(filename);
+                this.load_and_run_mentalo_game(filename, e.target);
                 break;
             default:
-                alert("Error, unkown engine")
+                console.log("Error, unkown engine")
                 return;
         }
     }
diff --git a/public/style/style.css b/public/style/style.css
index 61b9838..3a5bebb 100644
--- a/public/style/style.css
+++ b/public/style/style.css
@@ -388,6 +388,7 @@ main #page-container .article-details ul.details-list {
 main #page-container .article-details ul.details-list .detail {
   display: grid;
   grid-template-columns: 1fr auto;
+  gap: 20px;
   font-size: 12px;
   border-bottom: 1px solid #d4d9dd;
   padding: 5px 0;
@@ -396,30 +397,6 @@ main #page-container .article-details ul.details-list .detail label {
   font-weight: bold;
   color: #6b7880;
 }
-main #page-container .article-details ul.details-list .detail ul {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 10px;
-}
-main #page-container .article-details .detail {
-  display: grid;
-  grid-template-columns: 1fr auto;
-  font-size: 12px;
-  border-bottom: 1px solid #d4d9dd;
-  padding: 5px 0;
-}
-main #page-container .article-details .detail label {
-  font-weight: bold;
-  color: #6b7880;
-}
-main #page-container .article-details .detail .label {
-  color: #aabbc8;
-}
-main #page-container .article-details .detail ul {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 10px;
-}
 main #page-container #home-page {
   display: flex;
   flex-direction: column;
diff --git a/website/src/pages/games/components/game-article.js b/website/src/pages/games/components/game-article.js
index e8ace45..6308e65 100644
--- a/website/src/pages/games/components/game-article.js
+++ b/website/src/pages/games/components/game-article.js
@@ -33,7 +33,11 @@ class GameArticle {
         };
     }
 
-    load_and_run_mentalo_game(filename) {
+    load_and_run_mentalo_game(filename, button_element) {
+        const button_text = button_element.innerHTML;
+        button_element.innerHTML = "Loading ...";
+        button_element.style.pointerEvents = "none";
+
         fetch_json_or_error_text(`${data_url}/${filename}`)
             .then(game_data => {
                 const container = document.createElement("div");
@@ -66,15 +70,19 @@ class GameArticle {
                 engine.run_game();
             })
             .catch(err => console.log(err))
+            .finally(() => {
+                button_element.innerHTML = button_text;
+                button_element.style.pointerEvents = "unset";
+            });
     }
 
-    handle_click_play(filename, engine) {
+    handle_click_play(filename, engine, e) {
         switch (engine) {
             case "mentalo":
-                this.load_and_run_mentalo_game(filename);
+                this.load_and_run_mentalo_game(filename, e.target);
                 break;
             default:
-                alert("Error, unkown engine")
+                console.log("Error, unkown engine")
                 return;
         }
     }
-- 
GitLab