first commit
This commit is contained in:
5
Html/html/.idea/.gitignore
generated
vendored
Normal file
5
Html/html/.idea/.gitignore
generated
vendored
Normal 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
8
Html/html/.idea/modules.xml
generated
Normal 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
256
Html/html/index.html
Normal 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 © Galva Technologies. All rights reserved.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
400
Html/html/index.js
Normal file
400
Html/html/index.js
Normal 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
41
Html/html/login.html
Normal 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
10
Html/html/login.js
Normal 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';
|
||||
}
|
||||
}
|
||||
BIN
Html/html/public/images/airport-terminal.jpg
Normal file
BIN
Html/html/public/images/airport-terminal.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 MiB |
BIN
Html/html/public/images/not-available.png
Normal file
BIN
Html/html/public/images/not-available.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
6
Html/html/public/js/all.min.js
vendored
Normal file
6
Html/html/public/js/all.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
Html/html/public/js/bootstrap.bundle.min.js
vendored
Normal file
7
Html/html/public/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
Html/html/public/js/jquery-3.6.0.min.js
vendored
Normal file
2
Html/html/public/js/jquery-3.6.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
Html/html/public/js/jquery-3.7.1.min.js
vendored
Normal file
2
Html/html/public/js/jquery-3.7.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
Html/html/public/js/jquery.dataTables.min.js
vendored
Normal file
4
Html/html/public/js/jquery.dataTables.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
12
Html/html/public/style/all.min.css
vendored
Normal file
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
515
Html/html/public/style/bootstrap.css
vendored
Normal 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;
|
||||
}
|
||||
7
Html/html/public/style/bootstrap.min.css
vendored
Normal file
7
Html/html/public/style/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
Html/html/public/style/jquery.dataTables.min.css
vendored
Normal file
1
Html/html/public/style/jquery.dataTables.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
822
Html/html/public/style/style.css
Normal file
822
Html/html/public/style/style.css
Normal 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;
|
||||
}
|
||||
BIN
Html/html/public/webfonts/fa-brands-400.ttf
Normal file
BIN
Html/html/public/webfonts/fa-brands-400.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-brands-400.woff2
Normal file
BIN
Html/html/public/webfonts/fa-brands-400.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-duotone-900.ttf
Normal file
BIN
Html/html/public/webfonts/fa-duotone-900.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-duotone-900.woff2
Normal file
BIN
Html/html/public/webfonts/fa-duotone-900.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-light-300.ttf
Normal file
BIN
Html/html/public/webfonts/fa-light-300.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-light-300.woff2
Normal file
BIN
Html/html/public/webfonts/fa-light-300.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-regular-400.ttf
Normal file
BIN
Html/html/public/webfonts/fa-regular-400.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-regular-400.woff2
Normal file
BIN
Html/html/public/webfonts/fa-regular-400.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-light-300.ttf
Normal file
BIN
Html/html/public/webfonts/fa-sharp-light-300.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-light-300.woff2
Normal file
BIN
Html/html/public/webfonts/fa-sharp-light-300.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-regular-400.ttf
Normal file
BIN
Html/html/public/webfonts/fa-sharp-regular-400.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-regular-400.woff2
Normal file
BIN
Html/html/public/webfonts/fa-sharp-regular-400.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-solid-900.ttf
Normal file
BIN
Html/html/public/webfonts/fa-sharp-solid-900.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-solid-900.woff2
Normal file
BIN
Html/html/public/webfonts/fa-sharp-solid-900.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-thin-100.ttf
Normal file
BIN
Html/html/public/webfonts/fa-sharp-thin-100.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-sharp-thin-100.woff2
Normal file
BIN
Html/html/public/webfonts/fa-sharp-thin-100.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-solid-900.ttf
Normal file
BIN
Html/html/public/webfonts/fa-solid-900.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-solid-900.woff2
Normal file
BIN
Html/html/public/webfonts/fa-solid-900.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-thin-100.ttf
Normal file
BIN
Html/html/public/webfonts/fa-thin-100.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-thin-100.woff2
Normal file
BIN
Html/html/public/webfonts/fa-thin-100.woff2
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-v4compatibility.ttf
Normal file
BIN
Html/html/public/webfonts/fa-v4compatibility.ttf
Normal file
Binary file not shown.
BIN
Html/html/public/webfonts/fa-v4compatibility.woff2
Normal file
BIN
Html/html/public/webfonts/fa-v4compatibility.woff2
Normal file
Binary file not shown.
256
Html/html/setting.html
Normal file
256
Html/html/setting.html
Normal 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 © Galva Technologies. All rights reserved.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
111
Html/html/setting.js
Normal file
111
Html/html/setting.js
Normal 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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user