diff --git a/src/main/java/com/imgfloat/app/model/Asset.java b/src/main/java/com/imgfloat/app/model/Asset.java index d476b31..c81430f 100644 --- a/src/main/java/com/imgfloat/app/model/Asset.java +++ b/src/main/java/com/imgfloat/app/model/Asset.java @@ -22,7 +22,7 @@ public class Asset { this.x = 0; this.y = 0; this.rotation = 0; - this.hidden = true; + this.hidden = false; this.createdAt = Instant.now(); } diff --git a/src/main/resources/static/js/admin.js b/src/main/resources/static/js/admin.js index 787c379..cf5876c 100644 --- a/src/main/resources/static/js/admin.js +++ b/src/main/resources/static/js/admin.js @@ -14,7 +14,6 @@ function connect() { handleEvent(body); }); fetchAssets(); - fetchAdmins(); }); } @@ -22,18 +21,6 @@ function fetchAssets() { fetch(`/api/channels/${broadcaster}/assets`).then(r => r.json()).then(renderAssets); } -function fetchAdmins() { - fetch(`/api/channels/${broadcaster}/admins`).then(r => r.json()).then(list => { - const adminList = document.getElementById('admin-list'); - adminList.innerHTML = ''; - list.forEach(a => { - const li = document.createElement('li'); - li.textContent = a; - adminList.appendChild(li); - }); - }).catch(() => {}); -} - function renderAssets(list) { list.forEach(asset => assets.set(asset.id, asset)); draw(); @@ -77,16 +64,6 @@ function uploadAsset() { }); } -function addAdmin() { - const usernameInput = document.getElementById('new-admin'); - const username = usernameInput.value; - fetch(`/api/channels/${broadcaster}/admins`, { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({username}) - }).then(() => fetchAdmins()); -} - window.addEventListener('resize', () => { canvas.width = canvas.offsetWidth; canvas.height = canvas.offsetHeight; diff --git a/src/main/resources/static/js/dashboard.js b/src/main/resources/static/js/dashboard.js new file mode 100644 index 0000000..1b1236d --- /dev/null +++ b/src/main/resources/static/js/dashboard.js @@ -0,0 +1,44 @@ +function renderAdmins(list) { + const adminList = document.getElementById('admin-list'); + adminList.innerHTML = ''; + if (!list || list.length === 0) { + const empty = document.createElement('li'); + empty.textContent = 'No channel admins yet'; + adminList.appendChild(empty); + return; + } + + list.forEach((admin) => { + const li = document.createElement('li'); + li.textContent = admin; + adminList.appendChild(li); + }); +} + +function fetchAdmins() { + fetch(`/api/channels/${broadcaster}/admins`) + .then((r) => r.json()) + .then(renderAdmins) + .catch(() => renderAdmins([])); +} + +function addAdmin() { + const input = document.getElementById('new-admin'); + const username = input.value.trim(); + if (!username) { + alert('Enter a Twitch username to add as an admin.'); + return; + } + + fetch(`/api/channels/${broadcaster}/admins`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username }) + }) + .then(() => { + input.value = ''; + fetchAdmins(); + }); +} + +fetchAdmins(); diff --git a/src/main/resources/templates/admin.html b/src/main/resources/templates/admin.html index 49f4c72..6646814 100644 --- a/src/main/resources/templates/admin.html +++ b/src/main/resources/templates/admin.html @@ -20,13 +20,8 @@
-

Admins

- - - -
-
-

Assets

+

Overlay assets

+

Upload images to place on the broadcaster's overlay. Changes are visible to the broadcaster instantly.

diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html index 3c4f886..c4a17f2 100644 --- a/src/main/resources/templates/dashboard.html +++ b/src/main/resources/templates/dashboard.html @@ -16,6 +16,15 @@
+
+

Channel admins

+

Add trusted moderators who can upload overlay assets on your behalf.

+
+ + +
+ +

Channels you administer

@@ -28,5 +37,9 @@
+ +