mirror of
https://github.com/MasterAcnolo/Freedom-Loader.git
synced 2026-07-29 18:25:47 +02:00
Push avant modif DIV INFO
This commit is contained in:
1
public/assets/icons/file-audio-solid.svg
Normal file
1
public/assets/icons/file-audio-solid.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M64 0C28.7 0 0 28.7 0 64L0 448c0 35.3 28.7 64 64 64l256 0c35.3 0 64-28.7 64-64l0-288-128 0c-17.7 0-32-14.3-32-32L224 0 64 0zM256 0l0 128 128 0L256 0zm2 226.3c37.1 22.4 62 63.1 62 109.7s-24.9 87.3-62 109.7c-7.6 4.6-17.4 2.1-22-5.4s-2.1-17.4 5.4-22C269.4 401.5 288 370.9 288 336s-18.6-65.5-46.5-82.3c-7.6-4.6-10-14.4-5.4-22s14.4-10 22-5.4zm-91.9 30.9c6 2.5 9.9 8.3 9.9 14.8l0 128c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L113.4 376 80 376c-8.8 0-16-7.2-16-16l0-48c0-8.8 7.2-16 16-16l33.4 0 35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5zm51 34.9c6.6-5.9 16.7-5.3 22.6 1.3C249.8 304.6 256 319.6 256 336s-6.2 31.4-16.3 42.7c-5.9 6.6-16 7.1-22.6 1.3s-7.1-16-1.3-22.6c5.1-5.7 8.1-13.1 8.1-21.3s-3.1-15.7-8.1-21.3c-5.9-6.6-5.3-16.7 1.3-22.6z"/></svg>
|
||||||
|
After Width: | Height: | Size: 955 B |
@@ -5,15 +5,34 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Freedom Loader</title>
|
<title>Freedom Loader</title>
|
||||||
|
|
||||||
|
<!--CSS-->
|
||||||
<link rel="stylesheet" href="styles/styles.css">
|
<link rel="stylesheet" href="styles/styles.css">
|
||||||
|
|
||||||
|
<!--Icons-->
|
||||||
|
<link rel="icon" href="assets/icons/file-audio-solid.svg" type="image/svg+xml">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1> Freedom Loader </h1>
|
||||||
|
<p> Because why not? </p>
|
||||||
|
</header>
|
||||||
|
|
||||||
<form action="/download" method="POST" id="downloadForm">
|
<form action="/download" method="POST" id="downloadForm">
|
||||||
<input name="url" placeholder="URL YouTube" id="UrlInput">
|
<input name="url" placeholder="URL" id="UrlInput">
|
||||||
<input type="checkbox" name="audioOnly" value="1"> MP3 seulement
|
|
||||||
|
<label class="checkbox-inline">
|
||||||
|
|
||||||
|
<label class="checkbox-mp3">
|
||||||
|
<input type="checkbox" name="audioOnly" value="1">
|
||||||
|
<div class="checkmark"></div>
|
||||||
|
</label>
|
||||||
|
<!-- <input type="checkbox" name="audioOnly" value="1"> -->
|
||||||
|
Audio seulement (MP3)
|
||||||
|
</label>
|
||||||
|
<!-- <input type="checkbox" name="audioOnly" value="1"> Audio seulement (MP3) -->
|
||||||
<select name="quality">
|
<select name="quality">
|
||||||
<option value="best">Meilleure qualité</option>
|
<option value="best">Meilleure qualité</option>
|
||||||
<option value="worst">Qualité minimale</option>
|
<option value="worst">Qualité minimale</option>
|
||||||
@@ -21,7 +40,7 @@
|
|||||||
<button type="submit">Télécharger</button>
|
<button type="submit">Télécharger</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="downloadStatus" style="margin-top: 1em; font-weight:bold;"></div>
|
<div id="downloadStatus"></div>
|
||||||
|
|
||||||
<!--Il faut utiliser un formulaire, parce que on doit envoyer a un serveur
|
<!--Il faut utiliser un formulaire, parce que on doit envoyer a un serveur
|
||||||
les données à traiter. Pour cela on définit une route vers /download, ca va
|
les données à traiter. Pour cela on définit une route vers /download, ca va
|
||||||
@@ -35,5 +54,6 @@
|
|||||||
|
|
||||||
<script src="script/downloadstatus.js"></script>
|
<script src="script/downloadstatus.js"></script>
|
||||||
<script src="script/fetchinfo.js"></script>
|
<script src="script/fetchinfo.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
80
public/styles/button/checkbox.css
Normal file
80
public/styles/button/checkbox.css
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/* From Uiverse.io by bociKond */
|
||||||
|
/* Hide the default checkbox */
|
||||||
|
.checkbox-mp3 input {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-mp3 {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a custom checkbox */
|
||||||
|
.checkmark {
|
||||||
|
--clr: #0B6E4F;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 1.3em;
|
||||||
|
width: 1.3em;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 50%;
|
||||||
|
transition: 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When the checkbox is checked, add a blue background */
|
||||||
|
.checkbox-mp3 input:checked ~ .checkmark {
|
||||||
|
background-color: var(--clr);
|
||||||
|
border-radius: .5rem;
|
||||||
|
animation: pulse 500ms ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create the checkmark/indicator (hidden when not checked) */
|
||||||
|
.checkmark:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show the checkmark when checked */
|
||||||
|
.checkbox-mp3 input:checked ~ .checkmark:after {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style the checkmark/indicator */
|
||||||
|
.container .checkmark:after {
|
||||||
|
left: 0.45em;
|
||||||
|
top: 0.25em;
|
||||||
|
width: 0.25em;
|
||||||
|
height: 0.5em;
|
||||||
|
border: solid #E0E0E2;
|
||||||
|
border-width: 0 0.15em 0.15em 0;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
0% {
|
||||||
|
box-shadow: 0 0 0 #0B6E4F90;
|
||||||
|
rotate: 20deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
rotate: -20deg;
|
||||||
|
}
|
||||||
|
|
||||||
|
75% {
|
||||||
|
box-shadow: 0 0 0 10px #0B6E4F60;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
box-shadow: 0 0 0 13px #0B6E4F30;
|
||||||
|
rotate: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
.container {
|
.container {
|
||||||
position: fixed;
|
position: relative;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
background-color: #121212;
|
/* height: 10000px; */
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
box-shadow: 0 2px 5px rgba(0,0,0,0.5);
|
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#downloadStatus {
|
#downloadStatus {
|
||||||
min-height: 1.5em; /* pour garder la place même vide */
|
min-height: 1.5em;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #007bff;
|
color: #007bff;
|
||||||
|
|||||||
@@ -41,4 +41,33 @@ form#downloadForm {
|
|||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.checkbox-inline {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
align-self: center;
|
||||||
|
gap: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#UrlInput {
|
||||||
|
padding: 0.75em 1em;
|
||||||
|
border-color: #ccc;
|
||||||
|
box-shadow: none;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 1rem;
|
||||||
|
transition: border-color 0.3s ease, box-shadow 0.3s ease;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
#UrlInput:focus {
|
||||||
|
border-color: #0056b3;
|
||||||
|
box-shadow: 0 0 5px rgba(0,123,255,0.4);
|
||||||
|
outline: none;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#UrlInput::placeholder {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 2vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
header h1{
|
||||||
|
margin-bottom: 0.2vw;
|
||||||
|
}
|
||||||
81
public/styles/layout/videoinfo.css
Normal file
81
public/styles/layout/videoinfo.css
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#videoInfo {
|
||||||
|
margin-top: 20px;
|
||||||
|
max-width: 600px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding: 1.5em 2em;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 8px 16px rgba(0,0,0,0.1);
|
||||||
|
color: #222;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
opacity: 0;
|
||||||
|
max-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
transition: opacity 0.5s ease, max-height 0.5s ease;
|
||||||
|
user-select: text;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo.visible {
|
||||||
|
opacity: 1;
|
||||||
|
max-height: 1500px;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo h3 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
margin-bottom: 0.6em;
|
||||||
|
color: #007bff;
|
||||||
|
font-weight: 700;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo ul li {
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo ul li strong {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo ul li a {
|
||||||
|
color: #007bff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo ul li a:hover,
|
||||||
|
#videoInfo ul li a:focus {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Responsive */
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
#videoInfo {
|
||||||
|
padding: 1em;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#videoInfo h3 {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,31 +1,37 @@
|
|||||||
@import url("layout/form.css");
|
@import url("layout/form.css");
|
||||||
@import url("layout/container.css");
|
@import url("layout/container.css");
|
||||||
@import url("layout/ctr-infos.css");
|
@import url("layout/ctr-infos.css");
|
||||||
|
@import url("layout/header.css");
|
||||||
|
@import url("layout/videoinfo.css");
|
||||||
|
@import url("button/checkbox.css");
|
||||||
|
|
||||||
*{
|
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
||||||
|
|
||||||
|
html,body{
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
scroll-behavior: smooth;
|
scroll-behavior: smooth;
|
||||||
|
/* outline: 2px solid red; */
|
||||||
|
font-family: "Poppins", sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: Arial, sans-serif;
|
/* background-color: #f5f5f5; */
|
||||||
background-color: #f5f5f5;
|
background-image: linear-gradient(to left top, #838383, #a1a1a1, #bfbfbf, #dfdfdf, #ffffff);
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-attachment: fixed;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
color: #333;
|
color: #333;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 100vh;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#downloadStatus {
|
|
||||||
margin-top: 0.5em;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #eee;
|
|
||||||
min-height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#videoInfo {
|
#videoInfo {
|
||||||
margin-top: 100px;
|
margin-top: 100px;
|
||||||
@@ -34,7 +40,7 @@ body {
|
|||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
color: #fff;
|
color: rgb(0, 0, 0);
|
||||||
box-shadow: 0 0 10px rgba(0,0,0,0.5);
|
box-shadow: 0 0 10px rgba(0,0,0,0.5);
|
||||||
transition: opacity 0.5s ease, max-height 0.5s ease;
|
transition: opacity 0.5s ease, max-height 0.5s ease;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
@@ -46,9 +52,3 @@ body {
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
max-height: 1000px;
|
max-height: 1000px;
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
font-size: 0.9em;
|
|
||||||
}
|
|
||||||
@@ -23,5 +23,5 @@ app.use("/info", infoRoute); // on associe le contenu de infos.js à /info
|
|||||||
|
|
||||||
|
|
||||||
app.listen(8080, () => {
|
app.listen(8080, () => {
|
||||||
console.log("🟢 Serveur prêt sur http://localhost:8080");
|
console.log("🟢 Serveur prêt sur http://localhost:8080 \n Bonjour!");
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user