Files
BridgeSwarm/examples/chat-advanced/index.html
T
2026-02-21 23:25:27 -05:00

180 lines
6.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BridgeSwarm Advanced Chat</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/styles/atom-one-dark.min.css">
</head>
<body>
<div class="app-container">
<aside class="sidebar">
<div class="sidebar-header">
<h2>Advanced Chat</h2>
</div>
<div class="user-profile">
<div class="avatar" id="avatar">?</div>
<div class="user-info">
<input type="text" id="nickname" placeholder="Nickname" maxlength="20">
<div class="public-key" id="publicKey" title="Click to copy">Your ID: (join to generate)</div>
</div>
</div>
<div class="rooms-section">
<div class="section-header">
<h3>Rooms</h3>
<button class="btn-icon" id="btnCreateRoom" title="Create Room">+</button>
</div>
<ul class="room-list" id="roomList">
<li class="room active" data-room="lobby">
<span class="room-icon">#</span>
<span class="room-name">lobby</span>
<span class="room-count" id="room-lobby-count">0</span>
</li>
</ul>
</div>
<div class="users-section">
<div class="section-header">
<h3>Online Users <span id="userCount">(0)</span></h3>
</div>
<ul class="user-list" id="userList"></ul>
</div>
</aside>
<main class="chat-area">
<div class="chat-header">
<div class="chat-info">
<h2 id="currentRoom">#lobby</h2>
<span class="room-topic" id="roomTopic">General discussion</span>
</div>
<div class="chat-actions">
<button class="btn-icon" id="btnToggleEmoji" title="Emoji">😊</button>
<button class="btn-icon" id="btnSendFile" title="Send File">📎</button>
<button class="btn-icon" id="btnClearChat" title="Clear Chat">🗑️</button>
</div>
</div>
<div class="messages" id="messages"></div>
<div class="typing-indicator" id="typingIndicator">
<span id="typingUsers"></span> is typing...
</div>
<div class="compose-area">
<div class="compose-tools">
<button class="btn-tool" id="btnBold" title="Bold (Ctrl+B)"><strong>B</strong></button>
<button class="btn-tool" id="btnItalic" title="Italic (Ctrl+I)"><em>I</em></button>
<button class="btn-tool" id="btnStrike" title="Strikethrough"><s>S</s></button>
<button class="btn-tool" id="btnCode" title="Inline Code">&lt;/&gt;</button>
<button class="btn-tool" id="btnCodeBlock" title="Code Block">{ }</button>
<button class="btn-tool" id="btnLink" title="Link">🔗</button>
<button class="btn-tool" id="btnList" title="List"></button>
<button class="btn-tool" id="btnQuote" title="Quote">"</button>
<button class="btn-tool" id="btnEmoji2" title="Emoji">😀</button>
</div>
<div class="compose-input">
<textarea id="messageInput" placeholder="Type a message... (Markdown supported)" rows="1"></textarea>
<button class="btn-send" id="btnSend">Send</button>
</div>
</div>
</main>
<aside class="right-sidebar">
<div class="sidebar-section">
<h3>Room Info</h3>
<div class="info-item">
<span class="label">Members:</span>
<span id="memberCount">0</span>
</div>
<div class="info-item">
<span class="label">Messages:</span>
<span id="messageCount">0</span>
</div>
</div>
<div class="sidebar-section">
<h3>Shared Files</h3>
<ul class="file-list" id="fileList"></ul>
</div>
<div class="sidebar-section">
<h3>Settings</h3>
<div class="setting-item">
<label>
<input type="checkbox" id="chkNotifications">
Notifications
</label>
</div>
<div class="setting-item">
<label>
<input type="checkbox" id="chkSounds" checked>
Sounds
</label>
</div>
<div class="setting-item">
<label>
<input type="checkbox" id="chkAutoScroll" checked>
Auto-scroll
</label>
</div>
<div class="setting-item">
<label>
<input type="checkbox" id="chkMarkdown" checked>
Markdown
</label>
</div>
</div>
</aside>
</div>
<div class="modal" id="createRoomModal">
<div class="modal-content">
<h3>Create New Room</h3>
<input type="text" id="newRoomName" placeholder="Room name" maxlength="30">
<input type="text" id="newRoomTopic" placeholder="Room topic (optional)">
<div class="modal-actions">
<button class="btn secondary" id="btnCancelCreate">Cancel</button>
<button class="btn primary" id="btnConfirmCreate">Create</button>
</div>
</div>
</div>
<div class="modal" id="joinModal">
<div class="modal-content">
<h3>Join Chat</h3>
<div class="form-group">
<label>Topic/Address</label>
<input type="text" id="joinTopic" placeholder="e.g. bridge-swarm-advanced" value="bridge-swarm-advanced-v1">
</div>
<div class="form-group">
<label>Your Nickname</label>
<input type="text" id="joinNickname" placeholder="Enter your nickname" maxlength="20">
</div>
<div class="modal-actions">
<button class="btn primary" id="btnJoinChat">Join</button>
</div>
</div>
</div>
<div class="toast-container" id="toastContainer"></div>
<div class="status-bar">
<span class="status" id="status">Disconnected</span>
<span class="connection-status" id="connectionStatus"></span>
</div>
<input type="file" id="fileInput" hidden>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/highlight.min.js"></script>
<script type="module">
import { markedHighlight } from 'https://cdn.jsdelivr.net/npm/[email protected]/+esm';
window.markedHighlight = markedHighlight;
</script>
<script src="app.js"></script>
</body>
</html>