diff --git a/package.json b/package.json
index 03732ae..cf25cea 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "fm-dx-webserver",
- "version": "1.2.6",
+ "version": "1.2.7",
"description": "FM DX Webserver",
"main": "index.js",
"scripts": {
diff --git a/server/datahandler.js b/server/datahandler.js
index 11c6a69..b06cec3 100644
--- a/server/datahandler.js
+++ b/server/datahandler.js
@@ -292,6 +292,10 @@ function handleData(wss, receivedData, rdsWss) {
initialData.freq = (parsedValue / 1000).toFixed(3);
dataToSend.freq = (parsedValue / 1000).toFixed(3);
dataToSend.pi = '?';
+
+ rdsWss.clients.forEach((client) => {
+ client.send("G:\r\nRESET-------\r\n\r\n");
+ });
}
break;
case receivedLine.startsWith('Z'): // Antenna
@@ -352,31 +356,31 @@ function handleData(wss, receivedData, rdsWss) {
modifiedData += errorsNew.toString(16).padStart(2, '0');
}
- rdsWss.clients.forEach((client) => {
- let dataString = modifiedData.toString();
- let lastTwoChars = dataString.slice(-2);
- let lastByteValue = parseInt(lastTwoChars, 16);
+ rdsWss.clients.forEach((client) => {
+ let dataString = modifiedData.toString();
+ let lastTwoChars = dataString.slice(-2);
+ let lastByteValue = parseInt(lastTwoChars, 16);
- let truncatedString = dataString.slice(0, -2);
+ let truncatedString = dataString.slice(0, -2);
- if ((lastByteValue & 0x03) !== 0) {
- truncatedString = truncatedString.slice(0, 4) + '----' + truncatedString.slice(8);
- }
+ if ((lastByteValue & 0x03) !== 0) {
+ truncatedString = truncatedString.slice(0, 4) + '----' + truncatedString.slice(8);
+ }
- if ((lastByteValue & 0x30) !== 0) {
- truncatedString = truncatedString.slice(0, 8) + '----' + truncatedString.slice(12);
- }
+ if ((lastByteValue & 0x30) !== 0) {
+ truncatedString = truncatedString.slice(0, 8) + '----' + truncatedString.slice(12);
+ }
- if ((lastByteValue & 0x0C) !== 0) {
- truncatedString = truncatedString.slice(0, 12) + '----';
- }
+ if ((lastByteValue & 0x0C) !== 0) {
+ truncatedString = truncatedString.slice(0, 12) + '----';
+ }
- let newDataString = "G:\r\n" + truncatedString + "\r\n\r\n";
+ let newDataString = "G:\r\n" + truncatedString + "\r\n\r\n";
- let finalBuffer = Buffer.from(newDataString, 'utf-8');
+ let finalBuffer = Buffer.from(newDataString, 'utf-8');
- client.send(finalBuffer);
- });
+ client.send(finalBuffer);
+ });
rdsparser.parse_string(rds, modifiedData);
legacyRdsPiBuffer = null;
diff --git a/server/tx_search.js b/server/tx_search.js
index ed8651e..3a20dcc 100644
--- a/server/tx_search.js
+++ b/server/tx_search.js
@@ -30,7 +30,7 @@ function fetchTx(freq, piCode, rdsPs) {
return processData(cachedData[freq], piCode, rdsPs);
}
- const url = "https://maps.fmdx.pl/api?freq=" + freq;
+ const url = "https://maps.fmdx.org/api?freq=" + freq;
return fetch(url)
.then(response => response.json())
diff --git a/web/css/buttons.css b/web/css/buttons.css
index 92ffda6..cf9abfe 100644
--- a/web/css/buttons.css
+++ b/web/css/buttons.css
@@ -79,6 +79,7 @@ input[type="text"], textarea, input[type="password"] {
color: var(--color-text);
background-color: var(--color-1);
font-family: 'Titillium Web', sans-serif;
+ caret-color: var(--color-4);
}
#tune-buttons input[type="text"] {
@@ -92,6 +93,7 @@ input[type="text"], textarea, input[type="password"] {
color: var(--color-text);
background-color: var(--color-1-transparent);
font-family: 'Titillium Web', sans-serif;
+ caret-color: var(--color-4);
}
#tune-buttons input[type="text"]:not(.no-bg):not(.no-filter) {
diff --git a/web/favicon.png b/web/favicon.png
index 966184a..5d3c093 100644
Binary files a/web/favicon.png and b/web/favicon.png differ
diff --git a/web/index.ejs b/web/index.ejs
index d8af171..142d7b9 100644
--- a/web/index.ejs
+++ b/web/index.ejs
@@ -12,7 +12,7 @@
-
+
diff --git a/web/js/chat.js b/web/js/chat.js
index 50405cf..9236500 100644
--- a/web/js/chat.js
+++ b/web/js/chat.js
@@ -1,90 +1,100 @@
$(document).ready(function() {
- const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
- const chatSocket = new WebSocket(`${protocol}//${window.location.host}${window.location.pathname}chat`);
- let chatMessageCount = 0;
- const chatMessages = $('#chat-chatbox');
- const chatMessagesCount = $('.chat-messages-count');
- const chatButton = $('.chatbutton');
- const chatSendInput = $('#chat-send-message');
- const chatIdentityNickname = $('#chat-identity-nickname');
- const chatNicknameInput = $('#chat-nickname');
- const chatNicknameSave = $('#chat-nickname-save');
+ const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
+ const chatSocket = new WebSocket(`${protocol}//${window.location.host}${window.location.pathname}chat`);
+ let chatMessageCount = 0;
+ const chatMessages = $('#chat-chatbox');
+ const chatMessagesCount = $('.chat-messages-count');
+ const chatButton = $('.chatbutton');
+ const chatSendInput = $('#chat-send-message');
+ const chatIdentityNickname = $('#chat-identity-nickname');
+ const chatNicknameInput = $('#chat-nickname');
+ const chatNicknameSave = $('#chat-nickname-save');
- chatSocket.onmessage = function(event) {
- const messageData = JSON.parse(event.data);
- const isAdmin = messageData.admin ? '[ADMIN]' : '';
-
- if (messageData.type === 'clientIp') {
- chatIdentityNickname.html(isAdmin + " " + (savedNickname?.length > 0 ? savedNickname : 'Anonymous User'));
- chatIdentityNickname.attr('title', messageData.ip);
- } else {
- const chatMessage = `
- [${messageData.time}]
- ${isAdmin} ${messageData.nickname}:
- ${$('').text(messageData.message).html()}
- `;
- chatMessages.append(chatMessage);
-
- if (chatMessages.is(':visible')) {
- setTimeout(function() {
- chatMessages.scrollTop(chatMessages[0].scrollHeight);
- }, 100);
- } else {
- if (!messageData.history) {
- chatMessageCount++;
- chatMessagesCount.text(chatMessageCount);
- chatMessagesCount.attr("aria-label", "Chat (" + chatMessageCount + " unread)");
- chatButton.removeClass('bg-color-2').addClass('bg-color-4');
- }
- }
- }
- };
-
- $('.chat-send-message-btn').click(sendMessage);
- chatNicknameSave.click(function() {
- const currentNickname = chatNicknameInput.val();
- localStorage.setItem('nickname', currentNickname);
- chatIdentityNickname.text(currentNickname.length > 0 ? currentNickname : 'Anonymous User');
- chatNicknameInput.blur();
- });
-
- chatButton.click(function() {
- chatMessageCount = 0;
- chatMessagesCount.text(chatMessageCount);
- chatButton.removeClass('bg-color-4').addClass('bg-color-2');
- chatSendInput.focus();
-
- setTimeout(function() {
- chatMessages.scrollTop(chatMessages[0].scrollHeight);
- }, 100);
- });
-
- chatNicknameInput.keypress(function(event) {
- if (event.which === 13) {
- chatNicknameSave.trigger('click');
- }
- });
-
- chatSendInput.keypress(function(event) {
- if (event.which === 13) {
- sendMessage();
- }
- });
-
- // Load nickname from localStorage on page load
- const savedNickname = localStorage.getItem('nickname');
- if (savedNickname) {
- chatNicknameInput.val(savedNickname);
- }
-
- function sendMessage() {
- const nickname = savedNickname || 'Anonymous user';
- const message = chatSendInput.val().trim();
-
- if (message) {
- const messageData = { nickname, message };
- chatSocket.send(JSON.stringify(messageData));
- chatSendInput.val('');
+ // Function to generate a random string
+ function generateRandomString(length) {
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ let result = '';
+ for (let i = 0; i < length; i++) {
+ result += characters.charAt(Math.floor(Math.random() * characters.length));
+ }
+ return result;
}
- }
-});
\ No newline at end of file
+
+ // Load nickname from localStorage on page load
+ let savedNickname = localStorage.getItem('nickname') || `Anonymous User ${generateRandomString(5)}`;
+ chatNicknameInput.val(savedNickname);
+ chatIdentityNickname.text(savedNickname);
+
+ chatSocket.onmessage = function(event) {
+ const messageData = JSON.parse(event.data);
+ const isAdmin = messageData.admin ? '[ADMIN]' : '';
+
+ if (messageData.type === 'clientIp') {
+ chatIdentityNickname.html(isAdmin + " " + savedNickname);
+ chatIdentityNickname.attr('title', messageData.ip);
+ } else {
+ const chatMessage = `
+ [${messageData.time}]
+ ${isAdmin} ${messageData.nickname}:
+ ${$('').text(messageData.message).html()}
+ `;
+ chatMessages.append(chatMessage);
+
+ if (chatMessages.is(':visible')) {
+ setTimeout(function() {
+ chatMessages.scrollTop(chatMessages[0].scrollHeight);
+ }, 100);
+ } else {
+ if (!messageData.history) {
+ chatMessageCount++;
+ chatMessagesCount.text(chatMessageCount);
+ chatMessagesCount.attr("aria-label", "Chat (" + chatMessageCount + " unread)");
+ chatButton.removeClass('bg-color-2').addClass('bg-color-4');
+ }
+ }
+ }
+ };
+
+ $('.chat-send-message-btn').click(sendMessage);
+ chatNicknameSave.click(function() {
+ const currentNickname = chatNicknameInput.val().trim() || `Anonymous User ${generateRandomString(5)}`;
+ localStorage.setItem('nickname', currentNickname);
+ savedNickname = currentNickname; // Update the savedNickname variable
+ chatIdentityNickname.text(savedNickname);
+ chatNicknameInput.blur();
+ });
+
+ chatButton.click(function() {
+ chatMessageCount = 0;
+ chatMessagesCount.text(chatMessageCount);
+ chatButton.removeClass('bg-color-4').addClass('bg-color-2');
+ chatSendInput.focus();
+
+ setTimeout(function() {
+ chatMessages.scrollTop(chatMessages[0].scrollHeight);
+ }, 100);
+ });
+
+ chatNicknameInput.keypress(function(event) {
+ if (event.which === 13) {
+ chatNicknameSave.trigger('click');
+ }
+ });
+
+ chatSendInput.keypress(function(event) {
+ if (event.which === 13) {
+ sendMessage();
+ }
+ });
+
+ function sendMessage() {
+ const nickname = savedNickname || `Anonymous User ${generateRandomString(5)}`;
+ const message = chatSendInput.val().trim();
+
+ if (message) {
+ const messageData = { nickname, message };
+ chatSocket.send(JSON.stringify(messageData));
+ chatSendInput.val('');
+ }
+ }
+});
diff --git a/web/js/init.js b/web/js/init.js
index 89c2615..acf9648 100644
--- a/web/js/init.js
+++ b/web/js/init.js
@@ -1,11 +1,12 @@
-var currentDate = new Date('Aug 1, 2024 20:00:00');
+var currentDate = new Date('Aug 28, 2024 22:00:00');
var day = currentDate.getDate();
var month = currentDate.getMonth() + 1; // Months are zero-indexed, so add 1
var year = currentDate.getFullYear();
var formattedDate = day + '/' + month + '/' + year;
-var currentVersion = 'v1.2.6a [' + formattedDate + ']';
+var currentVersion = 'v1.2.7 [' + formattedDate + ']';
getInitialSettings();
+removeUrlParameters(); // Call this function to remove URL parameters
function getInitialSettings() {
$.ajax({
@@ -26,4 +27,12 @@ function getInitialSettings() {
console.error('Error:', error);
}
});
-}
\ No newline at end of file
+}
+
+function removeUrlParameters() {
+ // Get the current URL without the query parameters
+ var urlWithoutParams = window.location.protocol + "//" + window.location.host + window.location.pathname;
+
+ // Replace the current URL with the new one, without reloading the page
+ window.history.replaceState({ path: urlWithoutParams }, '', urlWithoutParams);
+}
diff --git a/web/js/main.js b/web/js/main.js
index 88fd336..2ef47e6 100644
--- a/web/js/main.js
+++ b/web/js/main.js
@@ -605,7 +605,7 @@ function findOnMaps() {
var latitude = localStorage.getItem('qthLongitude');
var longitude = localStorage.getItem('qthLatitude');
- var url = `https://maps.fmdx.pl/#qth=${longitude},${latitude}&freq=${frequency}&findPi=${pi}`;
+ var url = `https://maps.fmdx.org/#qth=${longitude},${latitude}&freq=${frequency}&findPi=${pi}`;
window.open(url, "_blank");
}
diff --git a/web/js/settings.js b/web/js/settings.js
index ff72451..d156332 100644
--- a/web/js/settings.js
+++ b/web/js/settings.js
@@ -56,11 +56,10 @@ $(document).ready(() => {
const signalSelector = $('#signal-selector');
const signalParameter = getQueryParameter('signalUnits');
- if(signalParameter) {
- signalSelector.find('input').val($(signalParameter).text());
- }
-
- if (localStorage.getItem('signalUnit')) {
+ if(signalParameter && !localStorage.getItem('signalUnit')) {
+ signalSelector.find('input').val(signalSelector.find('.option[data-value="' + signalParameter + '"]').text());
+ localStorage.setItem('signalUnit', signalParameter);
+ } else {
signalSelector.find('input').val(signalSelector.find('.option[data-value="' + savedUnit + '"]').text());
}