first commit

This commit is contained in:
2024-11-09 08:52:49 +07:00
commit 2450f9f42a
90 changed files with 16323 additions and 0 deletions

5
Html/html/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/

8
Html/html/.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/LOGIN TENGAH.iml" filepath="$PROJECT_DIR$/.idea/LOGIN TENGAH.iml" />
</modules>
</component>
</project>

256
Html/html/index.html Normal file
View File

@@ -0,0 +1,256 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bird Deterrent System</title>
<link rel="stylesheet" type="text/css" href="public/style/style.css">
<link rel="stylesheet" type="text/css" href="public/style/bootstrap.min.css">
<script src="public/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="public/style/jquery.dataTables.min.css">
<script src="public/js/jquery-3.7.1.min.js"></script>
<script src="public/js/jquery.dataTables.min.js"></script>
<script src="public/js/all.min.js"></script>
<link rel="stylesheet" href="public/style/all.min.css">
<script src="index.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark text-light container4">
<div class="container-fluid">
<!-- <p class="p-title">Bird Deterrent System</p>-->
<a class="navbar-brand p-title" href="index.html">Bird Deterrent System</a>
<!-- Toggler/collapsible Button -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Collapsible Navbar -->
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item pad-menu">
<a class="nav-link" href="setting.html">Setting</a>
</li>
<li class="nav-item pad-menu">
<form action="/logout" method="get">
<button class="btn btn-outline-light" type="submit">Logout</button>
</form>
</li>
</ul>
</div>
</div>
</nav>
<!--<div class="container-fluid container4">-->
<!-- <div class="row">-->
<!-- <div class="col-12 col-sm-12 col-md-12 col-lg-8 col-xl-8 border-1">-->
<!-- <h1 class="hr-lines">Bird Deterrent System</h1>-->
<!-- </div>-->
<!-- <div class="col-12 col-sm-12 col-md-12 col-lg-4 col-xl-4">-->
<!-- <div class="container">-->
<!-- <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12 outside-logout">-->
<!-- <form action="/logout" method="get">-->
<!-- <button class="btn btn-outline-light" type="submit">Logout</button>-->
<!-- </form>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
<!-- SECTION 1-->
<!-- SECTION 2 -->
<div class="container-fluid container3">
<div class="row">
<div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-8">
<div class="outside">
<img id="camerastream" src="public/images/not-available.png" class="img-cctv class100" alt="">
</div>
<div class="row">
<div class="col-6 col-sm-6 col-md-8 col-lg-8 col-xl-8">
<p id="streaming_status">No Status</p>
</div>
<div class="col-6 col-sm-6 col-md-4 col-lg-4 col-xl-4">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="quality_video" onchange="change_video_quality()">
<label class="form-check-label" for="quality_video">High Quality Video</label>
</div>
</div>
</div>
</div>
<div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-4 ">
<br>
<div class="row">
<div class="col-3 ">
<p>Pan Speed</p>
<div class="btn-group-vertical">
<button id="pan1" class="btn btn-outline-dark btn-sm" value="16" onclick="set_pan_speed(16)">1</button>
<button id="pan2" class="btn btn-outline-dark btn-sm" value="32" onclick="set_pan_speed(32)">2</button>
<button id="pan3" class="btn btn-outline-dark btn-sm" value="48" onclick="set_pan_speed(48)">3</button>
<button id="pan4" class="btn btn-outline-dark btn-sm" value="63" onclick="set_pan_speed(63)">4</button>
</div>
</div>
<div class="col-6 outside">
<div class="btn-circle">
<div class="row">
<div class="col"></div>
<div class="col">
<a onmousedown="btn_up()" onmouseup="stop_movement()">
<i class="btn-nav fa-solid fa-caret-up pad-top" title="Up"></i>
</a>
</div>
<div class="col"></div>
</div>
<div class="row">
<div class="col">
<a onmousedown="btn_left()" onmouseup="stop_movement()">
<i class="btn-nav fa-solid fa-caret-left pad-left" title="Left"></i>
</a>
</div>
<div class="col">
<a>
<i id="btn_center" class="btn-nav-center fa-solid fa-circle"></i>
</a>
</div>
<div class="col">
<a onmousedown="btn_right()" onmouseup="stop_movement()">
<i class="btn-nav fa-solid fa-caret-right pad-right" title="Right"></i>
</a>
</div>
</div>
<div class="row">
<div class="col"></div>
<div class="col">
<a onmousedown="btn_down()" onmouseup="stop_movement()">
<i class="i btn-nav fa-solid fa-caret-down pad-bottom" title="Down"></i>
</a>
</div>
<div class="col"></div>
</div>
</div>
</div>
<div class="col-3">
<p>Tilt Speed</p>
<div class="btn-group-vertical">
<button id="tilt1" class="btn btn-outline-dark btn-sm" value="16" onclick="set_tilt_speed(16)">1</button>
<button id="tilt2" class="btn btn-outline-dark btn-sm" value="32" onclick="set_tilt_speed(32)">2</button>
<button id="tilt3" class="btn btn-outline-dark btn-sm" value="48" onclick="set_tilt_speed(48)">3</button>
<button id="tilt4" class="btn btn-outline-dark btn-sm" value="63" onclick="set_tilt_speed(63)">4</button>
</div>
</div>
</div>
<div>
<p class="text-center">Zoom</p>
<div class="row">
<div class="col-10">
<input id="zoom" type="range" class="form-range" min="1" max="10909" oninput="this.nextElementSibling.value = this.value">
<output class="output"></output>
</div>
<div class="col-2">
<button class="btn btn-primary" onclick="set_zoom()">SET</button>
</div>
</div>
</div>
<!-- <br>-->
<div class="text-center">
<h1 id="status_player" class="text-status1">Stop</h1>
</div>
<!-- <br>-->
<div class="row">
<div class="col">
<div id="div1" class="button-container">
<a id="btn_play1" class="btn-play1 show" onclick='play_button(1)' title='Play Content 1'>
<i class="fa-solid fa-play icon1"></i>
</a>
<a id="btn_stop1" class="btn-play1 hide" onclick='stop_button(1)' title='Stop Content 1'>
<i class="fa-solid fa-stop icon1"></i>
</a>
</div>
<br>
<p> Content 1</p>
</div>
<div class="col">
<div id="div2" class="button-container">
<a id="btn_play2" class="btn-play1 show" onclick='play_button(2)' title='Play Content 2'>
<i class="fa-solid fa-play icon1"></i>
</a>
<a id="btn_stop2" class="btn-play1 hide" onclick='stop_button(2)' title='Stop Content 2'>
<i class="fa-solid fa-stop icon1"></i>
</a>
</div>
<br>
<p> Content 2</p>
</div>
<div class="col">
<div id="div3" class="button-container">
<a id="btn_play3" class="btn-play1 show" onclick='play_button(3)' title='Play Content 3'>
<i class="fa-solid fa-play icon1"></i>
</a>
<a id="btn_stop3" class="btn-play1 hide" onclick='stop_button(3)' title='Stop Content 3'>
<i class="fa-solid fa-stop icon1"></i>
</a>
</div>
<br>
<p> Content 3</p>
</div>
<div class="col">
<div id="div4" class="button-container">
<a id="btn_play4" class="btn-play1 show" onclick='play_button(4)' title='Play Content 4'>
<i class="fa-solid fa-play icon1"></i>
</a>
<a id="btn_stop4" class="btn-play1 hide" onclick='stop_button(4)' title='Stop Content 4'>
<i class="fa-solid fa-stop icon1"></i>
</a>
</div>
<br>
<p> Content 4</p>
</div>
<div class="col">
<div id="div5" class="button-container">
<a id="btn_play5" class="btn-play1 show" onclick='play_button(5)' title='Play Content 5'>
<i class="fa-solid fa-play icon1"></i>
</a>
<a id="btn_stop5" class="btn-play1 hide" onclick='stop_button(5)' title='Stop Content 5'>
<i class="fa-solid fa-stop icon1"></i>
</a>
</div>
<br>
<p>Content 5</p>
</div>
</div>
<br>
<div>
<label for="customRange" class="form-label">Volume</label>
<div class="row">
<div class="col-10 pad-bar">
<input id="customRange" type="range" class="form-range" min="0" max="100" step="10" oninput="set_volumeoutput(this.value)">
<output id="volumebarvalue" class="output"></output>
</div>
<div class="col-2">
<div>
<button id="mute" class="btn-mute show" onclick="mute()" title="mute">
<i class="fa-solid fa-volume-high"></i>
</button>
<button id="unmute" class="btn-mute hide" onclick="unmute()" title="unmute">
<i class="fa-solid fa-volume-xmark"></i>
</button>
</div>
</div>
</div>
<br>
</div>
</div>
</div>
</div>
<!-- SECTION 3 -->
<div class="container-fluid footer1 outside">
<p>2024 Copyright &copy; Galva Technologies. All rights reserved.</p>
</div>
</body>
</html>

400
Html/html/index.js Normal file
View File

@@ -0,0 +1,400 @@
/**
* Speed of pan and tilt
* @type {number} 0 - 3F (hex) / 63 (dec)
*/
let pan_speed = 20;
let tilt_speed = 20;
/**
* @type {WebSocket}
*/
let ws;
let camerastream;
let no_stream_counter = 0;
document.addEventListener("DOMContentLoaded", function(){
camerastream = document.getElementById("camerastream");
setInterval(function (){
no_stream_counter++;
if (no_stream_counter>=20){
if (camerastream){
if (camerastream.src !== "public/images/not-available.png"){
camerastream.src = "public/images/not-available.png";
}
}
}
},100);
ws = new WebSocket("/ws");
ws.onopen = function(){
console.log("Connected to the server");
// request basic parameters
ws.send(JSON.stringify({
command: "GET MAX ZOOM",
data: 0
}));
ws.send(JSON.stringify({
command: "GET VOLUME",
data: 0
}));
ws.send(JSON.stringify({
command: "GET ZOOM",
data: 0
}));
ws.send(JSON.stringify({
command: "GET RESOLUTION",
data: 0
}));
ws.send(JSON.stringify({
command: "STREAMING STATUS",
data: 0
}));
}
ws.onmessage = function(event){
//console.log("Received data from server: " + event.data);
/**
* @type {{reply: string, data: string|number}} dx
*/
let dx = JSON.parse(event.data);
switch (dx.reply){
case "GET BASE64":
if (dx.data.startsWith("data:image/jpeg;base64,")){
update_camerastream(dx.data);
no_stream_counter = 0;
} else update_camerastream(null);
break;
case "SET VOLUME":
console.log("Set Volume: "+dx.data);
break;
case "GET VOLUME":
console.log("Get Volume: "+dx.data);
$('#customRange').val(dx.data);
break;
case "GET MAX ZOOM":
console.log("Get Max Zoom: "+dx.data);
$('#zoom')
.attr("max", dx.data)
.attr("min", 1);
break;
case "GET ZOOM":
console.log("Get Zoom: "+dx.data);
$('#zoom').val(dx.data);
break;
case "GET RESOLUTION":
console.log("Get Resolution: "+dx.data);
break;
case "PAN LEFT":
console.log("Pan Left");
break;
case "PAN RIGHT":
console.log("Pan Right");
break;
case "TILT UP":
console.log("Tilt Up");
break;
case "TILT DOWN":
console.log("Tilt Down");
break;
case "STOP MOVEMENT":
console.log("Stop Movement");
break;
case "SET ZOOM":
console.log("Set Zoom: "+dx.data);
break;
case "PLAY AUDIO":
console.log("Play Audio: "+dx.data);
if (dx.data.startsWith("Failed")){
alert(dx.data);
} else $('#status_player').html("Playing Audio "+dx.data);
break;
case "STOP AUDIO":
console.log("Stop Audio");
$('#status_player').html("Stop Playback");
break;
case 'SET VIDEO QUALITY':
console.log("Set Video Quality: "+dx.data);
break;
case "STREAMING STATUS":
console.log("Streaming Status: "+dx.data);
$('#streaming_status').html(dx.data);
break;
}
}
ws.onclose = function(){
console.log("Connection closed");
}
ws.onerror = function(){
console.log("Error in connection");
}
set_pan_speed(32);
set_tilt_speed(32);
});
/**
* Update camera stream
* @param {String} value
*/
function update_camerastream(value){
if (value && value.length>0){
if (camerastream) camerastream.src = value;
} else {
if (camerastream) camerastream.src = "public/images/not-available.png";
}
}
function play_off(index){
$('#div'+index).prop("className", "button-container div-disabled");
$('#btn_play'+index).prop("className", "btn-play1 show text-light");
}
function play_on(index){
$('#div'+index).prop("className", "button-container");
$('#btn_play'+index).prop("className", "btn-play1 show");
}
function show_play_and_hide_stop(index){
$('#btn_play'+index).prop("className", "btn-play1 show"); ;
$('#btn_stop'+index).prop("className", "btn-play1 hide");
}
function show_stop_and_hide_play(index){
$('#btn_play'+index).prop("className", "btn-play1 hide");
$('#btn_stop'+index).prop("className", "btn-play1 show");
}
function allplay(){
for (let i = 0; i < 5; i++) play_on(i+1);
}
function play_button(index){
show_stop_and_hide_play(index);
$('#status_player').html("Play");
for (let i = 1; i <= 5; i++){
if (i!==index) play_off(i);
}
send_play_audio(index);
}
function stop_button(index){
show_play_and_hide_stop(index);
$('#status_player').html("Stop");
allplay();
send_stop_audio();
}
/**
* Send command to stop audio
*/
function send_stop_audio(){
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "STOP AUDIO",
data: 0
}));
} else console.log("WebSocket is not open");
}
/**
* Send command to play audio
* @param {number} index 1 - 5
*/
function send_play_audio(index){
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "PLAY AUDIO",
data: index
}));
} else console.log("WebSocket is not open");
}
function unmute(){
$('#mute').prop("className", "btn-mute show");
$('#unmute').prop("className", "btn-mute hide");
console.log("unmute")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "UNMUTE",
data: 0
}));
} else console.log("WebSocket is not open");
}
function mute(){
$('#mute').prop("className", "btn-mute hide");
$('#unmute').prop("className", "btn-mute show");
console.log("mute")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "MUTE",
data: 0
}));
} else console.log("WebSocket is not open");
}
function btn_center_off(){
$('#btn_center').prop("className", "btn-center-unactive fa-solid fa-circle");
}
function btn_up(){
console.log("btn_up")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "TILT UP",
data: tilt_speed
}));
btn_center_off()
} else console.log("WebSocket is not open");
}
function btn_left(){
console.log("btn_left")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "PAN LEFT",
data: pan_speed
}));
btn_center_off();
} else console.log("WebSocket is not open");
}
function btn_right(){
console.log("btn_right")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "PAN RIGHT",
data: pan_speed
}));
btn_center_off()
} else console.log("WebSocket is not open");
}
function btn_down(){
console.log("btn_down")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "TILT DOWN",
data: tilt_speed
}));
btn_center_off()
} else console.log("WebSocket is not open");
}
function stop_movement(){
console.log("stop_movement")
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "STOP MOVEMENT",
data: 0
}));
} else console.log("WebSocket is not open");
}
function set_zoom(){
let zoom = document.getElementById("zoom");
console.log("set_zoom "+zoom.value)
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "SET ZOOM",
data: zoom.value
}));
} else console.log("WebSocket is not open");
}
function set_volumeoutput(value){
$('#volumebarvalue').val(value);
console.log("set_volumeoutput "+value)
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "SET VOLUME",
data: value
}));
} else console.log("WebSocket is not open");
}
function set_pan_speed(value){
pan_speed = value;
console.log("set_pan_speed "+value);
clearpan();
let classvalue = "btn btn-dark btn-sm";
switch(pan_speed){
case 16:
$('#pan1').prop("className", classvalue );
break;
case 32:
$('#pan2').prop("className", classvalue);
break;
case 48:
$('#pan3').prop("className", classvalue);
break;
case 63:
$('#pan4').prop("className", classvalue);
break;
}
}
function set_tilt_speed(value){
tilt_speed = value;
console.log("set_tilt_speed "+value);
cleartilt();
let classvalue = "btn btn-dark btn-sm";
switch (tilt_speed){
case 16:
$('#tilt1').prop("className", classvalue);
break;
case 32:
$('#tilt2').prop("className", classvalue);
break;
case 48:
$('#tilt3').prop("className", classvalue);
break;
case 63:
$('#tilt4').prop("className", classvalue);
break;
}
}
// Pan Tilt Speed
function clearpan(){
for(let i = 1; i <= 4; i++){
$('#pan'+i).prop("className", "btn btn-outline-dark btn-sm");
}
}
function cleartilt(){
for(let i = 1; i <= 4; i++){
$('#tilt'+i).prop("className", "btn btn-outline-dark btn-sm");
}
}
function change_video_quality(){
let btn = document.getElementById("quality_video")
console.log('High Quality Video: '+btn.checked?'ON':'OFF');
if (ws.readyState === WebSocket.OPEN){
ws.send(JSON.stringify({
command: "SET VIDEO QUALITY",
data: btn.checked?"HQ":"LQ"
}));
}
}

41
Html/html/login.html Normal file
View File

@@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bird Deterrent System</title>
<link rel="stylesheet" type="text/css" href="public/style/style.css">
<link rel="stylesheet" type="text/css" href="public/style/bootstrap.min.css">
<script src="index.js"></script>
<script src="public/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="public/style/jquery.dataTables.min.css">
<script src="public/js/jquery-3.7.1.min.js"></script>
<script src="public/js/jquery.dataTables.min.js"></script>
<!--Link for Icon Fontawesome-->
<script src="public/js/all.min.js"></script>
<link rel="stylesheet" href="public/style/all.min.css">
<script src="login.js"></script>
</head>
<body>
<div class="bg-img">
<div class="content">
<header>Login</header>
<form action="/login" method="post">
<div class="field space input-rad">
<span class="fa-solid fa-user"></span>
<input id="username" placeholder="username" name="username" required>
</div>
<div class="field space input-rad">
<span class="fa-solid fa-lock"></span>
<input id='login_password' type='password' placeholder='Password' name='password' required>
<span class="fa-solid fa-eye" id='buttonShowPasswordLogin' onclick="showPasswordLogin()"></span>
</div>
<div class="class100 space">
<button class="btn btn-primary btn-lg w-100" type="submit">Log In</button>
</div>
</form>
</div>
</div>
</body>
</html>

10
Html/html/login.js Normal file
View File

@@ -0,0 +1,10 @@
function showPasswordLogin() {
const show = document.getElementById('login_password').type;
if (show === 'password') {
document.getElementById('login_password').type = 'text';
document.getElementById('buttonShowPasswordLogin').className = 'fa-solid fa-eye-slash';
} else {
document.getElementById('login_password').type = 'password';
document.getElementById('buttonShowPasswordLogin').className = 'fa-solid fa-eye';
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

6
Html/html/public/js/all.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

12
Html/html/public/style/all.min.css vendored Normal file

File diff suppressed because one or more lines are too long

515
Html/html/public/style/bootstrap.css vendored Normal file
View File

@@ -0,0 +1,515 @@
@charset "UTF-8";
:root {
--dt-row-selected: 13, 110, 253;
--dt-row-selected-text: 255, 255, 255;
--dt-row-selected-link: 9, 10, 11;
--dt-row-stripe: 0, 0, 0;
--dt-row-hover: 0, 0, 0;
--dt-column-ordering: 0, 0, 0;
--dt-html-background: white;
}
:root.dark {
--dt-html-background: rgb(33, 37, 41);
}
table.dataTable td.dt-control {
text-align: center;
cursor: pointer;
}
table.dataTable td.dt-control:before {
display: inline-block;
box-sizing: border-box;
content: "";
border-top: 5px solid transparent;
border-left: 10px solid rgba(0, 0, 0, 0.5);
border-bottom: 5px solid transparent;
border-right: 0px solid transparent;
}
table.dataTable tr.dt-hasChild td.dt-control:before {
border-top: 10px solid rgba(0, 0, 0, 0.5);
border-left: 5px solid transparent;
border-bottom: 0px solid transparent;
border-right: 5px solid transparent;
}
html.dark table.dataTable td.dt-control:before,
:root[data-bs-theme=dark] table.dataTable td.dt-control:before,
:root[data-theme=dark] table.dataTable td.dt-control:before {
border-left-color: rgba(255, 255, 255, 0.5);
}
html.dark table.dataTable tr.dt-hasChild td.dt-control:before,
:root[data-bs-theme=dark] table.dataTable tr.dt-hasChild td.dt-control:before,
:root[data-theme=dark] table.dataTable tr.dt-hasChild td.dt-control:before {
border-top-color: rgba(255, 255, 255, 0.5);
border-left-color: transparent;
}
div.dt-scroll {
width: 100%;
}
div.dt-scroll-body thead tr,
div.dt-scroll-body tfoot tr {
height: 0;
}
div.dt-scroll-body thead tr th, div.dt-scroll-body thead tr td,
div.dt-scroll-body tfoot tr th,
div.dt-scroll-body tfoot tr td {
height: 0 !important;
padding-top: 0px !important;
padding-bottom: 0px !important;
border-top-width: 0px !important;
border-bottom-width: 0px !important;
}
div.dt-scroll-body thead tr th div.dt-scroll-sizing, div.dt-scroll-body thead tr td div.dt-scroll-sizing,
div.dt-scroll-body tfoot tr th div.dt-scroll-sizing,
div.dt-scroll-body tfoot tr td div.dt-scroll-sizing {
height: 0 !important;
overflow: hidden !important;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before {
position: absolute;
display: block;
bottom: 50%;
content: "▲";
content: "▲"/"";
}
table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
position: absolute;
display: block;
top: 50%;
content: "▼";
content: "▼"/"";
}
table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc, table.dataTable thead > tr > th.dt-ordering-asc, table.dataTable thead > tr > th.dt-ordering-desc,
table.dataTable thead > tr > td.dt-orderable-asc,
table.dataTable thead > tr > td.dt-orderable-desc,
table.dataTable thead > tr > td.dt-ordering-asc,
table.dataTable thead > tr > td.dt-ordering-desc {
position: relative;
padding-right: 30px;
}
table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order,
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order,
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order,
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order,
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order {
position: absolute;
right: 12px;
top: 0;
bottom: 0;
width: 12px;
}
table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-orderable-asc span.dt-column-order:after, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:before, table.dataTable thead > tr > th.dt-orderable-desc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:after, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-orderable-asc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-orderable-desc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
left: 0;
opacity: 0.125;
line-height: 9px;
font-size: 0.8em;
}
table.dataTable thead > tr > th.dt-orderable-asc, table.dataTable thead > tr > th.dt-orderable-desc,
table.dataTable thead > tr > td.dt-orderable-asc,
table.dataTable thead > tr > td.dt-orderable-desc {
cursor: pointer;
}
table.dataTable thead > tr > th.dt-orderable-asc:hover, table.dataTable thead > tr > th.dt-orderable-desc:hover,
table.dataTable thead > tr > td.dt-orderable-asc:hover,
table.dataTable thead > tr > td.dt-orderable-desc:hover {
outline: 2px solid rgba(0, 0, 0, 0.05);
outline-offset: -2px;
}
table.dataTable thead > tr > th.dt-ordering-asc span.dt-column-order:before, table.dataTable thead > tr > th.dt-ordering-desc span.dt-column-order:after,
table.dataTable thead > tr > td.dt-ordering-asc span.dt-column-order:before,
table.dataTable thead > tr > td.dt-ordering-desc span.dt-column-order:after {
opacity: 0.6;
}
table.dataTable thead > tr > th.sorting_desc_disabled span.dt-column-order:after, table.dataTable thead > tr > th.sorting_asc_disabled span.dt-column-order:before,
table.dataTable thead > tr > td.sorting_desc_disabled span.dt-column-order:after,
table.dataTable thead > tr > td.sorting_asc_disabled span.dt-column-order:before {
display: none;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
div.dt-scroll-body > table.dataTable > thead > tr > th,
div.dt-scroll-body > table.dataTable > thead > tr > td {
overflow: hidden;
}
:root.dark table.dataTable thead > tr > th.dt-orderable-asc:hover, :root.dark table.dataTable thead > tr > th.dt-orderable-desc:hover,
:root.dark table.dataTable thead > tr > td.dt-orderable-asc:hover,
:root.dark table.dataTable thead > tr > td.dt-orderable-desc:hover,
:root[data-bs-theme=dark] table.dataTable thead > tr > th.dt-orderable-asc:hover,
:root[data-bs-theme=dark] table.dataTable thead > tr > th.dt-orderable-desc:hover,
:root[data-bs-theme=dark] table.dataTable thead > tr > td.dt-orderable-asc:hover,
:root[data-bs-theme=dark] table.dataTable thead > tr > td.dt-orderable-desc:hover {
outline: 2px solid rgba(255, 255, 255, 0.05);
}
div.dt-processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -22px;
text-align: center;
padding: 2px;
z-index: 10;
}
div.dt-processing > div:last-child {
position: relative;
width: 80px;
height: 15px;
margin: 1em auto;
}
div.dt-processing > div:last-child > div {
position: absolute;
top: 0;
width: 13px;
height: 13px;
border-radius: 50%;
background: rgb(13, 110, 253);
background: rgb(var(--dt-row-selected));
animation-timing-function: cubic-bezier(0, 1, 1, 0);
}
div.dt-processing > div:last-child > div:nth-child(1) {
left: 8px;
animation: datatables-loader-1 0.6s infinite;
}
div.dt-processing > div:last-child > div:nth-child(2) {
left: 8px;
animation: datatables-loader-2 0.6s infinite;
}
div.dt-processing > div:last-child > div:nth-child(3) {
left: 32px;
animation: datatables-loader-2 0.6s infinite;
}
div.dt-processing > div:last-child > div:nth-child(4) {
left: 56px;
animation: datatables-loader-3 0.6s infinite;
}
@keyframes datatables-loader-1 {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes datatables-loader-3 {
0% {
transform: scale(1);
}
100% {
transform: scale(0);
}
}
@keyframes datatables-loader-2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(24px, 0);
}
}
table.dataTable.nowrap th, table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable th,
table.dataTable td {
box-sizing: border-box;
}
table.dataTable th.dt-left,
table.dataTable td.dt-left {
text-align: left;
}
table.dataTable th.dt-center,
table.dataTable td.dt-center {
text-align: center;
}
table.dataTable th.dt-right,
table.dataTable td.dt-right {
text-align: right;
}
table.dataTable th.dt-justify,
table.dataTable td.dt-justify {
text-align: justify;
}
table.dataTable th.dt-nowrap,
table.dataTable td.dt-nowrap {
white-space: nowrap;
}
table.dataTable th.dt-empty,
table.dataTable td.dt-empty {
text-align: center;
vertical-align: top;
}
table.dataTable th.dt-type-numeric, table.dataTable th.dt-type-date,
table.dataTable td.dt-type-numeric,
table.dataTable td.dt-type-date {
text-align: right;
}
table.dataTable thead th,
table.dataTable thead td,
table.dataTable tfoot th,
table.dataTable tfoot td {
text-align: left;
}
table.dataTable thead th.dt-head-left,
table.dataTable thead td.dt-head-left,
table.dataTable tfoot th.dt-head-left,
table.dataTable tfoot td.dt-head-left {
text-align: left;
}
table.dataTable thead th.dt-head-center,
table.dataTable thead td.dt-head-center,
table.dataTable tfoot th.dt-head-center,
table.dataTable tfoot td.dt-head-center {
text-align: center;
}
table.dataTable thead th.dt-head-right,
table.dataTable thead td.dt-head-right,
table.dataTable tfoot th.dt-head-right,
table.dataTable tfoot td.dt-head-right {
text-align: right;
}
table.dataTable thead th.dt-head-justify,
table.dataTable thead td.dt-head-justify,
table.dataTable tfoot th.dt-head-justify,
table.dataTable tfoot td.dt-head-justify {
text-align: justify;
}
table.dataTable thead th.dt-head-nowrap,
table.dataTable thead td.dt-head-nowrap,
table.dataTable tfoot th.dt-head-nowrap,
table.dataTable tfoot td.dt-head-nowrap {
white-space: nowrap;
}
table.dataTable tbody th.dt-body-left,
table.dataTable tbody td.dt-body-left {
text-align: left;
}
table.dataTable tbody th.dt-body-center,
table.dataTable tbody td.dt-body-center {
text-align: center;
}
table.dataTable tbody th.dt-body-right,
table.dataTable tbody td.dt-body-right {
text-align: right;
}
table.dataTable tbody th.dt-body-justify,
table.dataTable tbody td.dt-body-justify {
text-align: justify;
}
table.dataTable tbody th.dt-body-nowrap,
table.dataTable tbody td.dt-body-nowrap {
white-space: nowrap;
}
/*! Bootstrap 5 integration for DataTables
*
* ©2020 SpryMedia Ltd, all rights reserved.
* License: MIT datatables.net/license/mit
*/
table.table.dataTable {
clear: both;
margin-bottom: 0;
max-width: none;
border-spacing: 0;
}
table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {
box-shadow: none;
}
table.table.dataTable > :not(caption) > * > * {
background-color: var(--bs-table-bg);
}
table.table.dataTable > tbody > tr {
background-color: transparent;
}
table.table.dataTable > tbody > tr.selected > * {
box-shadow: inset 0 0 0 9999px rgb(13, 110, 253);
box-shadow: inset 0 0 0 9999px rgb(var(--dt-row-selected));
color: rgb(255, 255, 255);
color: rgb(var(--dt-row-selected-text));
}
table.table.dataTable > tbody > tr.selected a {
color: rgb(9, 10, 11);
color: rgb(var(--dt-row-selected-link));
}
table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-stripe), 0.05);
}
table.table.dataTable.table-striped > tbody > tr:nth-of-type(2n+1).selected > * {
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.95);
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.95);
}
table.table.dataTable.table-hover > tbody > tr:hover > * {
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-hover), 0.075);
}
table.table.dataTable.table-hover > tbody > tr.selected:hover > * {
box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.975);
box-shadow: inset 0 0 0 9999px rgba(var(--dt-row-selected), 0.975);
}
div.dt-container div.dt-layout-start > *:not(:last-child) {
margin-right: 1em;
}
div.dt-container div.dt-layout-end > *:not(:first-child) {
margin-left: 1em;
}
div.dt-container div.dt-layout-full {
width: 100%;
}
div.dt-container div.dt-layout-full > *:only-child {
margin-left: auto;
margin-right: auto;
}
div.dt-container div.dt-layout-table > div {
display: block !important;
}
@media screen and (max-width: 767px) {
div.dt-container div.dt-layout-start > *:not(:last-child) {
margin-right: 0;
}
div.dt-container div.dt-layout-end > *:not(:first-child) {
margin-left: 0;
}
}
div.dt-container div.dt-length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dt-container div.dt-length select {
width: auto;
display: inline-block;
margin-right: 0.5em;
}
div.dt-container div.dt-search {
text-align: right;
}
div.dt-container div.dt-search label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dt-container div.dt-search input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dt-container div.dt-paging {
margin: 0;
}
div.dt-container div.dt-paging ul.pagination {
margin: 2px 0;
flex-wrap: wrap;
}
div.dt-container div.dt-row {
position: relative;
}
div.dt-scroll-head table.dataTable {
margin-bottom: 0 !important;
}
div.dt-scroll-body {
border-bottom-color: var(--bs-border-color);
border-bottom-width: var(--bs-border-width);
border-bottom-style: solid;
}
div.dt-scroll-body > table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dt-scroll-body > table > tbody > tr:first-child {
border-top-width: 0;
}
div.dt-scroll-body > table > thead > tr {
border-width: 0 !important;
}
div.dt-scroll-body > table > tbody > tr:last-child > * {
border-bottom: none;
}
div.dt-scroll-foot > .dt-scroll-footInner {
box-sizing: content-box;
}
div.dt-scroll-foot > .dt-scroll-footInner > table {
margin-top: 0 !important;
border-top: none;
}
div.dt-scroll-foot > .dt-scroll-footInner > table > tfoot > tr:first-child {
border-top-width: 0 !important;
}
@media screen and (max-width: 767px) {
div.dt-container div.dt-length,
div.dt-container div.dt-search,
div.dt-container div.dt-info,
div.dt-container div.dt-paging {
text-align: center;
}
div.dt-container .row {
--bs-gutter-y: 0.5rem;
}
div.dt-container div.dt-paging ul.pagination {
justify-content: center !important;
}
}
table.dataTable.table-sm > thead > tr th.dt-orderable-asc, table.dataTable.table-sm > thead > tr th.dt-orderable-desc, table.dataTable.table-sm > thead > tr th.dt-ordering-asc, table.dataTable.table-sm > thead > tr th.dt-ordering-desc,
table.dataTable.table-sm > thead > tr td.dt-orderable-asc,
table.dataTable.table-sm > thead > tr td.dt-orderable-desc,
table.dataTable.table-sm > thead > tr td.dt-ordering-asc,
table.dataTable.table-sm > thead > tr td.dt-ordering-desc {
padding-right: 20px;
}
table.dataTable.table-sm > thead > tr th.dt-orderable-asc span.dt-column-order, table.dataTable.table-sm > thead > tr th.dt-orderable-desc span.dt-column-order, table.dataTable.table-sm > thead > tr th.dt-ordering-asc span.dt-column-order, table.dataTable.table-sm > thead > tr th.dt-ordering-desc span.dt-column-order,
table.dataTable.table-sm > thead > tr td.dt-orderable-asc span.dt-column-order,
table.dataTable.table-sm > thead > tr td.dt-orderable-desc span.dt-column-order,
table.dataTable.table-sm > thead > tr td.dt-ordering-asc span.dt-column-order,
table.dataTable.table-sm > thead > tr td.dt-ordering-desc span.dt-column-order {
right: 5px;
}
div.dt-scroll-head table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dt-container > div.row {
margin: 0;
}
div.table-responsive > div.dt-container > div.row > div[class^=col-]:first-child {
padding-left: 0;
}
div.table-responsive > div.dt-container > div.row > div[class^=col-]:last-child {
padding-right: 0;
}
:root[data-bs-theme=dark] {
--dt-row-hover: 255, 255, 255;
--dt-row-stripe: 255, 255, 255;
--dt-column-ordering: 255, 255, 255;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,822 @@
html,body{
width: 100%;
height: 100%;
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
background-color: black;
}
body{
overflow: visible;
flex-wrap: wrap;
}
/*HEADER */
*,
*:after,
*:before {
box-sizing: border-box;
}
:root {
--header-outer-height: 110px;
--header-inner-height: 70px;
--header-height-difference: calc(
var(--header-outer-height) - var(--header-inner-height)
);
--header-bg: #fff;
}
body {
font-family: "DM Sans", sans-serif;
background-color: #f2f5f7;
line-height: 1.5;
/*min-height: 300vh;*/
position: relative;
}
.responsive-wrapper {
width: 90%;
max-width: 1280px;
margin-left: auto;
margin-right: auto;
}
/* Sticky header */
.header-outer {
/* Make it stick */
height: var(--header-outer-height);
position: sticky;
top: calc(
var(--header-height-difference) * -1
); /* Multiply by -1 to get a negative value */
display: flex;
align-items: center;
/* Other */
background-color: var(--header-bg);
box-shadow: 0 2px 10px 0 rgba(0,0,0, 0.1);
z-index: 3;
}
.header-inner {
/* Make it stick */
height: var(--header-inner-height);
position: sticky;
top: 0;
/* Other */
display: flex;
align-items: center;
justify-content: space-between;
}
/* Styling of other elements */
.header-logo img {
display: block;
height: calc(var(--header-inner-height) - 30px);
}
.header-navigation {
display: flex;
flex-wrap: wrap;
}
.header-navigation a,
.header-navigation button {
font-size: 1.125rem;
color: inherit;
margin-left: 1.75rem;
position: relative;
font-weight: 500;
}
.header-navigation a {
display: none;
font-size: 1.125rem;
color: inherit;
text-decoration: none;
}
.header-navigation button {
border: 0;
background-color: transparent;
padding: 0;
}
.header-navigation a:hover:after,
.header-navigation button:hover:after {
transform: scalex(1);
}
.header-navigation a:after,
.header-navigation button:after {
transition: 0.25s ease;
content: "";
display: block;
width: 100%;
height: 2px;
background-color: currentcolor;
transform: scalex(0);
position: absolute;
bottom: -2px;
left: 0;
}
@media (min-width: 800px) {
.header-navigation a {
display: inline-block;
}
.header-navigation button {
display: none;
}
}
.card-left{
background-color: white;
}
.card-right{
background-color: cornsilk;
}
.container1{
background-color: white;
/*height: 500px;*/
}
.container2{
/*background-color: #e6eef3;*/
background: linear-gradient(rgb(253, 252, 251), rgb(226, 229, 231));
/*height: 500px;*/
color: #454647;
}
.container3{
background: linear-gradient(rgb(253, 252, 251), rgb(226, 229, 231));
/*height: 25em;*/
text-align: center;
align-items: center;
min-height: 70vh;
}
.block1{
background: linear-gradient(rgb(253, 252, 251), rgb(226, 229, 231));
height: 100%;
}
.block2{
background: linear-gradient(rgb(249, 251, 252), rgb(207, 230, 241));
}
.button-green1{
background: linear-gradient(90deg, rgb(80, 167, 186), rgb(103, 147, 174));
/*color: rgb(255, 255, 255);*/
color: white !important;
font-weight: bold;
}
.heigh200{
height: 200px;
padding-top: 20px;
padding-left: 30px;
padding-bottom: 20px;
/*margin: 10px;*/
/*padding: 20px;*/
}
.text-right{
text-align: right;
}
.text-left{
text-align: left;
}
.padding-text-footer{
padding-top: 1em;
padding-bottom: 1em;
}
.img-footer{
width: 6em;
}
.main{
padding: 3em;
}
.card-white {
width: 100%;
max-width: 600px;
border-radius: 8px;
box-shadow: 0 15px 30px 0 rgba(0,0,0, 0.1);
background-color: #fff;
padding: 2.5rem;
margin-left: auto;
margin-right: auto;
margin-bottom: 2rem;
font-size: 1.125rem;
}
.h1-grad{
text-transform: capitalize;
letter-spacing: 0.8px;
font-family: "Roboto", sans-serif;
font-weight: 900;
font-size: clamp(3.4375rem, 3.25rem + 0.75vw, 4rem);
background-color: #005baa;
background-image: linear-gradient(45deg, #005baa, #000000);
background-size: 100%;
background-repeat: repeat;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
-moz-background-clip: text;
-moz-text-fill-color: transparent;
}
.hr1 {
display: block;
background: #005baa;
height: 1rem;
width: 6.25rem;
border: none;
margin: 1.125rem 0 1.875rem 0;
}
main a {
display: inline-block;
text-decoration: none;
text-transform: uppercase;
color: #717171;
font-weight: 500;
background: #fff;
border-radius: 3.125rem;
transition: 0.3s ease-in-out;
}
.btn-contact {
display: inline-block;
text-decoration: none;
text-transform: uppercase;
color: #717171;
font-weight: 500;
background: #fff;
border-radius: 3.125rem;
transition: 0.3s ease-in-out;
border: 2px solid #c2c2c2;
margin-top: 2.188rem;
padding: 0.625rem 1.875rem;
}
.btn-contact:hover {
border: 0.125rem solid #005baa;
color: #005baa;
}
.img{
margin-top: 1.5em;
margin-bottom: 1.5em;
padding: 2em;
width: 100%;
border-radius: 2.8em;
}
.img:hover{
-webkit-transform: scale(1.2);
-ms-transform: scale(1.2);
transform: scale(1.2);
transition: 1s ease;
z-index: 1;
}
.swiper-slide {
width: 18.75rem;
height: 28.125rem;
display: flex;
flex-direction: column;
justify-content: end;
align-items: self-start;
}
.swiper-slide h2 {
color: #fff;
font-family: "Roboto", sans-serif;
font-weight: 400;
font-size: 1.4rem;
line-height: 1.4;
margin-bottom: 0.625rem;
padding: 0 0 0 1.563rem;
text-transform: uppercase;
}
.swiper-slide p {
color: #dadada;
font-family: "Roboto", sans-serif;
font-weight: 300;
padding: 0 1.563rem;
line-height: 1.6;
font-size: 0.75rem;
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
overflow: hidden;
}
.swiper-slide a {
margin: 1.25rem 1.563rem 3.438rem 1.563rem;
padding: 0.438em 1.875rem;
font-size: 0.9rem;
}
.swiper-slide a:hover {
color: #005baa;
}
.swiper-slide div {
display: none;
opacity: 0;
padding-bottom: 0.625rem;
}
.swiper-slide--one {
background: linear-gradient(to top, #0f2027, #203a4300, #2c536400),
url("https://images.unsplash.com/photo-1628944682084-831f35256163?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=687&q=80")
no-repeat 50% 50% / cover;
color: white;
border-radius: 10px;
}
.swiper-slide--two {
background: linear-gradient(to top, #0f2027, #203a4300, #2c536400),
url("https://images.unsplash.com/photo-1570481662006-a3a1374699e8?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=765&q=80")
no-repeat 50% 50% / cover;
color: white;
border-radius: 10px;
}
.swiper-slide--three {
background: linear-gradient(to top, #0f2027, #203a4300, #2c536400),
url("https://images.unsplash.com/photo-1515309025403-4b0184873cef?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=735&q=80")
no-repeat 50% 50% / cover;
color: white;
border-radius: 10px;
}
.padd-card{
padding: 1em;
}
.div-left{
background-color: cadetblue;
}
.div-right{
background-color: cornsilk;
}
/*---------------------BIRD STRIKE---------------------*/
.checkbox{
width: 17x;
height: 17px;
border-radius: 10px
}
.class50{
width: 50%;
}
.class100{
width: 100%;
}
.show{
display: block;
}
.hide{
display: none;
}
.round-button{
width: 10em;
height: 10em;
border-radius: 100px !important;
color: rebeccapurple !important;
}
/*------------------------------------------------------------------*/
.row.paddless{
margin-bottom: -10px !important;
}
input.checkbox{
border-color: red;
margin-bottom: -20px !important;
margin-top: -20px !important;
padding-bottom: -20px;
right: auto;
}
.icon{
margin: 26%;
font-size: 70px;
}
.opt1{
margin-top: -5px;
margin-bottom: -5px;
}
.opt-left{
margin-left: -1.2em;
}
/*---------------------------------------------------------------------------------------------START HERE ------------------*/
.body{
background-color: whitesmoke;
/*height: 100%;*/
}
.footer1{
background: rgb(51, 51, 51);
color: white;
height:100px;
}
.container4{
background: linear-gradient(rgb(67, 67, 67), rgb(14, 14, 14));
/*height: 25em;*/
text-align: center;
align-items: center;
}
.p-bird{
font-size: 7em;
font-weight: bold;
text-align: left;
padding-left: 0.5em;
margin: 0;
font-family: Tahoma, Geneva, Verdana, sans-serif;
color: ghostwhite;
}
.p-strike{
font-size: 7em;
font-weight: bold;
text-align: left;
padding-left: 1.5em;
margin: 0;
font-family: Tahoma, Geneva, Verdana, sans-serif;
color: ghostwhite;
}
.card-page1{
border: none;
box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
/*box-shadow: rgba(0, 0, 0, 0.45) 0px 25px 20px -20px;*/
border-radius: 20px;
}
.btn-nav{
margin: 0;
font-size: 5em;
color: lightgray;
}
.btn-nav:hover{
color: white;
/*box-shadow: rgba(0, 0, 0, 0.4) 0px 30px 90px;*/
}
.btn-nav:active{
color: dodgerblue;
}
.btn-nav-center{
font-size: 2em;
/*color: #434343;*/
color: dodgerblue;
}
.btn-center-unactive{
font-size: 2em;
color: #434343;
}
.pad-img{
/*padding: 2em;*/
}
.img-cctv{
box-shadow: rgba(14, 30, 37, 0.12) 0px 2px 4px 0px, rgba(14, 30, 37, 0.32) 0px 2px 16px 0px;
border-radius: 10px;
margin: 1.5em;
}
.btn-circle{
width: 10em;
height: 10em;
background-color: black;
align-items: center;
align-content: center;
margin: 5%;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0px 12px 28px 0px, rgba(0, 0, 0, 0.1) 0px 2px 4px 0px, rgba(255, 255, 255, 0.05) 0px 0px 0px 1px inset;
}
.pad-top{
/*margin-top: -12px;*/
/*margin-bottom: -40px;*/
margin-top: -13px;
margin-bottom: -3px;
}
.pad-left{
margin-top: -25px;
/*margin-bottom: -20px;*/
margin-right: -20px;
}
.pad-right{
margin-top: -25px;
/*margin-bottom: -20px;*/
margin-left: -20px;
}
.pad-bottom{
/*margin-top: -20px;*/
/*margin-bottom: -20px;*/
margin-top: -25px;
/*margin-bottom: -12px;*/
}
/*--------------------------------BUTTON-------------------------------*/
.btn-round{
height: 150px;
width: 150px;
border-radius: 100%;
background: white;
border: 2px solid whitesmoke;
box-shadow: 0 4px 4px rgba(0, 0, 0, .3);
}
.button-container {
display: flex;
justify-content: center; /* Center horizontally */
align-items: center; /* Center vertically */
/*height: 100vh; !* Full viewport height *!*/
}
.outside{
display: flex;
align-items: center;
justify-content: center;
}
.outside-logout{
/*position: absolute;*/
display: flex;
/*text-align: right;*/
margin-top: 3.5em;
padding-bottom: 1em;
justify-content: end;
bottom: 10px; /* Adjust as needed */
right: 10px; /* Adjust as needed */
}
/*---------HEADER 2-------------------*/
.p-bird2{
font-size: 6rem;
font-weight: lighter;
text-align: left;
padding-left: 0.5em;
margin: 0;
font-family: Tahoma, Geneva, Verdana, sans-serif;
color: ghostwhite;
}
.hr-lines{
position: relative;
max-width: 100%;
margin: 35px auto;
text-align: center;
font-size: 3.7em;
color: white;
/*z-index: 2;*/
}
.hr-lines:before {
content:" ";
height: 4px;
width: 50px;
background: red;
display: block;
position: absolute;
top: 50%;
left: 0;
/*stroke-dasharray: 10px;*/
}
.hr-lines:after{
content:" ";
height: 4px;
width: 50px;
background: red;
display: block;
position: absolute;
top: 50%;
right: 0;
}
/*------------------------------------------------5 BUTTON PLAY KONTEN -------------------------*/
.btn-play1{
text-decoration: none;
background-color: #f7f7f7;
background-image: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#e7e7e7));
background-image: -webkit-linear-gradient(top, #f7f7f7, #e7e7e7);
background-image: -moz-linear-gradient(top, #f7f7f7, #e7e7e7);
background-image: -ms-linear-gradient(top, #f7f7f7, #e7e7e7);
background-image: -o-linear-gradient(top, #f7f7f7, #e7e7e7);
/*color: #a7a7a7;*/
color: black;
/*width: 100%;*/
/*padding-top: 100%;*/
width: 4.2em;
height: 4.2em;
/*padding-top: 100%;*/
position: relative;
text-align: center;
border-radius: 50%;
box-shadow: 0px 3px 8px #aaa, inset 0px 2px 3px #fff;
border: solid 1px transparent;
}
.btn-play1:before {
content: "";
display: block;
background: #fff;
border-top: 2px solid #ddd;
position: absolute;
/*top: -18px;*/
/*left: -18px;*/
/*bottom: -18px;*/
/*right: -18px;*/
z-index: -1;
border-radius: 50%;
box-shadow: inset 0px 8px 48px #ddd;
}
.btn-play1:active {
box-shadow: 0px 3px 8px #aaa inset, 0px 2px 3px #fff;
}
.btn-play1:hover {
text-decoration: none;
/*color: #555;*/
color: black;
background: #f5f5f5;
}
.icon1{
margin: 27%;
font-size: 2.2em;
position: absolute;
top: -2px;
left: 3px;
bottom: 0;
right: 0;
text-align: center;
}
.text-status1{
/*padding-top: 1em;*/
color: black;
font-size: 2em;
}
.btn-mute{
text-decoration: none;
background-color: #f7f7f7;
background-image: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#e7e7e7));
background-image: -webkit-linear-gradient(top, #f7f7f7, #e7e7e7);
background-image: -moz-linear-gradient(top, #f7f7f7, #e7e7e7);
background-image: -ms-linear-gradient(top, #f7f7f7, #e7e7e7);
background-image: -o-linear-gradient(top, #f7f7f7, #e7e7e7);
/*color: #a7a7a7;*/
color: black;
width: 2em;
height: 2em;
padding: 0.2em;
/*width: 100%;*/
/*padding-top: 100%;*/
position: relative;
text-align: center;
border-radius: 50%;
box-shadow: 0px 3px 8px #aaa, inset 0px 2px 3px #fff;
border: solid 1px transparent;
}
.pad-val-volume{
padding-left: 0 !important;
}
.pad-bar{
padding: 0.5em;
}
/*----------------------------------------------------LOGIN------------------------------------*/
.bg-img{
background: url('../images/airport-terminal.jpg');
/*background: url('../images/airport-terminal-bw.jpg');*/
height: 100vh;
background-size: cover;
background-position: center;
}
.bg-img:after{
position: absolute;
content: '';
top: 0;
left: 0;
height: 100%;
width: 100%;
background: rgb(40 67 73 / 40%);
}
.content{
position: absolute;
top: 50%;
left: 50%;
border-radius: 15px;
z-index: 999;
text-align: center;
backdrop-filter: blur(10px);
padding: 60px 32px;
width: 370px;
transform: translate(-50%,-50%);
background: rgba(255,255,255,0.04);
box-shadow: -1px 4px 28px 0px rgba(0,0,0,0.75);
}
.content header{
color: white;
font-size: 33px;
font-weight: 600;
margin: 0 0 35px 0;
font-family: 'Montserrat',sans-serif;
}
.field{
position: relative;
height: 45px;
width: 100%;
display: flex;
background: rgba(255,255,255,0.94);
align-items: center;
padding: 10px;
/*border-radius: 4px;*/
}
.field span{
color: #222;
width: 40px;
line-height: 45px;
}
.field input{
height: 100%;
width: 100%;
background: transparent;
border: none;
outline: none;
color: #222;
font-size: 16px;
font-family: 'Poppins',sans-serif;
padding: 10px;
}
.space{
margin-top: 16px;
}
.showw{
position: absolute;
right: 13px;
font-size: 13px;
font-weight: 700;
color: #222;
display: none;
cursor: pointer;
font-family: 'Montserrat',sans-serif;
}
.pass-key:valid ~ .show{
display: block;
}
.pass{
text-align: left;
margin: 10px 0;
}
.pass a{
color: white;
text-decoration: none;
font-family: 'Poppins',sans-serif;
}
.pass:hover a{
text-decoration: underline;
}
.field input[type="submit"]{
background: #3498db;
border: 1px solid #2691d9;
color: white;
font-size: 18px;
letter-spacing: 1px;
font-weight: 600;
cursor: pointer;
font-family: 'Montserrat',sans-serif;
}
.field input[type="submit"]:hover{
background: #2691d9;
}
.login{
color: white;
margin: 20px 0;
font-family: 'Poppins',sans-serif;
}
.input-rad{
border-radius: 4px;
}
.padding-lock{
padding-left: 10px;
padding-right: 10px;
}
.padding-btn{
padding: 0;
}
.pad-br{
padding-bottom: 12px;
}
.div-disabled{
pointer-events: none;
}
.output{
padding-left: 20%;
}
.pad-menu{
padding-right: 20px;
}
.container-setting{
background: linear-gradient(rgb(253, 252, 251), rgb(226, 229, 231));
min-height: 70vh;
}
.p-title{
font-size: 2.5em !important;
}
.bg-gray{
background: linear-gradient(rgb(253, 252, 251), rgb(226, 229, 231));
}
.card-shadow{
box-shadow: rgba(0, 0, 0, 0.45) 0px 25px 20px -20px;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

256
Html/html/setting.html Normal file
View File

@@ -0,0 +1,256 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Bird Deterrent System</title>
<link rel="stylesheet" type="text/css" href="public/style/style.css">
<link rel="stylesheet" type="text/css" href="public/style/bootstrap.min.css">
<script src="public/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="public/style/jquery.dataTables.min.css">
<script src="public/js/jquery-3.7.1.min.js"></script>
<script src="public/js/jquery.dataTables.min.js"></script>
<script src="public/js/all.min.js"></script>
<link rel="stylesheet" href="public/style/all.min.css">
<script src="setting.js"></script>
</head>
<body onload="onload()">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark text-light container4">
<div class="container-fluid">
<a class="navbar-brand p-title" href="index.html">Bird Deterrent System</a>
<!-- Toggler/collapsible Button -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Collapsible Navbar -->
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item pad-menu">
<a class="nav-link" href="setting.html">Setting</a>
</li>
<li class="nav-item pad-menu">
<form action="/logout" method="get">
<button class="btn btn-outline-light" type="submit">Logout</button>
</form>
</li>
</ul>
</div>
</div>
</nav>
<!-- SECTION 2 -->
<div class="container-fluid container-setting">
<div class="container">
<div class="card mt-5 card-shadow">
<div class="card-header bg-secondary text-light">
<h5 class="text-md-center">Audio Files</h5>
</div>
<div class="card-body bg-gray">
<form action="/setting/audiofile" method="post">
<!-- PRESET 1-->
<div class="row mt--2">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<p>Preset 1</p>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<select id="preset1" class="form-control class100">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
</div>
<!-- PRESET 2-->
<div class="row mt-2">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<p>Preset 2</p>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<select id="preset2" class="form-control class100">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
</div>
<!-- PRESET 3-->
<div class="row mt-2">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<p>Preset 3</p>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<select id="preset3" class="form-control class100">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
</div>
<!-- PRESET 4-->
<div class="row mt-2">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<p>Preset 4</p>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<select id="preset4" class="form-control class100">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
</div>
<!-- PRESET 5-->
<div class="row mt-2">
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<p>Preset 5</p>
</div>
<div class="col-6 col-sm-6 col-md-6 col-lg-6 col-xl-6">
<select id="preset5" class="form-control class100">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>
</div>
<div class="row mt-2">
<div class="col-6"></div>
<div class="col-6">
<button id="save_audio" type="submit" class="btn btn-primary class100" onclick="save_audio()">SAVE</button>
</div>
</div>
</form>
</div>
</div>
<div class="card mt-5 card-shadow">
<div class="card-header bg-secondary text-light">
<h5 class="text-center"> Upload Audio</h5>
</div>
<div class="card-body bg-gray">
<form action="/setting/uploadaudiofile" method="post" enctype="multipart/form-data">
<div class="row mt-2">
<div class="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
<p> Upload audio files</p>
</div>
<div class="col-6 col-sm-6 col-md-4 col-lg-4 col-xl-4">
<input class="form-control" type="file" name="file" title="Select Audio File">
</div>
<div class="col-6 col-sm-6 col-md-2 col-lg-2 col-xl-2">
<button id="uploadd_file" type="submit" class="btn btn-dark class100">Upload</button>
</div>
</div>
</form>
</div>
</div>
<div class="card mt-5 card-shadow">
<div class="card-header bg-secondary text-light ">
<h5 class="text-center">Camera</h5>
</div>
<div class="card-body bg-gray">
<form action="/setting/camera" method="post">
<div class="row mt-2">
<div class="col-6">
<p>IP Address</p>
</div>
<div class="col-6">
<input id="setting_ip" class="form-control" title="IP Address">
</div>
</div>
<div class="row mt-2">
<div class="col-6">
<p>Port</p>
</div>
<div class="col-6">
<input id="setting_port" class="form-control" title="Port">
</div>
</div>
<div class="row mt-2">
<div class="col-6">
<p>Username</p>
</div>
<div class="col-6">
<input id="setting_username" class="form-control" title="Username">
</div>
</div>
<div class="row mt-2">
<div class="col-6">
<p>Password</p>
</div>
<div class="col-6">
<div class="input-group">
<input type="password" id="setting_password" class="form-control" title="Password">
<span class="input-group-text" onclick="cameraPassword()">
<i class="fa-solid fa-eye" id="icon_camera"></i>
</span>
</div>
</div>
</div>
<div class="row mt-2">
<div class="col-6"></div>
<div class="col-6">
<button id="save_camera" type="submit" class="btn btn-primary class100" onclick="save_camera()">SAVE</button>
</div>
</div>
</form>
</div>
</div>
<div class="card mt-5 card-shadow">
<div class="card-header bg-secondary text-light">
<h5 class="text-center">Login</h5>
</div>
<div class="card-body bg-gray">
<form action="/setting/weblogin" method="post">
<div class="row mt-2">
<div class="col-6">
<p>Username</p>
</div>
<div class="col-6">
<input id="login_username" class="form-control" title="Username">
</div>
</div>
<div class="row mt-2">
<div class="col-6">
<p>Password</p>
</div>
<div class="col-6">
<div class="input-group">
<input type="password" id="edit_password" class="form-control" title="Password">
<span class="input-group-text" onclick="showPassword()">
<i class="fa-solid fa-eye" id="icon_password"></i>
</span>
</div>
</div>
</div>
<div class="row mt-2">
<div class="col-6">
<p>Confirm Password</p>
</div>
<div class="col-6">
<div class="input-group">
<input type="password" id="confirm_password" class="form-control" title="Confirm Password">
<span class="input-group-text" onclick="showConfirm()">
<i class="fa-solid fa-eye" id="icon_confirm"></i>
</span>
</div>
</div>
</div>
<div class="row mt-2">
<div class="col-6"></div>
<div class="col-6">
<button id="save_login" type="submit" class="btn btn-primary class100" onclick="save_login()">SAVE</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- SECTION 3 -->
<div class="container-fluid footer1 outside">
<p>2024 Copyright &copy; Galva Technologies. All rights reserved.</p>
</div>
</body>
</html>

111
Html/html/setting.js Normal file
View File

@@ -0,0 +1,111 @@
// script for setting.html start here
async function onload(){
const resp = await fetch("/setting");
if (resp.status === 200) {
/**
* @type {Object}
* @property {String[]} AudioFiles
* @property {String} AudioFile1
* @property {String} AudioFile2
* @property {String} AudioFile3
* @property {String} AudioFile4
* @property {String} AudioFile5
* @property {String} CameraIP
* @property {String} CameraPort
* @property {String} CameraUsername
* @property {String} CameraPassword
* @property {String} LoginUsername
* @property {String} LoginPassword
*/
const data = await resp.json();
fill_select(1, data["AudioFiles"]);
fill_select(2, data["AudioFiles"]);
fill_select(3, data["AudioFiles"]);
fill_select(4, data["AudioFiles"]);
fill_select(5, data["AudioFiles"]);
$("#preset1").val(data["AudioFile1"]);
$("#preset2").val(data["AudioFile2"]);
$("#preset3").val(data["AudioFile3"]);
$("#preset4").val(data["AudioFile4"]);
$("#preset5").val(data["AudioFile5"]);
$("#setting_ip").val(data["CameraIP"]);
$("#setting_port").val(data["CameraPort"]);
$("#setting_username").val(data["CameraUsername"]);
$("#setting_password").val(data["CameraPassword"]);
$("#login_username").val(data["LoginUsername"]);
$("#edit_password").val(data["LoginPassword"]);
$("#confirm_password").val(data["LoginPassword"]);
}
}
/**
* Fill select with values
* @param {number} index start from 1
* @param {String[]} values array of values
*/
function fill_select(index, values){
/**
*
* @type {HTMLSelectElement}
*/
let preset = document.getElementById("preset"+index);
preset.innerHTML = "";
if (values!=null && values.length>0){
for (let i = 0; i < values.length; i++) {
const element = values[i];
let option = document.createElement("option");
option.value = element;
option.innerText = element;
preset.appendChild(option);
}
}
}
function cameraPassword() {
const passwordField = document.getElementById('setting_password');
const icon = document.getElementById('icon_camera');
if (passwordField.type === 'password') {
passwordField.type = 'text';
icon.classList.remove('fa-eye');
icon.classList.add('fa-eye-slash');
} else {
passwordField.type = 'password';
icon.classList.remove('fa-eye-slash');
icon.classList.add('fa-eye');
}
}
function showPassword() {
const passwordField = document.getElementById('edit_password');
const icon = document.getElementById('icon_password');
if (passwordField.type === 'password') {
passwordField.type = 'text';
icon.classList.remove('fa-eye');
icon.classList.add('fa-eye-slash');
} else {
passwordField.type = 'password';
icon.classList.remove('fa-eye-slash');
icon.classList.add('fa-eye');
}
}
function showConfirm() {
const passwordField = document.getElementById('confirm_password');
const icon = document.getElementById('icon_confirm');
if (passwordField.type === 'password') {
passwordField.type = 'text';
icon.classList.remove('fa-eye');
icon.classList.add('fa-eye-slash');
} else {
passwordField.type = 'password';
icon.classList.remove('fa-eye-slash');
icon.classList.add('fa-eye');
}
}