From fe4826b72926fac75bbd8176524f50f31a48011d Mon Sep 17 00:00:00 2001 From: Ian Renton Date: Sat, 15 Aug 2026 12:02:34 +0100 Subject: [PATCH] Bell sound on wanted calls. Closes #117 --- README.md | 22 ++++++++++++---------- static/audio/bell.mp3 | Bin 0 -> 23520 bytes static/css/style.css | 14 +++++++++++++- static/js/spots.js | 6 +++++- static/service-worker.js | 4 ++++ templates/add_spot.html | 2 +- templates/alerts.html | 2 +- templates/bands.html | 4 ++-- templates/base.html | 10 +++++----- templates/cards/wanted_calls.html | 3 +-- templates/conditions.html | 2 +- templates/map.html | 4 ++-- templates/spots.html | 4 ++-- templates/status.html | 2 +- 14 files changed, 50 insertions(+), 29 deletions(-) create mode 100644 static/audio/bell.mp3 diff --git a/README.md b/README.md index 5310644..1db3c6c 100644 --- a/README.md +++ b/README.md @@ -34,16 +34,16 @@ see [https://spothole.app/apidocs](https://spothole.app/apidocs) for the API det This is a Progressive Web App, so you can also "install" it to your Android or iOS device by accessing it in Chrome or Safari respectively, and following the menu-driven process for installing PWAs. -You are more than welcome to use the data and the API that Spothole provides to power your own software, to run your -own Spothole server, or to modify it in any way. More details can be found in the following sections: +You are more than welcome to use the data and the API that Spothole provides to power your own software, to run your own +Spothole server, or to modify it in any way. More details can be found in the following sections: * [Embedding Spothole in another website](docs/embedding.md) * [Writing your own client](docs/clients.md) * [Running your own copy](docs/running.md) - * [nginx reverse proxy configuration](docs/nginx.md) - * [systemd service file](docs/systemd.md) - * [Running in Docker](docs/docker.md) - * [Use of multiple cluster logins](docs/multicluster.md) + * [nginx reverse proxy configuration](docs/nginx.md) + * [systemd service file](docs/systemd.md) + * [Running in Docker](docs/docker.md) + * [Use of multiple cluster logins](docs/multicluster.md) * [Modifying the source code](docs/modifying.md) ## Thanks @@ -54,8 +54,8 @@ The project contains GeoJSON files for CQ and ITU zones, in the `/datafiles/` di my knowledge, created by HA8TKS for his CQ and ITU zone layers for Leaflet. `/datafiles` also contains a `MUNICIPIOS.csv` file, from the "Nomenclátor Geográfico de Municipios y Entidades de Población" data set sourced from [el Centro Nacional de Información Geográfica](https://centrodedescargas.cnig.es/CentroDescargas/home). -`didbase-stations.csv` and the TOTA file were created by me based on publicly available data from GIRO and from -maps of conference centres. +`didbase-stations.csv` and the TOTA file were created by me based on publicly available data from GIRO and from maps of +conference centres. The project contains a set of flag icons generated using the "Noto Color Emoji" font on a Debian system, in the `/static/img/flags/` directory. @@ -65,12 +65,14 @@ This project would not have been possible without these libraries, so many thank ### Third Party Libraries -A number of third-party libraries are self-hosted in the `/static/vendor/` directory. These files are subject to -their own licences and are not covered by the overall licence declared in the `LICENSE` file. +A number of third-party libraries are self-hosted in the `/static/vendor/` directory. These files are subject to their +own licences and are not covered by the overall licence declared in the `LICENSE` file. A number of third-party libraries are self-hosted in the `/webassets/vendor/` directory. These files are subject to their own licences and are not covered by the overall licence declared in the `LICENSE` file. +Sound effects are CC0-licenced and sourced from [Pixabay](https://pixabay.com). + Particular thanks go to country-files.com for providing country lookup data for amateur radio, to K0SWE for [this JSON-formatted DXCC data](https://github.com/k0swe/dxcc-json/), and to the developers of `pyhamtools` for making it easy to use country-files.com data as well as QRZ.com and Clublog lookup. diff --git a/static/audio/bell.mp3 b/static/audio/bell.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e2b974fdf572f870598771d683501448a08fee04 GIT binary patch literal 23520 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 literal 0 HcmV?d00001 diff --git a/static/css/style.css b/static/css/style.css index 97fbe09..c0d262d 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -206,6 +206,15 @@ div.band-spot-wanted { animation: wantedanim 1.5s ease-in-out alternate infinite; } +@keyframes wantedanim { + 0% { + background-color: #cf9e3d; + } + 100% { + background-color: #e1b655; + } +} + .leaflet-marker-icon.marker-icon-wanted::after { content: ""; width: 20px; @@ -217,14 +226,17 @@ div.band-spot-wanted { position: absolute; z-index: -1; border-radius: 1000%; + animation: wantedanimshadow 1.5s ease-in-out alternate infinite; } -@keyframes wantedanim { +@keyframes wantedanimshadow { 0% { background-color: #cf9e3d; + box-shadow: 0px 0px 10px 15px #cf9e3d; } 100% { background-color: #e1b655; + box-shadow: 0px 0px 10px 15px #e1b655; } } diff --git a/static/js/spots.js b/static/js/spots.js index 2fe0f59..902a94e 100644 --- a/static/js/spots.js +++ b/static/js/spots.js @@ -83,7 +83,11 @@ function startSSEConnection() { // Ping if we need to if ($("#pingOnNewSpots")[0].checked) { - new Audio("/audio/ping.mp3").play(); + if (callWanted(newSpot["dx_call"])) { + new Audio("/static/audio/bell.mp3").play(); + } else { + new Audio("/static/audio/ping.mp3").play(); + } } }, onerror(err) { diff --git a/static/service-worker.js b/static/service-worker.js index 8340792..b3e833a 100644 --- a/static/service-worker.js +++ b/static/service-worker.js @@ -1,6 +1,7 @@ const CACHE_NAME = 'Spothole'; const CACHE_URLS = [ 'static/apidocs/openapi.yml', + 'static/audio/bell.mp3', 'static/audio/ping.mp3', 'static/css/style.css', 'static/js/add-spot.js', @@ -50,6 +51,9 @@ const CACHE_URLS = [ 'static/vendor/js/leaflet-1.9.4.min.js', 'static/vendor/js/leaflet-geodesic-2.7.2.umd.min.js', 'static/vendor/js/leaflet-maidenhead.js', + 'static/vendor/js/fetch-event-source-2.0.1/fetch.js', + 'static/vendor/js/fetch-event-source-2.0.1/index.js', + 'static/vendor/js/fetch-event-source-2.0.1/parse.js', 'static/vendor/webfonts/fa-solid-900.ttf', 'static/vendor/webfonts/fa-solid-900.woff2' ]; diff --git a/templates/add_spot.html b/templates/add_spot.html index 98c0c5f..b30f288 100644 --- a/templates/add_spot.html +++ b/templates/add_spot.html @@ -76,7 +76,7 @@ - + diff --git a/templates/alerts.html b/templates/alerts.html index e51e07c..a15ebea 100644 --- a/templates/alerts.html +++ b/templates/alerts.html @@ -84,7 +84,7 @@ - + diff --git a/templates/bands.html b/templates/bands.html index cbaeb29..92dcdb9 100644 --- a/templates/bands.html +++ b/templates/bands.html @@ -76,8 +76,8 @@ - - + + diff --git a/templates/base.html b/templates/base.html index 7b221db..9d02f97 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,6 +1,6 @@ {% extends "skeleton.html" %} {% block head_extra %} - + @@ -15,10 +15,10 @@ window.fetchEventSource = fetchEventSource; - - - - + + + + {% end %} {% block body %}
diff --git a/templates/cards/wanted_calls.html b/templates/cards/wanted_calls.html index 6998ead..9474edd 100644 --- a/templates/cards/wanted_calls.html +++ b/templates/cards/wanted_calls.html @@ -6,8 +6,7 @@ oninput="saveSettings();" style="width: 14em; display: inline-block;">
Enter a space- and/or comma-separated list of callsigns or partial callsigns. Any DX callsigns - that - match will be highlighted. + that match will have a gold highlight.
- + diff --git a/templates/map.html b/templates/map.html index 4566d93..55822cd 100644 --- a/templates/map.html +++ b/templates/map.html @@ -109,8 +109,8 @@ - - + + diff --git a/templates/spots.html b/templates/spots.html index 9f6e567..b77fbcb 100644 --- a/templates/spots.html +++ b/templates/spots.html @@ -113,8 +113,8 @@
- - + + diff --git a/templates/status.html b/templates/status.html index 06c74e3..f2ce437 100644 --- a/templates/status.html +++ b/templates/status.html @@ -86,7 +86,7 @@ - +