diff light9/ascoltami/main.ts @ 2123:c4427fd59306

port some of ascoltami into lit
author drewp@bigasterisk.com
date Thu, 02 Jun 2022 23:24:09 -0700
parents 758ce4dfbd2f
children eb5d8349c871
line wrap: on
line diff
--- a/light9/ascoltami/main.ts	Thu Jun 02 23:23:01 2022 -0700
+++ b/light9/ascoltami/main.ts	Thu Jun 02 23:24:09 2022 -0700
@@ -2,24 +2,15 @@
   return document.getElementById(id)!;
 }
 
-async function onLoad() {
-  const config = await (await fetch("api/config")).json();
-  const times = config.times;
-  document.title = document.title.replace("{{host}}", config.host);
-  const h1 = document.querySelector("h1")!;
-  h1.innerText = h1.innerText.replace("{{host}}", config.host);
-
-  byId("nav").innerText = navigator.userAgent;
-  var updateFreq = navigator.userAgent.indexOf("Linux") != -1 ? 10 : 2;
-  if (navigator.userAgent.match(/Windows NT/)) {
-    // helper laptop
-    updateFreq = 10;
-  }
-  byId("updateReq").innerText = "" + updateFreq;
-
-  let currentDuration = 0;
+(window as any).finishOldStyleSetup = async (
+  times: { intro: number; post: number },
+  updateFreq: number,
+  currentDurationChanged: (d: number) => void,
+  setNextText: (t: string) => void,
+  setIsPlaying: (is: boolean) => void
+) => {
   let currentHighlightedSong = "";
-  let lastPlaying = false;
+  // let lastPlaying = false;
 
   async function updateCurrent() {
     const data = await (await fetch("api/time")).json();
@@ -29,38 +20,27 @@
     }
     byId("currentTime").innerText = data.t.toFixed(1);
     byId("leftTime").innerText = (data.duration - data.t).toFixed(1);
-    byId("leftAutoStopTime").innerText = Math.max(
-      0,
-      data.duration - times.post - data.t
-    ).toFixed(1);
+    byId("leftAutoStopTime").innerText = Math.max(0, data.duration - times.post - data.t).toFixed(1);
     byId("states").innerText = JSON.stringify(data.state);
-    currentDuration = data.duration;
+    currentDurationChanged(data.duration);
     //   document.querySelector("#timeSlider").slider({ value: data.t, max: data.duration });
-    if (data.playing != lastPlaying) {
-      document
-        .querySelectorAll(".playMode")
-        .forEach((e: Element) => e.classList.remove("active"));
-      byId(data.playing ? "cmd-play" : "cmd-stop").classList.add("active");
-      lastPlaying = data.playing;
-    }
-    byId("next").innerText = data.next;
+    setIsPlaying(data.playing);
+    setNextText(data.next);
   }
 
   function showCurrentSong(uri: string) {
-    document
-      .querySelectorAll(".songs div")
-      .forEach((row: Element, i: number) => {
-        if (row.querySelector("button")!.dataset.uri == uri) {
-          row.classList.add("currentSong");
-        } else {
-          row.classList.remove("currentSong");
-        }
-      });
+    document.querySelectorAll(".songs div").forEach((row: Element, i: number) => {
+      if (row.querySelector("button")!.dataset.uri == uri) {
+        row.classList.add("currentSong");
+      } else {
+        row.classList.remove("currentSong");
+      }
+    });
     currentHighlightedSong = uri;
   }
 
   const data = await (await fetch("api/songs")).json();
-  data.songs.forEach((song) => {
+  data.songs.forEach((song: { uri: string; label: string }) => {
     const button = document.createElement("button");
     // link is just for dragging, not clicking
     const link = document.createElement("a");
@@ -86,58 +66,9 @@
     });
     const dv = document.createElement("div");
     dv.appendChild(button);
-    document.querySelector(".songs").appendChild(dv);
+    document.querySelector(".songs")!.appendChild(dv);
   });
 
-  document.addEventListener("keypress", (ev) => {
-    if (ev.which == 115) {
-      byId("cmd-stop").click();
-      return false;
-    }
-    if (ev.which == 112) {
-      byId("cmd-play").click();
-      return false;
-    }
-    if (ev.which == 105) {
-      byId("cmd-intro").click();
-      return false;
-    }
-    if (ev.which == 116) {
-      byId("cmd-post").click();
-      return false;
-    }
-
-    if (ev.key == "g") {
-      byId("cmd-go").click();
-      return false;
-    }
-    return true;
-  });
-
-  async function postJson(url: string, jsBody: Object) {
-    return fetch(url, {
-      method: "POST",
-      headers: { "Content-Type": "applcation/json" },
-      body: JSON.stringify(jsBody),
-    });
-  }
-
-  byId("cmd-stop").addEventListener("click", (ev: Event) =>
-    postJson("api/time", { pause: true })
-  );
-  byId("cmd-play").addEventListener("click", (ev: Event) =>
-    postJson("api/time", { resume: true })
-  );
-  byId("cmd-intro").addEventListener("click", (ev: Event) =>
-    postJson("api/time", { t: times.intro, resume: true })
-  );
-  byId("cmd-post").addEventListener("click", (ev: Event) =>
-    postJson("api/time", { t: currentDuration - times.post, resume: true })
-  );
-  byId("cmd-go").addEventListener("click", (ev: Event) =>
-    postJson("api/go", {})
-  );
-
   //   var pendingSlide = false;
   //   $("#timeSlider").slider({
   //     step: 0.01,
@@ -163,15 +94,11 @@
     if (recentUpdates.length > 1) {
       if (+new Date() - recentUpdates[recentUpdates.length - 1] > 1000) {
         byId("updateActual").innerText = "(stalled)";
-        document
-          .querySelectorAll(".dimStalled")
-          .forEach((el) => el.classList.add("stalled"));
+        document.querySelectorAll(".dimStalled").forEach((el) => el.classList.add("stalled"));
         return;
       }
 
-      var avgMs =
-        (recentUpdates[recentUpdates.length - 1] - recentUpdates[0]) /
-        (recentUpdates.length - 1);
+      var avgMs = (recentUpdates[recentUpdates.length - 1] - recentUpdates[0]) / (recentUpdates.length - 1);
       byId("updateActual").innerText = "" + Math.round(1000 / avgMs);
     }
   }
@@ -188,5 +115,4 @@
     whenDone();
   }
   updateLoop();
-}
-onLoad();
+};