Files
snek/src/snek/templates/web.html
T
retoor e290a9f5cb feat: add asyncssh dependency, snecssh service, gallery CSS, and traceback in RPC error handling
Add snecssh service to compose.yml with asyncssh dependency in pyproject.toml. Introduce gallery and tile CSS classes in base.css for image grid layout. Include commented-out tile-grid and upload-button elements in chat-window.js. Load media-upload.js script in web.html template. Wrap RPC method execution in try-except to return structured error response with exception message and formatted traceback.
2025-01-31 11:06:23 +00:00

62 lines
1.9 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Snek</title>
<script src="/media-upload.js"></script>
<script src="/html-frame.js"></script>
<script src="/schedule.js"></script>
<script src="/app.js"></script>
<script src="/models.js"></script>
<script src="/message-list.js"></script>
<script src="/message-list-manager.js"></script>
<script src="/chat-input.js"></script>
<script src="/chat-window.js"></script>
<link rel="stylesheet" href="/base.css">
<link rel="manifest" href="/manifest.json" />
<link rel="icon" type="image/png" href="/image/snek1.png" sizes="32x32">
</head>
<body>
<header>
<div class="logo">Snek</div>
<nav>
<a href="/web.html">Home</a>
<a style="display:none" id="install-button" href="#">Install</a>
<a href="#">Settings</a>
<a href="/logout.html">Logout</a>
</nav>
</header>
<main>
<aside class="sidebar">
<h2>Chat Rooms</h2>
<ul>
<li><a href="#">General</a></li>
<li><a href="#">Development</a></li>
<li><a href="#">Support</a></li>
<li><a href="#">Random</a></li>
</ul>
</aside>
<chat-window class="chat-area"></chat-window>
</main>
<script>
let installPrompt = null
window.addEventListener("beforeinstallprompt", async(event) => {
event.preventDefault();
installPrompt = event;
//document.addEventListener("DOMContentLoaded", () => {
const button = document.getElementById("install-button")
button.addEventListener("click", async ()=>{
const result = await installPrompt.prompt()
console.info(result.outcome)
})
button.style.display = 'inline-block'
});
;
</script>
</body>
</html>