3 Commits
1.0.4 ... 1.0.6

Author SHA1 Message Date
f5b93f5d39 restore original design
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2025-05-23 12:12:09 +00:00
5dacc36836 new template fields
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2025-05-21 07:42:04 +00:00
453f84f0e3 new design changes
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2025-05-19 06:11:42 +00:00
5 changed files with 189 additions and 49 deletions

View File

@@ -358,6 +358,61 @@ function get_services() {
}); });
} }
function get_proxy_html() {
proxy_html = `
<fieldset>
<legend>Enable proxy</legend>
<div class="input-group">
<form class="form-install" action="#" method="post" id="save_vpn">
<div class="row">
<div class="mb-3">
<label for="vpn_domain">Please add domain url to download the VPN hash from (default: https://portal.safebox.network):</label>
<input type="text" class="form-control" name="VPN_DOMAIN" id="vpn_domain" value="https://portal.safebox.network">
<div class="invalid-feedback">
Please enter a valid domain.
</div>
</div>
</div>
<div class="row">
<div class="mb-3">
<label for="vpn_pass">Please type in the generated VPN passkey (8 digits):</label>
<input type="text" class="form-control" name="VPN_PASS" id="vpn_pass" value="" maxlength="8" size="10">
</div>
</div>
<div class="row">
<div class="mb-3">
<label for="letsencrypt_mail">Please add the letsencrypt mail address:</label>
<input type="email" class="form-control" name="LETSENCRYPT_MAIL" id="letsencrypt_mail" value="">
<div class="invalid-feedback">
Please enter a valid email.
</div>
</div>
</div>
<div class="row">
<div class="mb-3">
<label for="letsencrypt_servername">Please add letsencrypt server name (default is letsencrypt but you can add zerossl too):</label>
<input type="text" class="form-control" name="LETSENCRYPT_SERVERNAME" id="letsencrypt_servername" value="letsencrypt">
</div>
</div>
<div class="row buttons">
<div class="mb-3">
<button class="btn btn-lg btn-primary btn-block" type="button" id="vpn_save_btn"> Save </button>
</div>
</div>
</form>
</div>
</fieldset>
<script>
jQuery('#vpn_save_btn').click(function() {
console.log('vpn save');
jQuery('#vpn').html('Loading...');
save_vpn();
});
</script>
`;
jQuery("#vpn").html(proxy_html);
}
function check_containers() { function check_containers() {
var url = 'scan.php?op=check_containers'; var url = 'scan.php?op=check_containers';
jQuery.get(url, function(data) { jQuery.get(url, function(data) {

View File

@@ -132,3 +132,55 @@ body#scan{
transform: rotate(135deg); transform: rotate(135deg);
} }
} }
.info-container {
position: relative;
display: inline-block;
font-family: Arial, sans-serif;
}
.info-icon {
background-color: #007BFF;
color: white;
border-radius: 50%;
padding: 4px 8px;
cursor: pointer;
font-weight: bold;
font-size: 14px;
text-align: center;
line-height: 1;
display: inline-block;
}
.tooltip {
visibility: hidden;
background-color: #333;
color: #fff;
text-align: left;
border-radius: 4px;
padding: 8px;
position: absolute;
z-index: 1;
bottom: 125%; /* above the icon */
left: 50%;
transform: translateX(-50%);
opacity: 0;
transition: opacity 0.3s;
white-space: nowrap;
}
.tooltip::after {
content: "";
position: absolute;
top: 100%; /* bottom of tooltip */
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #333 transparent transparent transparent;
}
.info-container:hover .tooltip {
visibility: visible;
opacity: 1;
}

View File

@@ -8,7 +8,7 @@
<!-- Bootstrap CSS --> <!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.2.1/dist/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.2.1/dist/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<!-- Custom styles for this template --> <!-- Custom styles for this template -->
<link href="installer.css?t=5" rel="stylesheet"> <link href="installer.css?t=6" rel="stylesheet">
</head> </head>
<body id="manage" class="text-center"> <body id="manage" class="text-center">
<div class="container-fluid"> <div class="container-fluid">

View File

@@ -368,6 +368,58 @@
background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='10' viewBox='0 0 14 10'%3E%3Cpolyline points='1 1 7 7 13 1' style='fill:none;stroke:white;stroke-width:2' /%3E%3C/svg%3E"); background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='10' viewBox='0 0 14 10'%3E%3Cpolyline points='1 1 7 7 13 1' style='fill:none;stroke:white;stroke-width:2' /%3E%3C/svg%3E");
} }
.info-container {
position: relative;
display: inline-block;
font-family: Arial, sans-serif;
}
.info-icon {
background-color: #007BFF;
color: white;
border-radius: 50%;
padding: 4px 8px;
cursor: pointer;
font-weight: bold;
font-size: 14px;
text-align: center;
line-height: 1;
display: inline-block;
}
.tooltip {
visibility: hidden;
background-color: #333;
color: #fff;
text-align: left;
border-radius: 4px;
padding: 8px;
position: absolute;
z-index: 1;
bottom: 125%; /* above the icon */
left: 50%;
transform: translateX(-50%);
opacity: 0;
transition: opacity 0.3s;
white-space: nowrap;
}
.tooltip::after {
content: "";
position: absolute;
top: 100%; /* bottom of tooltip */
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #333 transparent transparent transparent;
}
.info-container:hover .tooltip {
visibility: visible;
opacity: 1;
}
@media (max-width: 768px) { @media (max-width: 768px) {
header { header {
flex-direction: column; flex-direction: column;
@@ -433,6 +485,11 @@
<div class="profile" id="profileSection"> <div class="profile" id="profileSection">
<!--<img src="image.png" alt="Profilkép">--> <!--<img src="image.png" alt="Profilkép">-->
<div id="vpnBtn">Pro</div> <div id="vpnBtn">Pro</div>
</div>
<div style="text-align:center">
Proxy&nbsp;status
<span id="vpn_on" class="hidden green"><b>ON</b></span>
<span id="vpn_off" class="hidden red"><b>OFF</b></span>
</div> </div>
<div class="buttons"> <div class="buttons">
<button id="servicesBtn">Services</button> <button id="servicesBtn">Services</button>
@@ -450,10 +507,10 @@
<br> <br>
<br> <br>
<div style="text-align:center;"> <div style="text-align:center;">
<a href="manage2.html" id="refresh_btn">REFRESH</a> <a href="manage.html" id="refresh_btn">REFRESH</a>
<br> <br>
<br> <br>
<a href="manage.html" id="old_btn">OLD DESIGN</a> <a href="manage2.html" id="old_btn">OLD DESIGN</a>
</div> </div>
</div> </div>
@@ -599,48 +656,11 @@
function renderVPN() { function renderVPN() {
myAppsContainer.innerHTML = ` myAppsContainer.innerHTML = `
<fieldset> <div id="vpn">
<legend>Enable proxy</legend> Loading...
<form class="form-install" action="#" method="post" id="save_vpn"> </div>
<div class="row">
<div class="mb-3">
<label for="vpn_domain">Please add domain url to download the VPN hash from (default: https://portal.safebox.network):</label>
<input type="text" class="form-control" name="VPN_DOMAIN" id="vpn_domain" value="https://portal.safebox.network">
<div class="invalid-feedback">
Please enter a valid domain.
</div>
</div>
</div>
<div class="row">
<div class="mb-3">
<label for="vpn_pass">Please type in the generated VPN passkey (8 digits):</label>
<input type="text" class="form-control" name="VPN_PASS" id="vpn_pass" value="" maxlength="8" size="10">
</div>
</div>
<div class="row">
<div class="mb-3">
<label for="letsencrypt_mail">Please add the letsencrypt mail address:</label>
<input type="email" class="form-control" name="LETSENCRYPT_MAIL" id="letsencrypt_mail" value="">
<div class="invalid-feedback">
Please enter a valid email.
</div>
</div>
</div>
<div class="row">
<div class="mb-3">
<label for="letsencrypt_servername">Please add letsencrypt server name (default is letsencrypt but you can add zerossl too):</label>
<input type="text" class="form-control" name="LETSENCRYPT_SERVERNAME" id="letsencrypt_servername" value="letsencrypt">
</div>
</div>
<div class="row">
<div class="mb-3">
<button class="btn btn-lg btn-primary btn-block" type="submit" id="vpn_save_btn"> Save </button> &nbsp;
<button class="btn btn-lg btn-primary btn-block" type="button" id="vpn_cancel_btn"> Cancel </button>
</div>
</div>
</form>
</fieldset>
`; `;
get_proxy_html();
} }
function renderServices() { function renderServices() {
@@ -743,6 +763,6 @@
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.6/dist/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.6/dist/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.2.1/dist/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.2.1/dist/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="common.js?t=4"></script> <script src="common.js?t=7"></script>
</body> </body>
</html> </html>

View File

@@ -194,14 +194,27 @@ switch ($_GET["op"]) {
} }
} }
echo '</div>'; echo '</div>';
if (!empty($template->icon)) echo "<div class=\"row\"><img src=\"".$template->icon."\"></div>";
if (!empty($template->description)) echo "<div class=\"row\"><label>".$template->description."</label></div>";
foreach ($template->fields as $field) { foreach ($template->fields as $field) {
if (!empty($field->title)) echo "<div class=\"row\"><b>".$field->title."</b></div>";
if (isset($field->generated)) { if (isset($field->generated)) {
echo "<input type=\"hidden\" value=\"generated:{$field->generated}\" name=\"{$field->key}\" id=\"{$template->name}_{$field->key}\" class=\"additional_{$template->name}\">"; echo "<input type=\"hidden\" value=\"generated:{$field->generated}\" name=\"{$field->key}\" id=\"{$template->name}_{$field->key}\" class=\"additional_{$template->name}\">";
} }
else { else {
echo "<div class=\"row\"><div class=\"mb-3\"><label>".$field->description."</label> echo "<div class=\"row\">";
<input ".($field->required=="true" ? "required" : "")." type=\"".(!empty($field->type) ? $field->type : "text")."\" value=\"{$field->value}\" name=\"{$field->key}\" id=\"{$template->name}_{$field->key}\" class=\"additional_{$template->name}\"> echo "<div>
</div></div>"; <label>".$field->description."</label>
<input ".($field->required=="true" ? "required" : "")." type=\"".(!empty($field->type) ? $field->type : "text")."\" value=\"{$field->value}\" name=\"{$field->key}\" id=\"{$template->name}_{$field->key}\" class=\"additional_{$template->name}\">
</div>";
if (!empty($field->info)) echo "
<div class=\"info-container\">
<span class=\"info-icon\">i</span>
<div class=\"tooltip\">{$field->info}</div>
</div>
";
echo "</div>";
if (!empty($field->details)) echo "<div class=\"row\"><i>".$field->details."</i></div>";
} }
} }