Spaces:
Running
Running
Download views/gate.js from apirrone/reachy_mini_simon_js: direct link, hf CLI and curl.
- Browser
- Download file 2.55 kB
-
https://huggingface.co/spaces/apirrone/reachy_mini_simon_js/resolve/main/views/gate.js
- Command line
-
hf download hf://spaces/apirrone/reachy_mini_simon_js/views/gate.js
-
curl -L -o gate.js https://huggingface.co/spaces/apirrone/reachy_mini_simon_js/resolve/main/views/gate.js
2.55 kB
| // Sign-in + robot picker (same pattern as the radio app). | |
| import { state, render } from "../lib/state.js"; | |
| import { escapeHtml } from "../lib/util.js"; | |
| export function createGate({ robot, onPickedRobot }) { | |
| function GateView() { | |
| const wrap = document.createElement("div"); | |
| wrap.className = "gate"; | |
| const card = document.createElement("div"); | |
| card.className = "gate-card"; | |
| if (state.authChecking) { | |
| card.innerHTML = ` | |
| <div class="big-emoji">🎮</div> | |
| <h1>Reachy Mini Simon</h1> | |
| <p>Checking sign-in…</p>`; | |
| } else if (!robot.isAuthenticated) { | |
| card.innerHTML = ` | |
| <div class="big-emoji">🎮</div> | |
| <h1>Reachy Mini Simon</h1> | |
| <p>Sign in with Hugging Face to connect to your Reachy Mini.</p> | |
| <button class="btn primary btn-block" id="login">Sign in with Hugging Face</button>`; | |
| card.querySelector("#login").onclick = () => robot.login(); | |
| } else if (!robot.robots.length) { | |
| card.innerHTML = ` | |
| <div class="big-emoji">🤖</div> | |
| <h1>Looking for your robot…</h1> | |
| <p>Signed in as ${escapeHtml(robot.username || "—")}.</p>`; | |
| } else { | |
| card.innerHTML = ` | |
| <div class="big-emoji">🤖</div> | |
| <h1>Pick a robot</h1> | |
| <p>Signed in as ${escapeHtml(robot.username || "—")}.</p> | |
| <div class="robot-list" id="rlist"></div>`; | |
| const list = card.querySelector("#rlist"); | |
| for (const r of robot.robots) { | |
| const row = document.createElement("button"); | |
| row.className = "row"; | |
| row.innerHTML = ` | |
| <div class="emoji">🤖</div> | |
| <div class="grow"> | |
| <div class="title">${escapeHtml(r.meta?.name || r.id)}</div> | |
| <div class="meta">${escapeHtml(r.id)}</div> | |
| </div> | |
| <span class="chev">›</span>`; | |
| row.onclick = () => pickRobot(r); | |
| list.appendChild(row); | |
| } | |
| } | |
| wrap.appendChild(card); | |
| return wrap; | |
| } | |
| async function pickRobot(r) { | |
| try { await robot.startSession(r.id); } | |
| catch (e) { alert(`Session failed: ${e.message}`); return; } | |
| state.view = "game"; | |
| onPickedRobot?.(); | |
| render(); | |
| } | |
| return { GateView }; | |
| } | |