Browse Source

Le Html est généré par le script

Sangfroid 1 month ago
parent
commit
8e8f7f2801
2 changed files with 28 additions and 10 deletions
  1. 2 6
      index.html
  2. 26 4
      main.js

+ 2 - 6
index.html

@@ -4,14 +4,10 @@
     <meta charset="UTF-8" />
     <link rel="icon" type="image/svg+xml" href="/vite.svg" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Vite App</title>
+    <title>Compteur</title>
   </head>
   <body>
-    <div id="app">
-      <h1></h1>
-      <div class="countdown-timer" data-id="4"></div>
-      <div class="message"></div>
-    </div>
+    <div id="app" data-id="2"></div>
     <script type="module" src="/main.js"></script>
   </body>
 </html>

+ 26 - 4
main.js

@@ -3,11 +3,17 @@ import { Countdown } from './counter.js'
 import { fetchObject } from './fetch.js';
 
 // select elements
-const app = document.querySelector('.countdown-timer');
-const message = document.querySelector('.message');
-const heading = document.querySelector('h1');
+const main = document.querySelector('#app');
+const heading = document.createElement('h1');
+const message = document.createElement('div');
+message.classList.add('message');
+const app = document.createElement('div');
+app.classList.add('countdown-timer');
+main.appendChild(heading);
+main.appendChild(app);
+main.appendChild(message);
 
-const api = new fetchObject("http://localhost:8000/counter", app.dataset.id);
+const api = new fetchObject("http://localhost:8000/counter", main.dataset.id);
 constcheckCounter();
 
 // Get the new year 
@@ -60,10 +66,26 @@ const complete = () => {
   constcheckCounter();
 };
 
+const showErrorMessage = (error) => {
+  message.innerHTML = 'Erreur ' + error.code + ' - ' + error.message;
+  const buttonRestart = document.createElement('button');
+  buttonRestart.innerText = "Réessayer";
+  app.appendChild(buttonRestart);
+  buttonRestart.addEventListener('click', (e) => {
+    buttonRestart.remove();
+    constcheckCounter();
+  })
+}
+
 
 function constcheckCounter () {
   const intervalId = setInterval(async () => {
     const counter = await api.getCounter();
+    if (counter.error) {
+      clearInterval(intervalId);
+      showErrorMessage(counter.error);
+      return;
+    }
     heading.innerText = counter.name;
     if (counter.state === 'ready') {
       hideMessage();