1
0
mirror of https://github.com/KubaPro010/fm-dx-webserver.git synced 2026-02-27 06:23:53 +01:00

bugfixes, global url params, rds endpoint

This commit is contained in:
NoobishSVK
2024-07-31 16:29:16 +02:00
parent 7c2a71978b
commit e9d389fef0
21 changed files with 376 additions and 251 deletions

View File

@@ -1,4 +1,3 @@
const DefaultVolume = 0.5;
let Stream;
let shouldReconnect = true;
let newVolumeGlobal = 1;
@@ -28,7 +27,7 @@ function destroyStream() {
function OnConnectivityCallback(isConnected) {
console.log("Connectivity changed:", isConnected);
if (Stream) {
Stream.Volume = isConnected ? 1.0 : DefaultVolume;
Stream.Volume = $('#volumeSlider').val();
} else {
console.warn("Stream is not initialized.");
}

View File

@@ -1,73 +1,108 @@
// Variables
const $dropdowns = $('.dropdown');
const $input = $('input');
const $listOfOptions = $('.option');
let currentDropdown = null; // Track the currently clicked dropdown
$(document).ready(function() {
// Variables
const $dropdowns = $('.dropdown');
const $listOfOptions = $('.option');
let currentDropdown = null; // Track the currently clicked dropdown
let currentIndex = -1; // Track the currently focused option
// Functions
const toggleDropdown = (event) => {
event.stopPropagation();
const $currentDropdown = $(event.currentTarget);
// Close the previously opened dropdown if any
$dropdowns.not($currentDropdown).removeClass('opened');
$currentDropdown.toggleClass('opened');
currentDropdown = $currentDropdown.hasClass('opened') ? $currentDropdown : null;
// Functions
const toggleDropdown = (event) => {
event.stopPropagation();
const $currentDropdown = $(event.currentTarget).closest('.dropdown');
// Close the previously opened dropdown if any
$dropdowns.not($currentDropdown).removeClass('opened');
$currentDropdown.toggleClass('opened');
currentDropdown = $currentDropdown.hasClass('opened') ? $currentDropdown : null;
currentIndex = -1; // Reset the current index when toggling the dropdown
};
const selectOption = (event) => {
const $currentDropdown = currentDropdown;
const selectOption = (event) => {
const $currentDropdown = currentDropdown;
switch($currentDropdown.attr('id')) {
case 'data-ant':
socket.send("Z" + $(event.currentTarget).attr('data-value'));
tuneTo(getCurrentFreq()); //Reset RDS when change antenna input
break;
case 'data-bw':
legacyBwValue = $(event.currentTarget).attr('data-value2') || "";
socket.send("F" + legacyBwValue);
socket.send("W" + $(event.currentTarget).attr('data-value'));
$currentDropdown.find('input').val($(event.currentTarget).text());
break;
default:
$currentDropdown.find('input').val($(event.currentTarget).text());
break;
}
switch($currentDropdown.attr('id')) {
case 'data-ant':
socket.send("Z" + $(event.currentTarget).attr('data-value'));
tuneTo(getCurrentFreq()); // Reset RDS when change antenna input
break;
case 'data-bw':
legacyBwValue = $(event.currentTarget).attr('data-value2') || "";
socket.send("F" + legacyBwValue);
socket.send("W" + $(event.currentTarget).attr('data-value'));
$currentDropdown.find('input').val($(event.currentTarget).text());
break;
default:
$currentDropdown.find('input').val($(event.currentTarget).text());
break;
}
// Use setTimeout to delay class removal
setTimeout(() => {
$currentDropdown.removeClass('opened');
currentDropdown = null;
}, 10); // Adjust the delay as needed
};
// Use setTimeout to delay class removal
setTimeout(() => {
$currentDropdown.removeClass('opened');
currentDropdown = null;
}, 10); // Adjust the delay as needed
};
const closeDropdownFromOutside = (event) => {
const $currentDropdown = currentDropdown && $(currentDropdown);
const isClickedInsideDropdown = $currentDropdown && $currentDropdown.has(event.target).length > 0;
const closeDropdownFromOutside = (event) => {
const $currentDropdown = currentDropdown && $(currentDropdown);
const isClickedInsideDropdown = $currentDropdown && $currentDropdown.has(event.target).length > 0;
if (!isClickedInsideDropdown && $currentDropdown && $currentDropdown.hasClass('opened')) {
$currentDropdown.removeClass('opened');
currentDropdown = null;
}
};
if (!isClickedInsideDropdown && $currentDropdown && $currentDropdown.hasClass('opened')) {
$currentDropdown.removeClass('opened');
currentDropdown = null;
}
};
// Event Listeners
$(document).on('click', closeDropdownFromOutside);
$listOfOptions.on('click', selectOption);
$dropdowns.on('click', toggleDropdown);
const navigateOptions = (event) => {
if (!currentDropdown) return;
// MULTISELECT
$('.multiselect option').mousedown(function(e) {
e.preventDefault();
var originalScrollTop = $(this).parent().scrollTop();
console.log(originalScrollTop);
$(this).prop('selected', $(this).prop('selected') ? false : true);
var self = this;
$(this).parent().focus();
setTimeout(function() {
$(self).parent().scrollTop(originalScrollTop);
}, 0);
return false;
});
const $options = currentDropdown.find('.option');
switch (event.key) {
case 'ArrowDown':
event.preventDefault();
currentIndex = (currentIndex + 1) % $options.length;
$options.eq(currentIndex).focus();
break;
case 'ArrowUp':
event.preventDefault();
currentIndex = (currentIndex - 1 + $options.length) % $options.length;
$options.eq(currentIndex).focus();
break;
case 'Enter':
event.preventDefault();
$options.eq(currentIndex).click();
break;
case 'Escape':
currentDropdown.removeClass('opened');
currentDropdown = null;
currentIndex = -1;
break;
}
};
// Event Listeners
$(document).on('click', closeDropdownFromOutside);
$listOfOptions.on('click', selectOption);
$dropdowns.on('click', 'input', toggleDropdown);
$dropdowns.on('keydown', 'input', function(event) {
if (event.key === 'Enter') {
toggleDropdown(event);
}
});
$dropdowns.on('keydown', '.option', navigateOptions);
// MULTISELECT
$('.multiselect option').mousedown(function(e) {
e.preventDefault();
var originalScrollTop = $(this).parent().scrollTop();
$(this).prop('selected', $(this).prop('selected') ? false : true);
var self = this;
$(this).parent().focus();
setTimeout(function() {
$(self).parent().scrollTop(originalScrollTop);
}, 0);
return false;
});
});

View File

@@ -1,9 +1,9 @@
var currentDate = new Date('Jul 21, 2024 22:00:00');
var currentDate = new Date('Jul 31, 2024 17: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.5 [' + formattedDate + ']';
var currentVersion = 'v1.2.6 [' + formattedDate + ']';
getInitialSettings();

View File

@@ -432,7 +432,8 @@ function checkKey(e) {
if ($('#password:focus').length > 0
|| $('#chat-send-message:focus').length > 0
|| $('#volumeSlider:focus').length > 0
|| $('#chat-nickname:focus').length > 0) {
|| $('#chat-nickname:focus').length > 0
|| $('.option:focus').length > 0) {
return;
}
@@ -612,7 +613,7 @@ function findOnMaps() {
function updateSignalUnits(parsedData, averageSignal) {
const signalUnit = localStorage.getItem('signalUnit');
let currentSignal;
let highestSignal = parsedData.highestSignal;
let highestSignal = parsedData.sigTop;
currentSignal = averageSignal
let signalText = $('.signal-units');
@@ -720,7 +721,7 @@ const updateDataElements = throttle(function(parsedData) {
stereoColor = 'var(--color-3)';
}
if(parsedData.st_forced) {
if(parsedData.stForced) {
stereoColor = 'gray';
}
$dataSt.css('border', '2px solid ' + stereoColor);
@@ -747,14 +748,14 @@ const updateDataElements = throttle(function(parsedData) {
$dataBwInput.val($('#data-bw li[data-value="' + parsedData.bw + '"]').text());
}
if (parsedData.txInfo.station.length > 1) {
updateTextIfChanged($('#data-station-name'), parsedData.txInfo.station.replace(/%/g, '%25'));
if (parsedData.txInfo.tx.length > 1) {
updateTextIfChanged($('#data-station-name'), parsedData.txInfo.tx.replace(/%/g, '%25'));
updateTextIfChanged($('#data-station-erp'), parsedData.txInfo.erp);
updateTextIfChanged($('#data-station-city'), parsedData.txInfo.city);
updateTextIfChanged($('#data-station-itu'), parsedData.txInfo.itu);
updateTextIfChanged($('#data-station-pol'), parsedData.txInfo.pol);
updateTextIfChanged($('#data-station-distance'), parsedData.txInfo.distance);
updateTextIfChanged($('#data-station-azimuth'), parsedData.txInfo.azimuth);
updateTextIfChanged($('#data-station-distance'), parsedData.txInfo.dist);
updateTextIfChanged($('#data-station-azimuth'), parsedData.txInfo.azi);
$dataStationContainer.css('display', 'block');
} else {
$dataStationContainer.removeAttr('style');
@@ -786,7 +787,7 @@ let isEventListenerAdded = false;
function updatePanels(parsedData) {
updateCounter++;
signalData.push(parsedData.signal);
signalData.push(parsedData.sig);
if (signalData.length > 8) {
signalData.shift(); // Remove the oldest element
}
@@ -840,8 +841,10 @@ function updateButtonState(buttonId, value) {
var button = $("#" + buttonId);
if (value == 0) {
button.hasClass("btn-disabled") ? null : button.addClass("btn-disabled");
button.attr('aria-description', 'Off');
} else {
button.hasClass("btn-disabled") ? button.removeClass("btn-disabled") : null;
button.attr('aria-description', 'On');
}
}
@@ -856,7 +859,7 @@ function toggleButtonState(buttonId) {
function toggleForcedStereo() {
var message = "B";
message += parsedData.st_forced = (parsedData.st_forced == "1") ? "0" : "1";
message += parsedData.stForced = (parsedData.stForced == "1") ? "0" : "1";
socket.send(message);
}
@@ -865,7 +868,7 @@ function toggleAdminLock() {
if($adminLockButton.hasClass('active')) {
socket.send('wL0');
$adminLockButton.attr('aria-label', '"ock Tuner (Admin)')
$adminLockButton.attr('aria-label', 'Lock Tuner (Admin)')
$adminLockButton.removeClass('active');
} else {
socket.send('wL1');

View File

@@ -33,6 +33,12 @@ $(document).ready(() => {
if(defaultTheme && themes[defaultTheme]) {
setTheme(defaultTheme);
}
const themeParameter = getQueryParameter('theme');
if(themeParameter && themes[themeParameter]) {
setTheme(themeParameter);
themeSelector.find('input').val(themeSelector.find('.option[data-value="' + themeParameter + '"]').text());
}
if (savedTheme && themes[savedTheme]) {
setTheme(savedTheme);
@@ -49,6 +55,12 @@ $(document).ready(() => {
const signalSelector = $('#signal-selector');
const signalParameter = getQueryParameter('signalUnits');
if(signalParameter) {
signalSelector.find('input').val($(signalParameter).text());
localStorage.setItem('signalUnit', signalParameter);
}
if (localStorage.getItem('signalUnit')) {
signalSelector.find('input').val(signalSelector.find('.option[data-value="' + savedUnit + '"]').text());
}
@@ -123,9 +135,16 @@ $(document).ready(() => {
localStorage.setItem("extendedFreqRange", isChecked);
});
var extendedFreqRange = localStorage.getItem("psUnderscores");
if (extendedFreqRange === "true") {
$("#ps-underscores").prop("checked", true);
const psUnderscoreParameter = getQueryParameter('psUnderscores');
if(psUnderscoreParameter) {
$("#ps-underscores").prop("checked", psUnderscoreParameter);
localStorage.setItem("psUnderscores", psUnderscoreParameter);
}
var psUnderscores = localStorage.getItem("psUnderscores");
if (psUnderscores) {
$("#ps-underscores").prop("checked", psUnderscores);
localStorage.setItem("psUnderscores", psUnderscores);
}
$("#ps-underscores").change(function() {
@@ -138,6 +157,10 @@ $(document).ready(() => {
setBg();
});
function getQueryParameter(name) {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get(name);
}
function setTheme(themeName) {
const themeColors = themes[themeName];
@@ -162,7 +185,8 @@ function setTheme(themeName) {
}
function setBg() {
if(localStorage.getItem('bgImage').length > 5 && localStorage.getItem('theme') != 'theme9') {
const disableBackgroundParameter = getQueryParameter('disableBackground');
if(localStorage.getItem('bgImage').length > 5 && localStorage.getItem('theme') != 'theme9' && disableBackgroundParameter != 'true') {
$('body').css('background', 'url(' + localStorage.getItem('bgImage') + ') top center / cover fixed no-repeat var(--color-main)');
} else {
$('body').css('background', 'var(--color-main)');