Update
This commit is contained in:
180
Railuino/data/script.js
Normal file
180
Railuino/data/script.js
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user