mirror of
https://github.com/donaldzou/WGDashboard.git
synced 2025-08-28 07:51:13 +00:00
Finished adding available IP and related UI adjustment
This commit is contained in:
@@ -382,3 +382,15 @@ main{
|
||||
animation: loading 3s infinite ease-in-out;
|
||||
}
|
||||
|
||||
#qrcode_img img{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#selected_ip_list .badge{
|
||||
margin: 0.1rem
|
||||
}
|
||||
|
||||
#add_modal.ip_modal_open{
|
||||
transition: filter 0.2s ease-in-out;
|
||||
filter: brightness(0.5);
|
||||
}
|
2
src/static/css/dashboard.min.css
vendored
2
src/static/css/dashboard.min.css
vendored
@@ -1 +1 @@
|
||||
@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating{0%{-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading{0%,to{background-color:#dfdfdf}50%{background-color:#adadad}}@-moz-keyframes loading{0%,to{background-color:#dfdfdf}50%{background-color:#adadad}}body{font-size:.875rem}.feather{width:16px;height:16px;vertical-align:text-bottom}.sidebar{position:fixed;top:0;bottom:0;left:0;z-index:100;padding:48px 0 0;box-shadow:inset -1px 0 0 rgba(0,0,0,.1)}.sidebar-sticky{position:relative;top:0;height:calc(100vh - 48px);padding-top:.5rem;overflow-x:hidden;overflow-y:auto}@supports ((position:-webkit-sticky) or (position:sticky)){.sidebar-sticky{position:-webkit-sticky;position:sticky}}.sidebar .nav-link{font-weight:500;color:#333;transition:.2s cubic-bezier(.82,-.07,0,1.01)}.nav-link:hover{padding-left:30px}.sidebar .nav-link .feather{margin-right:4px;color:#999}.sidebar .nav-link.active{color:#007bff}.sidebar .nav-link.active .feather,.sidebar .nav-link:hover .feather{color:inherit}.sidebar-heading{font-size:.75rem;text-transform:uppercase}.navbar-brand{padding-top:.75rem;padding-bottom:.75rem;font-size:1rem;background-color:rgba(0,0,0,.25);box-shadow:inset -1px 0 0 rgba(0,0,0,.25)}.navbar .navbar-toggler{top:.25rem;right:1rem}.navbar .form-control{padding:.75rem 1rem;border-width:0;border-radius:0}.form-control-dark{color:#fff;background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.1)}.form-control-dark:focus{border-color:transparent;box-shadow:0 0 0 3px rgba(255,255,255,.25)}.dot{width:10px;height:10px;border-radius:50px;display:inline-block;margin-left:10px}.dot-running{background-color:#28a745!important;box-shadow:0 0 0 .2rem #28a74545}.h6-dot-running{margin-left:.3rem}.dot-stopped{background-color:#6c757d!important}.card-running{border-color:#28a745}.info h6{line-break:anywhere;transition:.2s ease-in-out}.info .row .col-sm{display:flex;flex-direction:column}.info .row .col-sm small{display:flex}.info .row .col-sm small strong:last-child(1){margin-left:auto!important}.btn-control{border:0!important;padding:0 1rem 0 0}.btn-control:active,.btn-control:focus{background-color:transparent!important;border:0!important;box-shadow:none}.share_peer_btn_group .btn-control{padding:0 0 0 1rem}.btn-control:hover{background:#fff}.btn-delete-peer:hover{color:#dc3545}.btn-setting-peer:hover{color:#007bff}.btn-download-peer:hover{color:#17a2b8}.login-container{padding:2rem}@media (max-width:992px){.card-col{margin-bottom:1rem}}.switch{font-size:2rem}.switch:hover{text-decoration:none}.btn-group-label:hover{color:#007bff;border-color:#007bff;background:#fff}@media (max-width:768px){.peer_data_group{text-align:left}}.index-switch{text-align:right}main{margin-bottom:3rem}.peer_list{margin-bottom:7rem}@media (max-width:768px){.add_btn{bottom:1.5rem!important}.peer_list{margin-bottom:4rem!important}}.add_btn{position:fixed;bottom:3rem;right:2rem;z-index:99;border-radius:100px!important;padding:10px 20px;box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.rotating::before{-webkit-animation:rotating .75s linear infinite;-moz-animation:rotating .75s linear infinite;-ms-animation:rotating .75s linear infinite;-o-animation:rotating .75s linear infinite;animation:rotating .75s linear infinite}.peer_private_key_textbox_switch{position:absolute;right:2rem;transform:translateY(-28px);font-size:1.2rem;cursor:pointer}#peer_private_key_textbox,#private_key,#public_key{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.progress-bar{transition:.3s ease-in-out}.key{transition:.2s ease-in-out;cursor:pointer}.key:hover{color:#007bff}.card,.form-control{border-radius:10px}.peer_list .card .button-group{height:22px}.btn{border-radius:8px}.modal-content{border-radius:10px}.tooltip-inner{font-size:.8rem}#conf_status_btn,.conf_card{transition:.2s ease-in-out}.conf_card:hover{border-color:#007bff;cursor:pointer}.info_loading{animation:loading 2s infinite ease-in-out;border-radius:5px;height:19px;transition:.3s ease-in-out}#conf_status_btn.info_loading{height:38px;border-radius:5px;animation:loading 3s infinite ease-in-out}
|
||||
@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotating{0%{-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}to{-ms-transform:rotate(360deg);-moz-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading{0%,to{background-color:#dfdfdf}50%{background-color:#adadad}}@-moz-keyframes loading{0%,to{background-color:#dfdfdf}50%{background-color:#adadad}}body{font-size:.875rem}.feather{width:16px;height:16px;vertical-align:text-bottom}.sidebar{position:fixed;top:0;bottom:0;left:0;z-index:100;padding:48px 0 0;box-shadow:inset -1px 0 0 rgba(0,0,0,.1)}.sidebar-sticky{position:relative;top:0;height:calc(100vh - 48px);padding-top:.5rem;overflow-x:hidden;overflow-y:auto}@supports ((position:-webkit-sticky) or (position:sticky)){.sidebar-sticky{position:-webkit-sticky;position:sticky}}.sidebar .nav-link{font-weight:500;color:#333;transition:.2s cubic-bezier(.82,-.07,0,1.01)}.nav-link:hover{padding-left:30px}.sidebar .nav-link .feather{margin-right:4px;color:#999}.sidebar .nav-link.active{color:#007bff}.sidebar .nav-link.active .feather,.sidebar .nav-link:hover .feather{color:inherit}.sidebar-heading{font-size:.75rem;text-transform:uppercase}.navbar-brand{padding-top:.75rem;padding-bottom:.75rem;font-size:1rem;background-color:rgba(0,0,0,.25);box-shadow:inset -1px 0 0 rgba(0,0,0,.25)}.navbar .navbar-toggler{top:.25rem;right:1rem}.navbar .form-control{padding:.75rem 1rem;border-width:0;border-radius:0}.form-control-dark{color:#fff;background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.1)}.form-control-dark:focus{border-color:transparent;box-shadow:0 0 0 3px rgba(255,255,255,.25)}.dot{width:10px;height:10px;border-radius:50px;display:inline-block;margin-left:10px}.dot-running{background-color:#28a745!important;box-shadow:0 0 0 .2rem #28a74545}.h6-dot-running{margin-left:.3rem}.dot-stopped{background-color:#6c757d!important}.card-running{border-color:#28a745}.info h6{line-break:anywhere;transition:.2s ease-in-out}.info .row .col-sm{display:flex;flex-direction:column}.info .row .col-sm small{display:flex}.info .row .col-sm small strong:last-child(1){margin-left:auto!important}.btn-control{border:0!important;padding:0 1rem 0 0}.btn-control:active,.btn-control:focus{background-color:transparent!important;border:0!important;box-shadow:none}.share_peer_btn_group .btn-control{padding:0 0 0 1rem}.btn-control:hover{background:#fff}.btn-delete-peer:hover{color:#dc3545}.btn-setting-peer:hover{color:#007bff}.btn-download-peer:hover{color:#17a2b8}.login-container{padding:2rem}@media (max-width:992px){.card-col{margin-bottom:1rem}}.switch{font-size:2rem}.switch:hover{text-decoration:none}.btn-group-label:hover{color:#007bff;border-color:#007bff;background:#fff}@media (max-width:768px){.peer_data_group{text-align:left}}.index-switch{text-align:right}main{margin-bottom:3rem}.peer_list{margin-bottom:7rem}@media (max-width:768px){.add_btn{bottom:1.5rem!important}.peer_list{margin-bottom:4rem!important}}.add_btn{position:fixed;bottom:3rem;right:2rem;z-index:99;border-radius:100px!important;padding:10px 20px;box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23)}.rotating::before{-webkit-animation:rotating .75s linear infinite;-moz-animation:rotating .75s linear infinite;-ms-animation:rotating .75s linear infinite;-o-animation:rotating .75s linear infinite;animation:rotating .75s linear infinite}.peer_private_key_textbox_switch{position:absolute;right:2rem;transform:translateY(-28px);font-size:1.2rem;cursor:pointer}#peer_private_key_textbox,#private_key,#public_key{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.progress-bar{transition:.3s ease-in-out}.key{transition:.2s ease-in-out;cursor:pointer}.key:hover{color:#007bff}.card,.form-control{border-radius:10px}.peer_list .card .button-group{height:22px}.btn{border-radius:8px}.modal-content{border-radius:10px}.tooltip-inner{font-size:.8rem}#conf_status_btn,.conf_card{transition:.2s ease-in-out}.conf_card:hover{border-color:#007bff;cursor:pointer}.info_loading{animation:loading 2s infinite ease-in-out;border-radius:5px;height:19px;transition:.3s ease-in-out}#conf_status_btn.info_loading{height:38px;border-radius:5px;animation:loading 3s infinite ease-in-out}#qrcode_img img{width:100%}#selected_ip_list .badge{margin:.1rem}#add_modal.ip_modal_open{transition:filter .2s ease-in-out;filter:brightness(.5)}
|
@@ -1,12 +1,27 @@
|
||||
$("[data-toggle='tooltip']").tooltip()
|
||||
let $body = $("body");
|
||||
let $progress_bar = $(".progress-bar");
|
||||
let available_ips = [];
|
||||
let $save_peer = $("#save_peer");
|
||||
|
||||
$(".add_btn").on("click", function(){
|
||||
addModal.toggle();
|
||||
});
|
||||
|
||||
/**
|
||||
* Round Transfer number into 4 digits
|
||||
* @param value
|
||||
* @param digits
|
||||
* @returns {number}
|
||||
*/
|
||||
function roundN(value, digits) {
|
||||
let tenToN = 10 ** digits;
|
||||
return (Math.round(value * tenToN)) / tenToN;
|
||||
}
|
||||
|
||||
// Progress Bar
|
||||
let $progress_bar = $(".progress-bar");
|
||||
/**
|
||||
* Start Progress Bar
|
||||
*/
|
||||
function startProgressBar(){
|
||||
$progress_bar.css("width","0%")
|
||||
.css("opacity", "100")
|
||||
@@ -19,10 +34,16 @@ function startProgressBar(){
|
||||
},300);
|
||||
}
|
||||
|
||||
/**
|
||||
* Still Loading Progress Bar
|
||||
*/
|
||||
function stillLoadingProgressBar(){
|
||||
$progress_bar.css("transition", "3s ease-in-out").css("width", "75%");
|
||||
}
|
||||
|
||||
/**
|
||||
* End Progress Bae
|
||||
*/
|
||||
function endProgressBar(){
|
||||
$progress_bar.css("transition", "0.3s ease-in-out").css("width","100%");
|
||||
setTimeout(function(){
|
||||
@@ -31,20 +52,27 @@ function endProgressBar(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Show toast
|
||||
* @param msg
|
||||
*/
|
||||
function showToast(msg) {
|
||||
$('#alertToast').toast('show');
|
||||
$('#alertToast .toast-body').html(msg);
|
||||
}
|
||||
|
||||
|
||||
// Config Toggle
|
||||
/**
|
||||
* When configuration switch got click
|
||||
*/
|
||||
$body.on("click", ".switch", function (){
|
||||
$(this).siblings($(".spinner-border")).css("display", "inline-block");
|
||||
$(this).remove();
|
||||
location.replace("/switch/"+$(this).attr('id'));
|
||||
});
|
||||
|
||||
// Generating Keys
|
||||
/**
|
||||
* Generate Private and Public key for a new peer
|
||||
*/
|
||||
function generate_key(){
|
||||
$.ajax({
|
||||
"url": "/generate_peer",
|
||||
@@ -52,11 +80,14 @@ function generate_key(){
|
||||
}).done(function(res){
|
||||
$("#private_key").val(res.private_key);
|
||||
$("#public_key").val(res.public_key);
|
||||
$("#preshare_key").val(res.preshared_key);
|
||||
$("#add_peer_alert").addClass("d-none");
|
||||
$("#re_generate_key i").removeClass("rotating");
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate public for existing peer
|
||||
*/
|
||||
function generate_public_key(){
|
||||
$.ajax({
|
||||
"url": "/generate_public_key",
|
||||
@@ -70,11 +101,13 @@ function generate_public_key(){
|
||||
$("#add_peer_alert").addClass("d-none");
|
||||
}
|
||||
$("#public_key").val(res.data);
|
||||
$("#re_generate_key i").removeClass("rotating");
|
||||
$("#re_generate_key i").removeClass("rotating");
|
||||
});
|
||||
}
|
||||
|
||||
// Add Peer
|
||||
/**
|
||||
* Generate Public key when private got change
|
||||
*/
|
||||
$("#private_key").on("change",function(){
|
||||
if ($(this).val().length > 0){
|
||||
$("#re_generate_key i").addClass("rotating");
|
||||
@@ -84,33 +117,144 @@ $("#private_key").on("change",function(){
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Trigger IP badge and item
|
||||
* @param ip
|
||||
*/
|
||||
function trigger_ip(ip){
|
||||
let $ip_ele = $(".available-ip-item[data-ip='"+ip+"']");
|
||||
if ($ip_ele.html()){
|
||||
if ($ip_ele.hasClass("active")){
|
||||
$ip_ele.removeClass("active");
|
||||
$("#selected_ip_list .badge[data-ip='"+ip+"']").remove();
|
||||
}else{
|
||||
$ip_ele.addClass("active");
|
||||
$("#selected_ip_list").append('<span class="badge badge-primary available-ip-badge" style="cursor: pointer" data-ip="'+ip+'">'+ip+'</span>')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all available IP for this configuration
|
||||
*/
|
||||
function get_available_ip(){
|
||||
$.ajax({
|
||||
"url": "/available_ips/"+$save_peer.attr("conf_id"),
|
||||
"method": "GET",
|
||||
}).done(function (res) {
|
||||
available_ips = res;
|
||||
let $list_group = $("#available_ip_modal .modal-body .list-group");
|
||||
$list_group.html("");
|
||||
$("#allowed_ips").val(available_ips[0]);
|
||||
available_ips.forEach((ip) =>
|
||||
$list_group.append('<a class="list-group-item list-group-item-action available-ip-item" style="cursor: pointer" data-ip="'+ip+'">'+ip+'</a>'));
|
||||
});
|
||||
}
|
||||
|
||||
$("#available_ip_modal").on("show.bs.modal", () => {
|
||||
$('#add_modal').addClass("ip_modal_open");
|
||||
}).on("hidden.bs.modal", function () {
|
||||
$('#add_modal').removeClass("ip_modal_open");
|
||||
let ips = [];
|
||||
let $selected_ip_list = $("#selected_ip_list");
|
||||
$selected_ip_list.children().each(function(){
|
||||
ips.push($(this).data("ip"));
|
||||
});
|
||||
ips.forEach((ele) => trigger_ip(ele));
|
||||
})
|
||||
|
||||
/**
|
||||
* When IP Badge got click
|
||||
*/
|
||||
$body.on("click", ".available-ip-badge", function(){
|
||||
$(".available-ip-item[data-ip='"+$(this).data("ip")+"']").removeClass("active");
|
||||
$(this).remove();
|
||||
})
|
||||
|
||||
/**
|
||||
* When available ip item got click
|
||||
*/
|
||||
$body.on("click", ".available-ip-item", function () {
|
||||
trigger_ip($(this).data("ip"));
|
||||
});
|
||||
|
||||
let $ipModal = new bootstrap.Modal(document.getElementById('available_ip_modal'), {
|
||||
keyboard: false
|
||||
});
|
||||
|
||||
$("#search_available_ip").on("click", function () {
|
||||
$ipModal.toggle();
|
||||
let $allowed_ips = $("#allowed_ips");
|
||||
if ($allowed_ips.val().length > 0){
|
||||
let s = $allowed_ips.val().split(",");
|
||||
for (let i = 0; i < s.length; i++){
|
||||
s[i] = s[i].trim();
|
||||
trigger_ip(s[i]);
|
||||
}
|
||||
}
|
||||
}).tooltip();
|
||||
|
||||
$("#confirm_ip").on("click", () => {
|
||||
$ipModal.toggle();
|
||||
let ips = [];
|
||||
let $selected_ip_list = $("#selected_ip_list");
|
||||
$selected_ip_list.children().each(function(){
|
||||
ips.push($(this).data("ip"));
|
||||
});
|
||||
$("#allowed_ips").val(ips.join(", "));
|
||||
ips.forEach((ele) => trigger_ip(ele));
|
||||
});
|
||||
|
||||
$("#allowed_ips").on("keyup", function(){
|
||||
let s = clean_ip($(this).val());
|
||||
s = s.split(",");
|
||||
if (available_ips.includes(s[s.length - 1])){
|
||||
$("#allowed_ips_indicator").removeClass().addClass("text-success")
|
||||
.html('<i class="bi bi-check-circle-fill"></i>');
|
||||
}else{
|
||||
$("#allowed_ips_indicator").removeClass().addClass("text-warning")
|
||||
.html('<i class="bi bi-exclamation-circle-fill"></i>');
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
$('#add_modal').on('show.bs.modal', function (event) {
|
||||
generate_key();
|
||||
get_available_ip();
|
||||
}).on('hide.bs.modal', function(){
|
||||
$("#allowed_ips_indicator").html('');
|
||||
});
|
||||
|
||||
$("#re_generate_key").on("click",function (){
|
||||
$("#public_key").attr("disabled","disabled");
|
||||
$("#re_generate_key i").addClass("rotating");
|
||||
generate_key();
|
||||
});
|
||||
|
||||
let addModal = new bootstrap.Modal(document.getElementById('add_modal'), {
|
||||
keyboard: false
|
||||
});
|
||||
|
||||
$(".add_btn").on("click", function(){
|
||||
addModal.toggle();
|
||||
});
|
||||
function clean_ip(val){
|
||||
let clean_ip = val.split(',');
|
||||
for (let i = 0; i < clean_ip.length; i++) clean_ip[i] = clean_ip[i].trim(' ');
|
||||
return clean_ip.filter(Boolean).join(",");
|
||||
}
|
||||
|
||||
$("#save_peer").on("click",function(){
|
||||
$save_peer.on("click",function(){
|
||||
let $public_key = $("#public_key");
|
||||
let $private_key = $("#private_key");
|
||||
let $allowed_ips = $("#allowed_ips");
|
||||
$allowed_ips.val(clean_ip($allowed_ips.val()));
|
||||
let $new_add_DNS = $("#new_add_DNS");
|
||||
$new_add_DNS.val(clean_ip($new_add_DNS.val()));
|
||||
let $new_add_endpoint_allowed_ip = $("#new_add_endpoint_allowed_ip");
|
||||
$new_add_endpoint_allowed_ip.val(clean_ip($new_add_endpoint_allowed_ip.val()));
|
||||
let $new_add_name = $("#new_add_name");
|
||||
let $new_add_MTU = $("#new_add_MTU");
|
||||
let $new_add_keep_alive = $("#new_add_keep_alive");
|
||||
let $enable_preshare_key = $("#enable_preshare_key");
|
||||
|
||||
let p_key = $public_key.val()
|
||||
$(this).attr("disabled","disabled");
|
||||
$(this).html("Saving...");
|
||||
if ($allowed_ips.val() !== "" && $public_key.val() !== "" && $new_add_DNS.val() !== "" && $new_add_endpoint_allowed_ip.val() !== ""){
|
||||
@@ -138,10 +282,14 @@ $("#save_peer").on("click",function(){
|
||||
if(response !== "true"){
|
||||
$("#add_peer_alert").html(response).removeClass("d-none");
|
||||
data_list.forEach((ele) => ele.removeAttr("disabled"));
|
||||
$("#save_peer").removeAttr("disabled").html("Save");
|
||||
$save_peer.removeAttr("disabled").html("Save");
|
||||
}
|
||||
else{
|
||||
load_data("");
|
||||
data_list.forEach((ele) => ele.removeAttr("disabled"));
|
||||
$("#add_peer_form").trigger("reset");
|
||||
$save_peer.removeAttr("disabled").html("Save");
|
||||
showToast("Add peer successful!");
|
||||
addModal.toggle();
|
||||
}
|
||||
}
|
||||
@@ -159,6 +307,8 @@ let qrcodeModal = new bootstrap.Modal(document.getElementById('qrcode_modal'), {
|
||||
});
|
||||
// QR Code
|
||||
$body.on("click", ".btn-qrcode-peer", function (){
|
||||
|
||||
|
||||
let src = $(this).attr('img_src');
|
||||
$.ajax({
|
||||
"url": src,
|
||||
@@ -326,7 +476,6 @@ $(".peer_private_key_textbox_switch").on("click",function (){
|
||||
$(".peer_private_key_textbox_switch i").removeClass().addClass(icon);
|
||||
});
|
||||
|
||||
|
||||
// Search Peer
|
||||
let typingTimer;
|
||||
let doneTypingInterval = 200;
|
||||
@@ -335,14 +484,15 @@ $input.on('keyup', function () {
|
||||
clearTimeout(typingTimer);
|
||||
typingTimer = setTimeout(doneTyping, doneTypingInterval);
|
||||
});
|
||||
|
||||
$input.on('keydown', function () {
|
||||
clearTimeout(typingTimer);
|
||||
});
|
||||
|
||||
function doneTyping () {
|
||||
load_data($input.val());
|
||||
}
|
||||
|
||||
|
||||
// Sorting
|
||||
$body.on("change", "#sort_by_dropdown", function (){
|
||||
$.ajax({
|
||||
@@ -360,16 +510,13 @@ $body.on("change", "#sort_by_dropdown", function (){
|
||||
$body.on("mouseenter", ".key", function(){
|
||||
let label = $(this).parent().siblings().children()[1];
|
||||
label.style.opacity = "100";
|
||||
})
|
||||
$body.on("mouseout", ".key", function(){
|
||||
}).on("mouseout", ".key", function(){
|
||||
let label = $(this).parent().siblings().children()[1];
|
||||
label.style.opacity = "0";
|
||||
setTimeout(function (){
|
||||
label.innerHTML = "CLICK TO COPY";
|
||||
},200);
|
||||
});
|
||||
|
||||
$body.on("click", ".key", function(){
|
||||
}).on("click", ".key", function(){
|
||||
var label = $(this).parent().siblings().children()[1];
|
||||
copyToClipboard($(this));
|
||||
label.innerHTML = "COPIED!";
|
||||
@@ -420,7 +567,6 @@ $body.on("click", ".refresh", function (){
|
||||
load_data($('#search_peer_textbox').val());
|
||||
});
|
||||
|
||||
|
||||
// Switch display mode
|
||||
$body.on("click", ".display_mode", function(){
|
||||
$(".display-btn-group button").removeClass("active");
|
||||
|
2
src/static/js/configuration.min.js
vendored
2
src/static/js/configuration.min.js
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user