diff --git a/widgets/horizontal/config.js b/widgets/horizontal/config.js index 30ef289..032dd7c 100644 --- a/widgets/horizontal/config.js +++ b/widgets/horizontal/config.js @@ -3,7 +3,7 @@ const configs = (function () { const streamerBotSettings = { host: "127.0.0.1", - port: 8080, + port: 6968, endpoint: "/", }; diff --git a/widgets/horizontal/scripts/tasklist-view.js b/widgets/horizontal/scripts/tasklist-view.js index be4b19f..b025854 100644 --- a/widgets/horizontal/scripts/tasklist-view.js +++ b/widgets/horizontal/scripts/tasklist-view.js @@ -529,9 +529,13 @@ class TaskList { if (needs) { if (!clone) { - clone = this.#els.content.cloneNode(true); + // Build the loop copy from data. Deep-cloning the live content also + // copies temporary width/opacity styles from enter animations, + // leaving the copy collapsed and causing a visible jump at the seam. + clone = this.#els.content.cloneNode(false); clone.id = ""; clone.classList.add("scroll-clone"); + this.#patchContainer(clone, this.#data, false); this.#els.track.appendChild(clone); } else { this.#patchContainer(clone, this.#data, false); diff --git a/widgets/shared/scripts/streamerbot.js b/widgets/shared/scripts/streamerbot.js index 0443eee..82f1e0e 100644 --- a/widgets/shared/scripts/streamerbot.js +++ b/widgets/shared/scripts/streamerbot.js @@ -39,10 +39,11 @@ function taskColorFromSettings(sectionId) { async function onChatMessage(data) { const userColor = data.data.user.color; + const userType = data.data.user.type; if (userColor != undefined && userColor != "undefined") { const userId = data.data.user.id; - const key = `twitch-${userId}`; + const key = `${userType}-${userId}`; localStorage.setItem(`${key}-color`, userColor); userColors[`${key}-color`] = userColor; @@ -176,7 +177,12 @@ function onCustom(payload) { taskList.focusTask(id, body.index); break; case "edit": - taskList.editTask(id, body.index, body.task, taskColorFromSettings(id)); + taskList.editTask( + id, + body.index, + body.task, + taskColorFromSettings(id), + ); break; case "remove": taskList.removeTask(id, body.index); diff --git a/widgets/streamer-only/scripts/tasklist-view.js b/widgets/streamer-only/scripts/tasklist-view.js index 17c12dc..de97448 100644 --- a/widgets/streamer-only/scripts/tasklist-view.js +++ b/widgets/streamer-only/scripts/tasklist-view.js @@ -505,9 +505,13 @@ class TaskList { if (needs) { if (!clone) { - clone = this.#els.content.cloneNode(true); + // Build the loop copy from data. Deep-cloning the live content also + // copies temporary height/opacity styles from enter animations, + // leaving the copy collapsed and causing a visible jump at the seam. + clone = this.#els.content.cloneNode(false); clone.id = ""; clone.classList.add("scroll-clone"); + this.#patchContainer(clone, this.#data, false); this.#els.track.appendChild(clone); } else { this.#patchContainer(clone, this.#data, false); diff --git a/widgets/vertical/scripts/tasklist-view.js b/widgets/vertical/scripts/tasklist-view.js index ff992a9..55f5860 100644 --- a/widgets/vertical/scripts/tasklist-view.js +++ b/widgets/vertical/scripts/tasklist-view.js @@ -528,9 +528,13 @@ class TaskList { if (needs) { if (!clone) { - clone = this.#els.content.cloneNode(true); + // Build the loop copy from data. Deep-cloning the live content also + // copies temporary height/opacity styles from enter animations, + // leaving the copy collapsed and causing a visible jump at the seam. + clone = this.#els.content.cloneNode(false); clone.id = ""; clone.classList.add("scroll-clone"); + this.#patchContainer(clone, this.#data, false); this.#els.track.appendChild(clone); } else { this.#patchContainer(clone, this.#data, false);