Files
call-me/public/index.html
T
2025-08-25 20:14:51 +02:00

312 lines
14 KiB
HTML
Executable File

<!doctype html>
<html lang="en">
<head>
<title id="appTitle">Call-me</title>
<!-- Meta Information -->
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>
<!-- https://favicon.io/favicon-generator/ -->
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png" />
<link rel="manifest" href="/favicon/site.webmanifest" />
<!-- https://ogp.me -->
<meta property="og:type" content="app-webrtc" />
<meta property="og:site_name" content="Call-me" />
<meta property="og:title" content="Click the link to make a call." />
<meta property="og:description" content="Your Go-To for Instant Video Calls!" />
<meta property="og:image" content="https://cme.mirotalk.com/assets/callme.png" />
<meta property="og:url" content="https://cme.mirotalk.com" />
<!-- Link to Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.min.css" />
<!-- Link to Font Awesome CSS for icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" />
<!-- Link to your custom CSS file -->
<link rel="stylesheet" href="./style.css" />
<!-- Link to SweetAlert CSS file -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11.4.8/dist/sweetalert2.min.css" />
<!-- ink to Animate CSS file -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css/animate.min.css" />
</head>
<body>
<!-- The attribution text will be injected here -->
<p id="attribution"></p>
<!-- Optional Random BG Images -->
<img id="randomImage" src="background.jpg" alt="Random Background Image" />
<!-- GitHub project -->
<div id="githubDiv">
<a
class="github-button"
href="https://github.com/miroslavpejic85/call-me"
data-color-scheme="no-preference: light; light: light; dark: dark;"
data-size="large"
data-show-count="true"
aria-label="Star miroslavpejic85/call-me on GitHub"
>Star
</a>
</div>
<!-- Sign-in Page -->
<div id="signInPage" class="container text-center center">
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-header"><h1 id="appName">Call-me</h1></div>
<div class="card-body">
<!-- Sign-in Form -->
<div class="mb-3">
<!-- Input field for entering the username -->
<input id="usernameIn" type="text" placeholder="Enter username" required />
</div>
<!-- Sign-in button -->
<button id="signInBtn" class="btn btn-primary">Sign In</button>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Room Page -->
<div id="roomPage" class="container text-center center">
<!-- Session time -->
<span id="sessionTime">0s</span>
<!-- Local video container (your video) -->
<div id="localVideoContainer">
<video id="localVideo"></video>
<span id="localUsername"></span>
</div>
<!-- Remote video container (video from the other user) -->
<div id="remoteVideoContainer">
<div id="streamStatusContainer">
<i id="remoteAudioDisabled" class="fas fa-microphone color-red hide"></i>
<i id="remoteVideoDisabled" class="fas fa-video color-red hide"></i>
</div>
<video id="remoteVideo"></video>
<span id="remoteUsername" class="hide"></span>
</div>
<div class="row text-center">
<div class="col-md-12">
<!-- Button share Room -->
<button
id="shareRoomBtn"
class="btn btn-custom btn-primary btn-m"
data-toggle="tooltip"
data-placement="top"
title="Share room"
>
<i class="fas fa-share-nodes"></i>
</button>
<!-- Button to hide/show the local video -->
<button
id="hideBtn"
class="btn btn-custom btn-primary btn-m"
data-toggle="tooltip"
data-placement="top"
title="Toggle hide me"
>
<i class="fas fa-eye-slash"></i>
</button>
<!-- Button to toggle audio stream -->
<button
id="audioBtn"
class="btn btn-custom btn-success btn-m"
data-toggle="tooltip"
data-placement="top"
title="Toggle audio"
>
<i class="fas fa-microphone"></i>
</button>
<!-- Button to swap camera -->
<button
id="swapCameraBtn"
class="btn btn-custom btn-success btn-m"
data-toggle="tooltip"
data-placement="top"
title="Swap camera"
>
<i class="fas fa-camera-rotate"></i>
</button>
<!-- Button to toggle video stream -->
<button
id="videoBtn"
class="btn btn-custom btn-success btn-m"
data-toggle="tooltip"
data-placement="top"
title="Toggle video"
>
<i class="fas fa-video"></i>
</button>
<!-- Button to share screen -->
<button
id="screenShareBtn"
class="btn btn-custom btn-success btn-m"
data-toggle="tooltip"
data-placement="top"
title="Toggle screen"
>
<i class="fas fa-desktop"></i>
</button>
<!-- Button to leave the call -->
<button
id="leaveBtn"
class="btn btn-custom btn-danger btn-m"
data-toggle="tooltip"
data-placement="top"
title="Leave"
>
<i class="fas fa-door-open"></i>
</button>
<!-- Toggle user sidebar button -->
<button
id="sidebarBtn"
class="btn btn-custom btn-primary btn-m"
data-toggle="tooltip"
data-placement="top"
title="Toggle users"
>
<i class="fas fa-users"></i>
</button>
</div>
</div>
</div>
<!-- Sidebar with tabs for users and chat -->
<div id="userSidebar" class="user-sidebar">
<div class="user-sidebar-header">
<div class="sidebar-tabs">
<button id="usersTab" class="sidebar-tab active" data-tab="users">
<i class="fas fa-users"></i> Users
</button>
<button id="chatTab" class="sidebar-tab" data-tab="chat">
<i class="fas fa-comments"></i> Chat
<span id="chatNotification" class="chat-notification hidden">0</span>
</button>
<button id="settingsTab" class="sidebar-tab" data-tab="settings">
<i class="fas fa-cog"></i> Settings
</button>
</div>
<button id="exitSidebarBtn" class="btn btn-exit-sidebar" title="Close sidebar">
<i class="fas fa-times"></i>
</button>
</div>
<!-- Users Tab Content -->
<div id="usersContent" class="tab-content active">
<div class="user-search-bar">
<input type="text" id="userSearchInput" placeholder="Search users..." autocomplete="off" />
</div>
<ul id="userList" class="user-list"></ul>
</div>
<!-- Chat Tab Content -->
<div id="chatContent" class="tab-content mt-5">
<div id="chatMessages" class="chat-messages"></div>
<form id="chatForm" class="chat-form" autocomplete="off">
<button type="button" id="emojiBtn" class="btn btn-emoji" title="Add emoji">
<i class="fas fa-smile"></i>
</button>
<input id="chatInput" type="text" placeholder="Type a message..." autocomplete="off" />
<button type="submit" class="btn btn-primary btn-send-chat">
<i class="fas fa-paper-plane"></i>
</button>
</form>
<div id="emojiPicker" class="emoji-picker-container"></div>
</div>
<!-- Settings Tab Content -->
<div id="settingsContent" class="tab-content">
<div class="settings-section">
<h3 class="settings-title"><i class="fas fa-video"></i> Media Devices</h3>
<div class="setting-group">
<label for="videoSelect" class="setting-label"> <i class="fas fa-camera"></i> Camera </label>
<select id="videoSelect" class="setting-select">
<option value="">Loading cameras...</option>
</select>
</div>
<div class="setting-group">
<label for="audioSelect" class="setting-label">
<i class="fas fa-microphone"></i> Microphone
</label>
<select id="audioSelect" class="setting-select">
<option value="">Loading microphones...</option>
</select>
</div>
<div class="setting-group">
<label for="audioOutputSelect" class="setting-label">
<i class="fas fa-volume-up"></i> Speaker
</label>
<select id="audioOutputSelect" class="setting-select">
<option value="">Loading speakers...</option>
</select>
</div>
<div class="settings-actions">
<button id="testDevicesBtn" class="btn btn-success btn-test-devices">
<i class="fas fa-play"></i> Test Devices
</button>
<button id="refreshDevicesBtn" class="btn btn-secondary btn-refresh-devices">
<i class="fas fa-sync"></i> Refresh
</button>
</div>
<h3 class="settings-title"><i class="fas fa-comments"></i> Chat Settings</h3>
<div class="settings-actions">
<button id="saveChatBtn" class="btn btn-success btn-save-chat">
<i class="fas fa-download"></i> Save Messages
</button>
<button id="clearChatBtn" class="btn btn-danger btn-clear-chat">
<i class="fas fa-trash"></i> Clear All
</button>
</div>
</div>
</div>
</div>
<!-- JavaScript libraries for WebSocket and custom client code -->
<script src="/socket.io/socket.io.js"></script>
<script src="config.js"></script>
<script src="client.js"></script>
<!-- Include UaParser -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/UAParser.js/1.0.37/ua-parser.min.js"></script>
<!-- Include Axios file -->
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<!-- Include SweetAlert JS file -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.4.8/dist/sweetalert2.all.min.js"></script>
<!-- Include Bootstrap JavaScript file -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<!-- Include GitHub buttons -->
<script src="https://buttons.github.io/buttons.js"></script>
<!-- Include Emoji Mart for emoji picker -->
<script defer src="https://cdn.jsdelivr.net/npm/emoji-mart@latest/dist/browser.js"></script>
</body>
</html>