282 lines
12 KiB
HTML
Executable File
282 lines
12 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, initial-scale=1.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>
|
|
</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 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">
|
|
<div id="chatMessages" class="chat-messages"></div>
|
|
<form id="chatForm" class="chat-form" autocomplete="off">
|
|
<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>
|
|
|
|
<!-- 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-test-devices">
|
|
<i class="fas fa-play"></i> Test Devices
|
|
</button>
|
|
<button id="refreshDevicesBtn" class="btn btn-refresh-devices">
|
|
<i class="fas fa-sync"></i> Refresh
|
|
</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>
|
|
</body>
|
|
</html>
|