CSP, charts layout, removed clock.js and load_css.js

This commit is contained in:
coulisse 2023-01-16 07:20:13 +01:00
parent 2cf36891fb
commit d1761dbb99
17 changed files with 289 additions and 365 deletions

View File

@ -1,5 +1,5 @@
### Change log
Date: 15/01/2023
Date: 16/01/2023
Release: v2.4.1
- changed dimensions of spots in world dx spost charts
- managed empty data in data providers for charts
@ -10,6 +10,7 @@ Release: v2.4.1
- fixed issue #28
- cut comments too long
- charts layout changed
- reduced javascripts
___
Date: 01/01/2023

View File

@ -20,7 +20,7 @@ db_insert () {
spotteritu=$(shuf -i 1-90 -n 1)
spottercq=$(shuf -i 1-40 -n 1)
#for epoc use https://www.epochconverter.com/
timestamp=$(shuf -i 1673727215-1673730825 -n 1)
timestamp=$(shuf -i 1673759569-1673763169 -n 1)
cs_letter_1=$(chr $(shuf -i 65-90 -n1))
cs_letter_2=$(chr $(shuf -i 65-90 -n1))

View File

@ -12,7 +12,7 @@
@media screen and (max-width: 768px) {
.text-responsive {
font-size: 11px;
font-size: 12px;
}
.badge-responsive {
@ -53,6 +53,7 @@
box-shadow: 0 2px 10px rgba(0, 0, 0, .5), 0 2px 3px rgba(0, 0, 0, .5);
}
.ipcs {
background-image: url("/static/images/background.webp");
background-size: cover;

View File

@ -1 +1 @@
@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.1/font/bootstrap-icons.css");@font-face{font-display:swap;font-family:bootstrap-icons}.badge-responsive{width:70px}@media screen and (max-width:768px){.text-responsive{font-size:11px}.badge-responsive{width:40px}#collapseFilters.collapsing{position:absolute!important;z-index:20}#collapseFilters.collapse.show{display:block;position:absolute;z-index:20}.navbar-collapse{max-height:none!important}}.img-flag{background-color:#fff;background-size:cover!important;border:1px solid #ddd;border-radius:2px;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-moz-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-o-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);height:19px!important;max-height:auto;max-width:auto;padding:3px;width:32px!important}.ipcs{background-image:url(/static/images/background.webp);background-repeat:no-repeat;background-size:cover}.copyleft{display:inline-block;transform:rotate(180deg)}span.search-callsign{background:url(/static/images/search-callsign.svg) no-repeat 0 0;background-size:contain;cursor:pointer;display:inline-block;height:16px;width:20px}#input-group-callsign{margin-bottom:.5rem;margin-right:1rem}#collapseFilters{background-color:#dde2e6;margin-top:10px}#spotsTable{margin-top:10px}#band{margin-top:5px}#dashboard{gap:10px;padding:10px}#telnet-thead{position:sticky;top:0}#chart-band_activity{height:400px;width:100%}.spider_chart{height:480px;width:600px}
@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.1/font/bootstrap-icons.css");@font-face{font-display:swap;font-family:bootstrap-icons}.badge-responsive{width:70px}@media screen and (max-width:768px){.text-responsive{font-size:12px}.badge-responsive{width:40px}#collapseFilters.collapsing{position:absolute!important;z-index:20}#collapseFilters.collapse.show{display:block;position:absolute;z-index:20}.navbar-collapse{max-height:none!important}}.img-flag{background-color:#fff;background-size:cover!important;border:1px solid #ddd;border-radius:2px;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-moz-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);-o-box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);box-shadow:0 2px 10px rgba(0,0,0,.5),0 2px 3px rgba(0,0,0,.5);height:19px!important;max-height:auto;max-width:auto;padding:3px;width:32px!important}.ipcs{background-image:url(/static/images/background.webp);background-repeat:no-repeat;background-size:cover}.copyleft{display:inline-block;transform:rotate(180deg)}span.search-callsign{background:url(/static/images/search-callsign.svg) no-repeat 0 0;background-size:contain;cursor:pointer;display:inline-block;height:16px;width:20px}#input-group-callsign{margin-bottom:.5rem;margin-right:1rem}#collapseFilters{background-color:#dde2e6;margin-top:10px}#spotsTable{margin-top:10px}#band{margin-top:5px}#dashboard{gap:10px;padding:10px}#telnet-thead{position:sticky;top:0}#chart-band_activity{height:400px;width:100%}.spider_chart{height:480px;width:600px}

View File

@ -1,85 +1,87 @@
<!DOCTYPE html>
<html lang="en">
<head>
<head>
<title>DX Cluster from IU1BOW: OFFLINE</title>
<!-- page generated by staticjinja -->
<meta charset="utf-8">
<meta name="description" content="Web Ham Radio DX Cluster and spot search">
<meta name="keywords" content="ham radio, dx cluster, dx spots, cluster sposts,web dx cluster,dx cluster search, DX spots">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#2196f3">
<link rel="icon" href="/static/images/icons/favicon.ico" size="any">
<link rel="icon" href="/static/images/icons/spider_ico_master.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/static/images/icons/icon-apple.png">
<link rel="manifest" href="/static/manifest.webmanifest">
<link rel="stylesheet" href="/static/css/rel/style.min.css">
<!--
<link rel="preload" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" as="style" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous" onload="this.rel='stylesheet' ">
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"></noscript>
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css" as="style" integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg==" crossorigin="anonymous" onload="this.rel='stylesheet'" >
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css"></noscript>
-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css" integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="static/js/rel/load_css.min.js"></script>
</head>
<body>
<header>
<meta charset="utf-8">
<meta name="description" content="Web Ham Radio DX Cluster and spot search">
<meta name="keywords"
content="ham radio, dx cluster, dx spots, cluster sposts,web dx cluster,dx cluster search, DX spots">
<meta name="author" content="Corrado Gerbaldo">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#2196f3">
<link rel="icon" href="/static/images/icons/favicon.ico">
<link rel="icon" href="/static/images/icons/spider_ico_master.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/static/images/icons/icon-apple.png">
<link rel="manifest" href="/static/manifest.webmanifest">
<link rel="stylesheet" href="/static/css/rel/style.min.css">
<!-- nav bar -->
<nav class="navbar px-2 navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/static/images/icons/icon-72x72.png" width="30" height="30" class="d-inline-block align-top" alt="">
</a>
<button class="navbar-toggler" type="button" aria-controls="navbarToggler01" aria-expanded="false" aria-label="Toggle navigation" data-bs-toggle="collapse" data-bs-target="#navbarToggler01" >
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarToggler01">
<ul class="navbar-nav me-auto mb-2 mb-lg-0" >
</ul>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css"
integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<!--
<div id="MyClockDisplay" onload="showTime()" class="text-white-50 d-none d-lg-block"></div>
-->
<div id="MyClockDisplay" class="text-white-50 d-none d-lg-block"></div>
<div class="text-white-50 d-none d-lg-block" >&nbsp;(UTC)&nbsp;&nbsp;</div>
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css"
as="style"
/>
-->
</div>
</div>
</nav>
</head>
<body>
<header>
<!-- nav bar -->
<nav class="navbar px-2 navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/static/images/icons/icon-72x72.png" width="30" height="30"
class="d-inline-block align-top" alt="">
</a>
<button class="navbar-toggler" type="button" aria-controls="navbarToggler01" aria-expanded="false"
aria-label="Toggle navigation" data-bs-toggle="collapse" data-bs-target="#navbarToggler01">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarToggler01">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
</ul>
<div id="MyClockDisplay" class="text-white-50 d-none d-lg-block"></div>
<div class="text-white-50 d-none d-lg-block">&nbsp;(UTC)&nbsp;&nbsp;</div>
</div>
</div>
</nav>
</header>
<div class="container-fluid mt-1 ml-0 mr-0 px-0">
<div class="ipcs bg-light p-4 rounded-lg m-2">
</header>
<div class="container-fluid mt-1 ml-0 mr-0 px-0">
<div class="ipcs bg-light p-4 rounded-lg m-2">
<h1 class="display-4 text-white">WEB DX Cluster</h1>
<p class="lead text-light">Spots list</p>
<p class="text-light">Telnet access: <a href="telnet://" class="text-white"></a></p>
<p class="text-light">For connect your cluster, write to <a href="mailto:?Subject=Connect%20my%20DxCluster%20node" target="_top" class="text-white"></a></p>
</div>
<p class="text-light">Telnet access: <a href="telnet://" class="text-white"></a></p>
<p class="text-light">For connect your cluster, write to <a
href="mailto:?Subject=Connect%20my%20DxCluster%20node" target="_top" class="text-white"></a></p>
</div>
<!-- <div class="container">
<div class="row">
<div class="col align-self-center"> -->
@ -95,53 +97,56 @@
</div> -->
</div>
</div>
<footer class="page-footer font-small blue">
<div class="footer-copyright text-center py-3">
<span class="copyleft">&copy;</span> Copyleft:
<span id="copyDate"></span>
<a href="https://github.com/coulisse/spiderweb/" target="blank" rel="noopener">IU1BOW Spiderweb</a>
<span id="version">v2.4.1</span>
</div>
<footer class="page-footer font-small blue">
<div class="footer-copyright text-center py-3">
<span class="copyleft">&copy;</span> Copyleft:
<span id="copyDate"></span>
<a href="https://github.com/coulisse/spiderweb/" target="blank" rel="noopener">IU1BOW Spiderweb</a>
<span id="version">v2.4.1</span>
</div>
</footer>
<script async src="static/js/rel/clock.min.js"></script>
<script async src="static/js/rel/copy_date.min.js"></script>
<script async src="static/js/rel/load-sw.min.js"></script>
<!--- <script nonce="sedfGFG32xs"> -->
<script nonce="">
</footer>
<script async src="static/js/rel/load-sw.min.js"></script>
<!--- <script nonce="sedfGFG32xs"> -->
<script nonce="">
</script>
<script defer src="static/js/rel/common.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>
<script async src="static/js/rel/callsign_search.min.js"></script>
<!-- cookie consent management -->
</script>
<script defer src="static/js/rel/common.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js"
integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa"
crossorigin="anonymous"></script>
<script async src="static/js/rel/callsign_search.min.js"></script>
<!-- cookie consent management -->
<!-- Modal for cookie consent-->
<div class="modal fade" id="cookie_consent_modal" tabindex="-1" aria-labelledby="cookie-consent-container" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">We use cookies</h5>
</div>
<div class="modal-body">
<p>We use only technical cookies.</p>
<p>Clicking &quot;I agree&quot;, you agree to the storing of cookies on your device. To learn more about how we use cookies, please see our cookies policy.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="cookie_consent_btn">I agree</button>
</div>
</div>
</div>
</div>
<script defer src="static/js/rel/cookie_consent.min.js"></script>
</body>
</html>
<!-- Modal for cookie consent-->
<div class="modal fade" id="cookie_consent_modal" tabindex="-1" aria-labelledby="cookie-consent-container"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">We use cookies</h5>
</div>
<div class="modal-body">
<p>We use only technical cookies.</p>
<p>Clicking &quot;I agree&quot;, you agree to the storing of cookies on your device. To learn more
about how we use cookies, please see our cookies policy.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="cookie_consent_btn">I agree</button>
</div>
</div>
</div>
</div>
<script defer src="static/js/rel/cookie_consent.min.js"></script>
</body>
</html>

View File

@ -1,12 +0,0 @@
function showTime(){
let date=new Date();
let utc = new Date(date.getTime() + date.getTimezoneOffset() * 60000);
let time = utc.toTimeString().split(' ')[0];
time = time.split(':')[0]+':'+time.split(':')[1];
document.getElementById("MyClockDisplay").innerText = time;
document.getElementById("MyClockDisplay").textContent = time;
setTimeout(showTime, 1000);
}
showTime();

View File

@ -140,6 +140,18 @@ function setText(id, newvalue) {
s.innerHTML = newvalue;
}
function showTime(){
let date=new Date();
let utc = new Date(date.getTime() + date.getTimezoneOffset() * 60000);
let time = utc.toTimeString().split(' ')[0];
time = time.split(':')[0]+':'+time.split(':')[1];
document.getElementById("MyClockDisplay").innerText = time;
document.getElementById("MyClockDisplay").textContent = time;
setTimeout(showTime, 1000);
}
document.getElementById('copyDate').innerHTML='2020-'.concat(new Date().getFullYear());
/*
function doRefresh(){

View File

@ -1 +0,0 @@
document.getElementById('copyDate').innerHTML='2020-'.concat(new Date().getFullYear());

View File

@ -1,88 +0,0 @@
/*! loadCSS. [c]2020 Filament Group, Inc. MIT License */
(function(w){
'use strict';
/* exported loadCSS */
var loadCSS = function( href, before, media, attributes ){
// Arguments explained:
// `href` [REQUIRED] is the URL for your CSS file.
// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before
// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.
// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'
// `attributes` [OPTIONAL] is the Object of attribute name/attribute value pairs to set on the stylesheet's DOM Element.
var doc = w.document;
var ss = doc.createElement( 'link' );
var ref;
if( before ){
ref = before;
}
else {
var refs = ( doc.body || doc.getElementsByTagName( 'head' )[ 0 ] ).childNodes;
ref = refs[ refs.length - 1];
}
var sheets = doc.styleSheets;
// Set any of the provided attributes to the stylesheet DOM Element.
if( attributes ){
for( var attributeName in attributes ){
if( attributes.hasOwnProperty( attributeName ) ){
ss.setAttribute( attributeName, attributes[attributeName] );
}
}
}
ss.rel = 'stylesheet';
ss.href = href;
// temporarily set media to something inapplicable to ensure it'll fetch without blocking render
ss.media = 'only x';
// wait until body is defined before injecting link. This ensures a non-blocking load in IE11.
function ready( cb ){
if( doc.body ){
return cb();
}
setTimeout(function(){
ready( cb );
});
}
// Inject link
// Note: the ternary preserves the existing behavior of "before" argument, but we could choose to change the argument to "after" in a later release and standardize on ref.nextSibling for all refs
// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
ready( function(){
ref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );
});
// A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.
var onloadcssdefined = function( cb ){
var resolvedHref = ss.href;
var i = sheets.length;
while( i-- ){
if( sheets[ i ].href === resolvedHref ){
return cb();
}
}
setTimeout(function() {
onloadcssdefined( cb );
});
};
function loadCB(){
if( ss.addEventListener ){
ss.removeEventListener( 'load', loadCB );
}
ss.media = media || 'all';
}
// once loaded, set link's media back to `all` so that the stylesheet applies once it loads
if( ss.addEventListener ){
ss.addEventListener( 'load', loadCB);
}
ss.onloadcssdefined = onloadcssdefined;
onloadcssdefined( loadCB );
return ss;
};
// commonjs
if( typeof exports !== 'undefined' ){
exports.loadCSS = loadCSS;
}
else {
w.loadCSS = loadCSS;
}
}( typeof global !== 'undefined' ? global : this ));

View File

@ -36,6 +36,7 @@ class table_builder {
*/
#buildRow(line, isnew, dt_current, callsign = '') {
const row = document.createElement('tr');
/*
row.id = line.rowid;
if (callsign.length > 0) {
@ -47,6 +48,15 @@ class table_builder {
} else if (isnew) {
row.className = 'table-info';
}
*/
if (callsign.length > 0) {
/*
do not check new lines
*/
} else if (isnew) {
row.className = 'table-info';
}
//Column: DE search on QRZ
const i_qrzde = document.createElement('i');

View File

@ -1 +0,0 @@
function showTime(){var e=new Date;let t=new Date(e.getTime()+6e4*e.getTimezoneOffset()).toTimeString().split(" ")[0];t=t.split(":")[0]+":"+t.split(":")[1],document.getElementById("MyClockDisplay").innerText=t,document.getElementById("MyClockDisplay").textContent=t,setTimeout(showTime,1e3)}showTime();

View File

@ -1 +1 @@
function setCookie(e,t,n){var r=new Date,n=(r.setTime(r.getTime()+24*n*60*60*1e3),"expires="+r.toUTCString());document.cookie=e+"="+t+";"+n+";path=/;Samesite=Strict;Secure=True"}function getCookie(e){var n=e+"=",r=decodeURIComponent(document.cookie).split(";");for(let t=0;t<r.length;t++){let e=r[t];for(;" "==e.charAt(0);)e=e.substring(1);if(0==e.indexOf(n))return e.substring(n.length,e.length)}return""}function get_last_refresh(e){var t=new Date(0),e=(t.setUTCSeconds(e.last_refresh),(e,t=2)=>(""+new Array(t).fill(0)+e).slice(-t)),n=e(t.getHours()),e=e(t.getMinutes()),r=get_months_names()[t.getMonth()];return"Data refresh: "+t.getDate()+" of "+r+" "+t.getFullYear()+" at "+n+":"+e}function get_months_names(){var t=[];for(let e=1;e<13;e++){var n=new Date;n.setMonth(e-1),t.push(n.toLocaleString("en-US",{month:"short"}))}return t}function format_u_k_m(e){let t,n=1;e<0&&(n=-1);e=Math.abs(e);return 0==e?t=e:0<e&&e<1e3?t=e*n:1e3<=e&&e<1e6?t=e/1e3*n+"K":1e6<=e&&(t=e/1e6*n+"M"),t}function selectElement(e,t){document.getElementById(e).value=t}function addEventHandler(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n)}function setText(e,t){document.getElementById(e).innerHTML=t}
function setCookie(e,t,n){var o=new Date,n=(o.setTime(o.getTime()+24*n*60*60*1e3),"expires="+o.toUTCString());document.cookie=e+"="+t+";"+n+";path=/;Samesite=Strict;Secure=True"}function getCookie(e){var n=e+"=",o=decodeURIComponent(document.cookie).split(";");for(let t=0;t<o.length;t++){let e=o[t];for(;" "==e.charAt(0);)e=e.substring(1);if(0==e.indexOf(n))return e.substring(n.length,e.length)}return""}function get_last_refresh(e){var t=new Date(0),e=(t.setUTCSeconds(e.last_refresh),(e,t=2)=>(""+new Array(t).fill(0)+e).slice(-t)),n=e(t.getHours()),e=e(t.getMinutes()),o=get_months_names()[t.getMonth()];return"Data refresh: "+t.getDate()+" of "+o+" "+t.getFullYear()+" at "+n+":"+e}function get_months_names(){var t=[];for(let e=1;e<13;e++){var n=new Date;n.setMonth(e-1),t.push(n.toLocaleString("en-US",{month:"short"}))}return t}function format_u_k_m(e){let t,n=1;e<0&&(n=-1);e=Math.abs(e);return 0==e?t=e:0<e&&e<1e3?t=e*n:1e3<=e&&e<1e6?t=e/1e3*n+"K":1e6<=e&&(t=e/1e6*n+"M"),t}function selectElement(e,t){document.getElementById(e).value=t}function addEventHandler(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n)}function setText(e,t){document.getElementById(e).innerHTML=t}function showTime(){var e=new Date;let t=new Date(e.getTime()+6e4*e.getTimezoneOffset()).toTimeString().split(" ")[0];t=t.split(":")[0]+":"+t.split(":")[1],document.getElementById("MyClockDisplay").innerText=t,document.getElementById("MyClockDisplay").textContent=t,setTimeout(showTime,1e3)}document.getElementById("copyDate").innerHTML="2020-".concat((new Date).getFullYear());

View File

@ -1 +0,0 @@
document.getElementById("copyDate").innerHTML="2020-".concat((new Date).getFullYear());

View File

@ -1 +0,0 @@
!function(c){"use strict";function e(e,t,n,o){var i,r,d=c.document,a=d.createElement("link"),f=(r=t||(i=(d.body||d.getElementsByTagName("head")[0]).childNodes)[i.length-1],d.styleSheets);if(o)for(var l in o)o.hasOwnProperty(l)&&a.setAttribute(l,o[l]);function s(e){for(var t=a.href,n=f.length;n--;)if(f[n].href===t)return e();setTimeout(function(){s(e)})}function u(){a.addEventListener&&a.removeEventListener("load",u),a.media=n||"all"}return a.rel="stylesheet",a.href=e,a.media="only x",function e(t){if(d.body)return t();setTimeout(function(){e(t)})}(function(){r.parentNode.insertBefore(a,t?r:r.nextSibling)}),a.addEventListener&&a.addEventListener("load",u),a.onloadcssdefined=s,s(u),a}"undefined"!=typeof exports?exports.loadCSS=e:c.loadCSS=e}("undefined"!=typeof global?global:this);

File diff suppressed because one or more lines are too long

View File

@ -1,154 +1,152 @@
<!DOCTYPE html>
<html lang="en">
<head>
{% block title %}
{% endblock title %}
{% block head %}
<meta charset="utf-8">
<meta name="description" content="Web Ham Radio DX Cluster and spot search">
<meta name="keywords" content="ham radio, dx cluster, dx spots, cluster sposts,web dx cluster,dx cluster search, DX spots">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#2196f3">
<link rel="icon" href="/static/images/icons/favicon.ico" size="any">
<link rel="icon" href="/static/images/icons/spider_ico_master.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/static/images/icons/icon-apple.png">
<link rel="manifest" href="/static/manifest.webmanifest">
<link rel="stylesheet" href="/static/css/rel/style.min.css">
<!--
<link rel="preload" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" as="style" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous" onload="this.rel='stylesheet' ">
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"></noscript>
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css" as="style" integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg==" crossorigin="anonymous" onload="this.rel='stylesheet'" >
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css"></noscript>
-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css" integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<head>
{% block title %}
{% endblock title %}
{% block head %}
<meta charset="utf-8">
<meta name="description" content="Web Ham Radio DX Cluster and spot search">
<meta name="keywords"
content="ham radio, dx cluster, dx spots, cluster sposts,web dx cluster,dx cluster search, DX spots">
<meta name="author" content="Corrado Gerbaldo">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#2196f3">
<link rel="icon" href="/static/images/icons/favicon.ico">
<link rel="icon" href="/static/images/icons/spider_ico_master.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/static/images/icons/icon-apple.png">
<link rel="manifest" href="/static/manifest.webmanifest">
<link rel="stylesheet" href="/static/css/rel/style.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
<script src="static/js/rel/load_css.min.js"></script>
{% endblock head %}
</head>
<body>
<header>
{% block menu %}
<!-- nav bar -->
<nav class="navbar px-2 navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/static/images/icons/icon-72x72.png" width="30" height="30" class="d-inline-block align-top" alt="">
{{ mycallsign }}
</a>
<button class="navbar-toggler" type="button" aria-controls="navbarToggler01" aria-expanded="false" aria-label="Toggle navigation" data-bs-toggle="collapse" data-bs-target="#navbarToggler01" >
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarToggler01">
<ul class="navbar-nav me-auto mb-2 mb-lg-0" >
{% for dict_item in menu_list %}
<li class="nav-item">
<a class="nav-link {% if request.path == dict_item["link"] %} active {% endif %}" href="{{dict_item["link"]}}"
{% if dict_item["external"] %}
target="blank" rel="noopener"
{% endif %}
>{{dict_item["label"]}}<span class="sr-only"></span></a>
</li>
{% endfor %}
</ul>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css"
integrity="sha512-uvXdJud8WaOlQFjlz9B15Yy2Au/bMAvz79F7Xa6OakCl2jvQPdHD0hb3dEqZRdSwG4/sknePXlE7GiarwA/9Wg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<!--
<div id="MyClockDisplay" onload="showTime()" class="text-white-50 d-none d-lg-block"></div>
-->
<div id="MyClockDisplay" class="text-white-50 d-none d-lg-block"></div>
<div class="text-white-50 d-none d-lg-block" >&nbsp;(UTC)&nbsp;&nbsp;</div>
{% block callsign %}
<!--
<form method="POST" class="d-flex" id="form-callsign" enctype="application/x-www-form-urlencoded" >
-->
<form method="GET" class="d-flex" id="form-callsign" enctype="multipart/form-data">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
<div class="input-group" id='input-group-callsign'>
<input type="text" class="form-control" placeholder="callsign" aria-label="callsign" aria-describedby="button-addon2" id="callsignInput" >
<div class="input-group-append">
<!--
<button class="btn btn-secondary" type="submit" onclick="myCallsignSearch()" formaction='javascript:myCallsignSearch();'>
-->
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/6.6.6/css/flag-icons.min.css"
as="style"
/>
-->
<button id = "btn-callsign-search" class="btn btn-secondary" type="submit" >
<span class="bi-search" role="button" aria-label="search-callsign"></span>
</button>
</div>
{% endblock head %}
</head>
<body>
<header>
{% block menu %}
<!-- nav bar -->
<nav class="navbar px-2 navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/static/images/icons/icon-72x72.png" width="30" height="30"
class="d-inline-block align-top" alt="">
{{ mycallsign }}
</a>
<button class="navbar-toggler" type="button" aria-controls="navbarToggler01" aria-expanded="false"
aria-label="Toggle navigation" data-bs-toggle="collapse" data-bs-target="#navbarToggler01">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarToggler01">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
{% for dict_item in menu_list %}
<li class="nav-item">
<a class="nav-link {% if request.path == dict_item["link"] %} active {% endif %}" href="{{dict_item["link"]}}"
{% if dict_item["external"] %}
target="blank" rel="noopener"
{% endif %}
>{{dict_item["label"]}}<span class="sr-only"></span></a>
</li>
{% endfor %}
</ul>
<div id="MyClockDisplay" class="text-white-50 d-none d-lg-block"></div>
<div class="text-white-50 d-none d-lg-block">&nbsp;(UTC)&nbsp;&nbsp;</div>
{% block callsign %}
<form method="POST" class="d-flex" id="form-callsign" enctype="multipart/form-data">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<div class="input-group" id='input-group-callsign'>
<input type="text" class="form-control" placeholder="callsign" aria-label="callsign"
aria-describedby="button-addon2" id="callsignInput">
<div class="input-group-append">
<button id="btn-callsign-search" class="btn btn-secondary" type="submit">
<span class="bi-search" role="button" aria-label="search-callsign"></span>
</button>
</div>
</div>
</form>
{% endblock callsign %}
</div>
</form>
{% endblock callsign %}
</div>
</div>
</nav>
{% endblock menu %}
</header>
<div class="container-fluid mt-1 ml-0 mr-0 px-0">
<div class="ipcs bg-light p-4 rounded-lg m-2">
{% block titles %}
{% endblock %}
<p class="text-light">Telnet access: <a href="telnet://{{ telnet }}" class="text-white">{{ telnet }}</a></p>
<p class="text-light">For connect your cluster, write to <a href="mailto:{{ mail }}?Subject=Connect%20my%20DxCluster%20node" target="_top" class="text-white">{{ mail }}</a></p>
</div>
{% block filters %}
{% endblock filters %}
{% block contents %}
{% endblock contents %}
</div>
</nav>
{% endblock menu %}
</header>
<div class="container-fluid mt-1 ml-0 mr-0 px-0">
<div class="ipcs bg-light p-4 rounded-lg m-2">
{% block titles %}
{% endblock %}
<p class="text-light">Telnet access: <a href="telnet://{{ telnet }}" class="text-white">{{ telnet }}</a></p>
<p class="text-light">For connect your cluster, write to <a
href="mailto:{{ mail }}?Subject=Connect%20my%20DxCluster%20node" target="_top" class="text-white">{{
mail }}</a></p>
</div>
<footer class="page-footer font-small blue">
<div class="footer-copyright text-center py-3">
<span class="copyleft">&copy;</span> Copyleft:
<span id="copyDate"></span>
<a href="https://github.com/coulisse/spiderweb/" target="blank" rel="noopener">IU1BOW Spiderweb</a>
<span id="version">v2.4.1</span>
</div>
</footer>
<script async src="static/js/rel/clock.min.js"></script>
<script async src="static/js/rel/copy_date.min.js"></script>
<script async src="static/js/rel/load-sw.min.js"></script>
<!--- <script nonce="sedfGFG32xs"> -->
<script nonce="{{ inline_script_nonce }}">
{% block app_data %}
var my_callsign='{{callsign}}';
{% endblock app_data %}
</script>
<script defer src="static/js/rel/common.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>
{% block app_scripts %}
<script async src="static/js/rel/callsign_search.min.js"></script>
{% endblock app_scripts %}
{% block inline_scripts %}
{% endblock inline_scripts %}
<!-- cookie consent management -->
{% if cookies_check() %}
{# then user has already consented so no requirement for consent banner #}
{% else %}
{# show a cookie consent banner #}
{% block filters %}
{% endblock filters %}
{% block contents %}
{% endblock contents %}
</div>
<footer class="page-footer font-small blue">
<div class="footer-copyright text-center py-3">
<span class="copyleft">&copy;</span> Copyleft:
<span id="copyDate"></span>
<a href="https://github.com/coulisse/spiderweb/" target="blank" rel="noopener">IU1BOW Spiderweb</a>
<span id="version">v2.4.1</span>
</div>
</footer>
<script async src="static/js/rel/load-sw.min.js"></script>
<!--- <script nonce="sedfGFG32xs"> -->
<script nonce="{{ inline_script_nonce }}">
{% block app_data %}
var my_callsign = '{{mycallsign}}';
{% endblock app_data %}
</script>
<script defer src="static/js/rel/common.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js"
integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa"
crossorigin="anonymous"></script>
{% block app_scripts %}
<script async src="static/js/rel/callsign_search.min.js"></script>
{% endblock app_scripts %}
{% block inline_scripts %}
{% endblock inline_scripts %}
<!-- cookie consent management -->
{% if cookies_check() %}
{# then user has already consented so no requirement for consent banner #}
{% else %}
{# show a cookie consent banner #}
<!-- Modal for cookie consent-->
<div class="modal fade" id="cookie_consent_modal" tabindex="-1" aria-labelledby="cookie-consent-container" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">We use cookies</h5>
</div>
<div class="modal-body">
<p>We use only technical cookies.</p>
<p>Clicking &quot;I agree&quot;, you agree to the storing of cookies on your device. To learn more about how we use cookies, please see our cookies policy.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="cookie_consent_btn">I agree</button>
</div>
</div>
</div>
</div>
<script defer src="static/js/rel/cookie_consent.min.js"></script>
{% endif %}
</body>
</html>
<!-- Modal for cookie consent-->
<div class="modal fade" id="cookie_consent_modal" tabindex="-1" aria-labelledby="cookie-consent-container"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">We use cookies</h5>
</div>
<div class="modal-body">
<p>We use only technical cookies.</p>
<p>Clicking &quot;I agree&quot;, you agree to the storing of cookies on your device. To learn more
about how we use cookies, please see our cookies policy.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="cookie_consent_btn">I agree</button>
</div>
</div>
</div>
</div>
<script defer src="static/js/rel/cookie_consent.min.js"></script>
{% endif %}
</body>
</html>

View File

@ -492,6 +492,7 @@ def add_security_headers(resp):
return resp
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-sedfGFG32xs';\
#script-src 'self' cdnjs.cloudflare.com cdn.jsdelivr.net 'nonce-"+inline_script_nonce+"';\
if __name__ == "__main__":
app.run(host="0.0.0.0")