This commit is contained in:
Serge NOEL
2026-02-10 11:27:18 +01:00
parent 549c9f388e
commit 4423bb2de1
175 changed files with 238087 additions and 0 deletions

180
Railuino/data/script.js Normal file
View File

@@ -0,0 +1,180 @@
let isPowerOn = false;
const locos = {};
let selectedLoco = null;
// Classe Loco
class Loco {
constructor(address) {
this.address = address;
this.speed = 0;
this.direction = 0;
this.functions = Array(10).fill(false);
}
setSpeed(speed) {
this.speed = speed;
}
setDirection(direction) {
this.direction = direction;
}
setFunction(index, state) {
this.functions[index] = state;
}
}
// Créer des instances de Loco pour chaque bouton image
document.querySelectorAll('.address-button').forEach(button => {
const address = button.getAttribute('data-address');
locos[address] = new Loco(address);
});
// Fonction pour mettre à jour l'affichage avec les valeurs de la locomotive sélectionnée
function updateUI() {
if (selectedLoco) {
document.getElementById('speedSlider').value = selectedLoco.speed;
updateSpeedValue(selectedLoco.speed);
document.querySelectorAll('.function-button').forEach((button, index) => {
if (selectedLoco.functions[index]) {
button.classList.add('active');
} else {
button.classList.remove('active');
}
});
}
}
// Fonction pour ajouter un message au log
// function addLogMessage(message) {
// const logWindow = document.getElementById('logWindow');
// const newMessage = document.createElement('div');
// newMessage.textContent = message;
// logWindow.appendChild(newMessage);
// logWindow.scrollTop = logWindow.scrollHeight;
// }
function addLogMessage(message) {
const logWindow = document.getElementById('logWindow');
logWindow.textContent = message; // Remplace le contenu du log par le nouveau message
}
// Gestionnaire d'événement pour le bouton d'alimentation
document.getElementById('powerButton').addEventListener('click', () => {
fetch('/setPower', { method: 'POST' })
.then(response => response.text())
.then(state => {
isPowerOn = state === 'true';
const powerButton = document.getElementById('powerButton');
if (isPowerOn == true) {
powerButton.classList.remove('power-off');
powerButton.classList.add('power-on');
addLogMessage('Power ON');
} else if (isPowerOn == false) {
powerButton.classList.remove('power-on');
powerButton.classList.add('power-off');
addLogMessage('Power OFF');
} else {
addLogMessage('Error for power function');
}
});
});
document.getElementById('systemHaltButton').addEventListener('click', () => {
if (selectedLoco) {
fetch(`/setSystemHalt?address=0x0000`, { method: 'POST' })
.then(() => {
document.getElementById('speedSlider').value = 0;
updateSpeedValue(0);
selectedLoco.setSpeed(0);
addLogMessage(`System Halt`);
});
}
});
document.getElementById('stopButton').addEventListener('click', () => {
if (selectedLoco) {
fetch(`/setStop?address=${selectedLoco.address}`, { method: 'POST' })
.then(() => {
document.getElementById('speedSlider').value = 0;
updateSpeedValue(0);
selectedLoco.setSpeed(0);
addLogMessage(`Stop for address ${selectedLoco.address}`);
});
}
});
document.getElementById('directionButton').addEventListener('click', () => {
if (selectedLoco) {
selectedLoco.direction = 1 - selectedLoco.direction; // Change de direction
fetch(`/setDirection?address=${selectedLoco.address}`, { method: 'POST' })
.then(() => {
document.getElementById('speedSlider').value = 0;
updateSpeedValue(0);
addLogMessage(`Direction change for address ${selectedLoco.address}`);
});
}
});
document.getElementById('speedSlider').addEventListener('input', (event) => {
if (!isPowerOn) {
addLogMessage('Power is off');
event.target.value = 0; // Réinitialiser le curseur à 0
updateSpeedValue(0);
return;
}
if (!selectedLoco) {
addLogMessage('Select a locomotive');
event.target.value = 0; // Réinitialiser le curseur à 0
updateSpeedValue(0);
return;
}
const speed = event.target.value;
fetch(`/setSpeed?address=${selectedLoco.address}&speed=${speed}`, { method: 'POST' });
selectedLoco.setSpeed(speed);
updateSpeedValue(speed);
addLogMessage(`Speed set to ${speed} for address ${selectedLoco.address}`);
});
document.querySelectorAll('.address-button').forEach(button => {
button.addEventListener('click', () => {
// Supprimer la classe 'selected' de tous les boutons
document.querySelectorAll('.address-button').forEach(btn => btn.classList.remove('selected'));
// Ajouter la classe 'selected' au bouton cliqué
button.classList.add('selected');
// Mettre à jour la locomotive sélectionnée
const address = button.getAttribute('data-address');
selectedLoco = locos[address];
// Envoyer l'adresse au serveur
fetch(`/setAddress?address=${address}`, { method: 'POST' });
// Mettre à jour l'interface utilisateur avec les valeurs de la locomotive sélectionnée
updateUI();
addLogMessage(`Locomotive selected with address ${address}`);
});
});
document.querySelectorAll('.function-button').forEach(button => {
button.addEventListener('click', () => {
if (selectedLoco) {
const functionId = button.getAttribute('data-function');
const newState = !selectedLoco.functions[functionId];
fetch(`/setFunction?address=${selectedLoco.address}&function=${functionId}&power=${newState ? 1 : 0}`, { method: 'POST' })
.then(() => {
selectedLoco.setFunction(functionId, newState);
if (newState) {
button.classList.add('active');
addLogMessage(`Function F ${functionId} activated for address ${selectedLoco.address}`);
} else {
button.classList.remove('active');
addLogMessage(`Function F ${functionId} deactivated for address ${selectedLoco.address}`);
}
});
}
});
});
function updateSpeedValue(speed) {
const speedValue = document.getElementById('speedValue');
const percentage = (speed / 1000) * 100;
speedValue.textContent = Math.round(percentage);
}